Как импортировать пакет/модули из script в папку bin в python
При организации проекта python эта структура выглядит стандартным способом:
myproject\
bin\
myscript
mypackage\
__init__.py
core.py
tests\
__init__.py
mypackage_tests.py
setup.py
Мой вопрос: как мне импортировать mycore.py, чтобы я мог использовать его в myscript?
оба файла __init__.py
пусты.
Содержимое myscript:
#!/usr/bin/env python
from mypackage import core
if __name__ == '__main__':
core.main()
Содержимое core.py
def main():
print 'hello'
Когда я запускаю myscript изнутри каталога myproject, я получаю следующую ошибку:
Traceback (most recent call last):
File "bin/myscript", line 2, in <module>
from mypackage import core
ImportError: No module named mypackage
Что мне не хватает?
Ответы
Ответ 1
Обычно setup.py
должен устанавливать пакет в месте, где интерпретатор Python может его найти, поэтому после установки import mypackage
будет работать. Чтобы облегчить запуск сценариев в bin
прямо из дерева разработки, я обычно просто добавлял ссылку на ../mypackage/
в каталог bin
. Конечно, для этого требуется файловая система, поддерживающая символические ссылки...
Ответ 2
Я не уверен, есть ли "лучший выбор", но следующая нормальная практика:
-
Поместите все script Я хочу запустить /bin
-
выполните "python -m bin.script" в каталоге dir myproject
-
При импорте в script.py рассмотрите каталог, в котором script.py сидит как root. Так
from ..mypackage import core
Если система поддерживает символическую ссылку, это лучший выбор.