У меня есть эта структура каталогов:"Сайт" не является пакет
my_project/
site/
__init__.py
app.py
main.py
main.py содержит следующее:
import site.app
print('Success')
Получить эту ошибку:
Traceback (most recent call last):
File "main.py", line 1, in <module>
import site.app
ImportError: No module named 'site.app'; 'site' is not a package
переименовании «сайт «для любого другого имени это работает правильно. Пример:
$ mv site/ foo/
$ echo -e "import foo.app\nprint('Success')" > main.py
$ python main.py
Success
$
Является ли «сайт» специальным именем упаковки? Зачем? Как мне обойти это?
Ах, конечно, как глупо. Но что, если я хочу назвать это так или иначе? – William
@William: Вы могли бы обойти это, изменив порядок путей в вашем 'sys.path'. Однако вы действительно не должны этого делать. Никто другой не сможет использовать ваш модуль, не делая никаких хаков, которые вы сделали, чтобы заставить его работать. – BrenBarn
Нет способа в Python 3 Я могу указать «относительный импорт» и сказать «из». import site.app' или что-то еще? (Я пробовал этот точный синтаксис, предложенный [pep 328] (https://www.python.org/dev/peps/pep-0328/). Давайте будем ясно, что я не спрашиваю о «лучшей практике», но «что возможно». Я знаю, что это нехорошо делать :) – William