Импорт модулей Python для использования только в одном файле - PullRequest
5 голосов
/ 03 декабря 2011

Точнее, скажем, у меня есть несколько файлов .py, с main.py, импортирующими такие вещи, как os, pygame, math и все мои другие файлы .py, mymodule01.py и т. Д.

Моя проблема заключается в том, что всякий раз, когда main.py вызывает один из моих файлов .py, и этот файл содержит что-то вроде os.listdir (), я получаю сообщение об ошибке, говоря что-то вроде «os не определен».

Должен ли я просто импортировать все необходимые модули в каждый файл .py, который я пишу, или есть лучший способ, например, централизованный импорт, который может распознать каждый файл? Особенно с pygame это было бы очень запутанным, так как я должен был бы инициировать pygame в каждом файле только для того, чтобы использовать его функции, не говоря уже о том, хочу ли я что-то перетаскивать на экране.

Документация по модулям и пакетам python не сильно помогла, или я очень медленный, также учитывая, что после следования документации я продолжаю получать ошибку not found после добавления, например. импортируйте файл mymodule01.py в файл init .py в папке, содержащей его.

Ответы [ 2 ]

4 голосов
/ 04 декабря 2011

Я думаю, у вас может сложиться впечатление, что «import» действует как «include» на других языках. Это не так.

Каждый объект модуля является одиночным. Нет снижения производительности или опасности инициализации кода модуля более одного раза.

Кроме того, каждый файл имеет собственную область видимости, поэтому в вашем примере, если вы определите foo = 1 в main.py, foo не будет виден в mymodule01.py. Вы должны были бы import main; main.foo увидеть это (не то, что вы должны)

Вы ворчите, но это намного лучшая система, чем include

4 голосов
/ 03 декабря 2011

Должен ли я просто импортировать все необходимые модули в каждый файл .py, который я пишу

Да.

Особенно с pygame это было бы очень запутанным, так как я должен был бы инициировать pygame в каждом файле, чтобы использовать его функции

Нет, только инициируйте это один раз. Там только одна копия модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...