2013-05-11 3 views

ответ

3

Импортируйте модули в модуль, который их использует.

Размещение import os в __init__.py поставит os в глобальном пространстве имен пакета, но это не будет влиять на пространство имен модуля, который использует os. Глобальные пространства имен не разделяются между модулями или пакетами, поэтому вы получите NameError с, если вы не импортировали их в модуль, который использует os.

+0

Включение 'import os', однако, в' __init __. Py' будет влиять на любой модуль, который выполняет 'from my_awesome_package import *', потому что теперь они будут иметь модуль 'os' в своем пространстве имен, что неожиданно повлияет на возможные функции или глобальные переменные. Хотя использование '*' недоверчиво, достаточно людей по-прежнему используют его, и авторы пакетов должны быть внимательны даже от них. –

+0

@ sigmavirus24: Многие модули и пакеты разработаны специально для поддержки стиля кодирования 'from xxx import * 'и делают это определяя переменную уровня модуля или пакета с именем '__all__', которая содержит последовательность строк имен определённых ею вещей (исключая все, что не упоминается). Для пакетов, которые часто создаются в файле '__init_.py'. – martineau

+0

@martineau Я хорошо знаю об этом. ОП просил о том, чтобы вставить это там, не упоминая об этом или что-то еще, поэтому я обратился к этим проблемам с этим и ничего больше. –

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