Python: что предпочитает "импорт" - модули или пакеты?

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

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

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

Ответы

Ответ 1

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

% 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 и получил тот же результат.