У меня есть файл под названием tester.py
, расположенный по адресу /project
.Импортировать файл из подкаталога?
/project
имеет подкаталог lib
, с файлом под названием BoxTime.py
:
/project/tester.py
/project/lib/BoxTime.py
Я хочу, чтобы импортировать BoxTime
из tester
. Я попытался это:
import lib.BoxTime
Что привело:
Traceback (most recent call last):
File "./tester.py", line 3, in <module>
import lib.BoxTime
ImportError: No module named lib.BoxTime
Любые идеи, как импортировать BoxTime
из подкаталога?
EDIT
__init__.py
была проблема, но не забывайте ссылаться на BoxTime
в lib.BoxTime
или использования:
import lib.BoxTime as BT
...
BT.bt_function()
Почему это чувствует * Hacky *? Это то, как питон записывает безопасные/доступные каталоги импорта. – IAbstract
Не только он маркирует безопасные/доступные каталоги импорта, но также предоставляет способ запускать некоторый код инициализации при импорте имени каталога. – Sadjad
Да, это взломанно и даже грязно, и, на мой взгляд, язык не должен накладывать способ загрузки файлов через файловую систему. В PHP мы решили проблему, разрешив коду userland регистрировать несколько функций автозагрузки, вызываемых при отсутствии пространства имен/классов. Тогда сообщество выпустило стандарт PSR-4, и Composer его реализует, и в наши дни никто не должен беспокоиться об этом. И никаких глупых жестко закодированных '__init__' файлов (но если вы этого хотите, просто зарегистрируйте автозагрузку! В этом разница между _hacky_ и _hackable_). –