Я использую IPython в течение некоторого времени, не имея необходимости упаковывать код. Я просмотрел следующие страницы и установил структуру каталогов для своих модулей и теперь использую IPython для запуска программы.NameError после упаковки Код Python
https://docs.python.org/3/reference/import.html
https://docs.python.org/3/tutorial/modules.html
http://pythoncentral.io/how-to-create-a-python-package/
Вот суть моей установки
корень Foder
модули (каталог)
1,1 external.py
1,2 getdata.py
driver.ipynb
Я создал директорию модулей и создал два файла.
модули (каталог)
- external.py (содержит следующее)
import glob # and many other import statements
- getdata.py (содержит следующее)
def funcname():
file_list = glob.glob("Data/")
def other_func():
x = x + 3
Теперь я выполните следующий код в записной книжке IPython
from modules import external
from modules.getdata import *
# so that I can funcname() instead of modules.getdata.funcname()
other_func() # runs as expected
funcname() # NameError global name 'glob' is not defined
Запуск glob.glob («Данные /») в ноутбуке IPython не выдаёт никаких ошибок.
Как исправить эту проблему с пространством имен без переименования какой-либо функции? У меня есть дюжина функций, и все они имеют одну и ту же проблему.
Edit 1: - Я забыл упомянуть материал, который я уже пытался
оператор импорта в getdata.py
import glob
def funcname():
file_list = glob.glob("Data/")
def other_func():
x = x + 3
У меня есть более чем один файл, который использует Glob. Есть ли другая альтернатива, которая импортирует модули в каждом файле?
Я подумал об этом, не будет ли замедленный материал?У меня есть несколько файлов, которые используют glob, поэтому мне придется импортировать их в каждый файл. Почему мой способ не работает? –
@AbhirathMahipal, 'import' в другом файле не влияет на пространство имен других модулей. – falsetru
@AbhirathMahipal, если модуль импортирован в модуль, импорт его снова в другом модуле не перезагружает, а повторно использует уже импортированный модуль. – falsetru