2016-09-05 4 views
1

Трудно найти заголовок для этого вопроса, и, надеюсь, этот поток не является дубликатом.NameError - импортированные модули, когда скрипт разбит на несколько файлов python

Я написал этот длинный сценарий в Python 2.7 (используя PyCharm 2016.2.2) для проекта и решил разделить его на разные .py-файлы, которые я мог бы затем импортировать в основной файл.

К сожалению, кажется, что при импорте модуля (например, numpy) ранее в коде не означает, что файлы .py, импортированные ниже, будут знать об этом.

Я новичок в python, и мне было интересно, есть ли простой способ обхода этого.

Чтобы быть более ясным, вот пример структуры моего кода:

Main.py (файл, который используется для выполнения сценария):

import basic 
numpy.random.seed(7) 
import load_data 

basic.py:

import pandas 
import numpy 
      etc... 

load_data.py:

raw_input = pandas.read_excel('April.xls', index_col = 'DateTime') 
      etc... 

Вторая линия Main.py вызовет ошибку «NameError: название„NumPy“не определен», то есть NumPy, который был импортирован в basic.py не передается Main.py.

Я думаю, что аналогичная ошибка возникла бы для кода в load_data.py, так как «pandas» не было бы определенным именем.

Любые идеи?

Спасибо.

+0

Естественно, я импортирую файлы python без расширения .py. –

+0

Каждый модуль имеет собственное пространство имен. Импорт в одном модуле не делает его доступным для других. Вы должны импортировать в каждый файл, который использует 'numpy'. Идея является одним из * инкапсуляции *. https://en.wikipedia.org/wiki/Encapsulation_(computer_programming) – cdarke

+1

@BobSmith не помещает '.py' в свой код и путает людей. – MattDMo

ответ

0

Модуль numpy, импортированный в basic.py, имеет ссылку, определенную только с областью basic.py. Вы должны явно импортировать numpy везде, где вы его используете.

import basic.py 
import numpy 
numpy.random.seed(7) 
import load_data.py 
+0

Большое спасибо. Я просто подумал, что может быть способ импорта модулей один раз с глобальной областью. –

Смежные вопросы