2016-07-02 7 views
1

Я использую 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,1 external.py

    1,2 getdata.py

  2. 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. Есть ли другая альтернатива, которая импортирует модули в каждом файле?

ответ

1

Добавить import glob в getdata.py (где glob модуль используется), а не в external.py.

import glob # <-- 

def funcname(): 
    file_list = glob.glob("Data/") 

def other_func(): 
    x = x + 3 
+0

Я подумал об этом, не будет ли замедленный материал?У меня есть несколько файлов, которые используют glob, поэтому мне придется импортировать их в каждый файл. Почему мой способ не работает? –

+0

@AbhirathMahipal, 'import' в другом файле не влияет на пространство имен других модулей. – falsetru

+1

@AbhirathMahipal, если модуль импортирован в модуль, импорт его снова в другом модуле не перезагружает, а повторно использует уже импортированный модуль. – falsetru