Подтвердить что ты не робот

Как импортировать пакет/модули из 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

Что мне не хватает?

4b9b3361

Ответ 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
    

Если система поддерживает символическую ссылку, это лучший выбор.