Python: что предпочитает «импорт» - модули или пакеты? - PullRequest
14 голосов
/ 18 мая 2011

Предположим, что в текущем каталоге есть файл с именем somecode.py и каталог с именем somecode, который содержит файл __init__.py.Теперь я запускаю какой-то другой скрипт Python из этого каталога, который выполняет import somecode.Какой файл будет импортирован - somecode.py или somecode/__init__.py?

Существует ли даже определенный и надежный порядок поиска, в котором это разрешается?

О, и есть ли у кого-нибудь ссылка наофициальная документация для этого поведения?: -)

Ответы [ 2 ]

12 голосов
/ 18 мая 2011

Пакеты будут импортированы до модулей.Иллюстрированный:

% tree .
.
|-- foo
|   |-- __init__.py
|   `-- __init__.pyc
`-- foo.py

foo.py:

% cat foo.py 
print 'you have imported foo.py'

foo/__init__.py:

% cat foo/__init__.py
print 'you have imported foo/__init__.py'

И от интерактивного переводчика:

>>> import foo
you have imported foo/__init__.py

Я понятия не имею, где это официально задокументировано.

Редактировать за комментарий: Это было выполнено с Python 2.7 на Mac OS X 10.6.7.Я также выполнил это с использованием Python 2.6.5 на Ubuntu 10.10 и получил тот же результат.

0 голосов
/ 13 февраля 2018

протестировано в Windows 10 (Python версии 3.5) и в Ubuntu Linux (Python версии 2.7 и 3.5) с использованием следующего каталога:

https://github.com/alphaCTzo7G/stackexchange/tree/master/python/order_import_module_vs_package

Результат

Модуль всегда загружается, и каждый раз выводится следующее сообщение:

"Вы импортировали foo / init .py"

Таким образом, кажется, что в этих системах согласованно, что пакет загружается первым.

...