Невозможно импортировать модуль из каталога bin того же проекта

Я создаю библиотеку, которая будет включена в другие проекты через pip.

У меня есть следующие каталоги («venv» – виртуальный):

project \- bin \- run.py \- myproj \- __init__.py \- logger.py \- venv 

Я активирую virtualenv.

В bin / run.py у меня есть:

 from myproj.logger import LOG 

но я всегда получаю

 ImportError: No module named myproj.logger 

Следующие работы из проекта «project»:

 python -c "from myproj.logger import LOG" 

Неправильно добавить каталог «project» в pythonpath при вызове из каталога «bin». Как импортировать модули из «myproj» из сценариев в моем каталоге bin?

Самое простое решение – добавить родительскую папку как путь к поиску, выше импорта.

 import sys,os sys.path.append(os.path.abspath('..')) from myproj.logger import LOG 

Установите myproject в venv ; то вы сможете импортировать myproject из любого скрипта (включая bin/run.py ), пока среда активируется без sys.path хаков.

Чтобы установить, создайте project/setup.py для пакета myproject и запустите из каталога project пока активен virtualenv:

 $ pip install -e . 

Он установит myproject inplace (изменения в myproject будут видны сразу же без переустановки myproject ).

Только текущий рабочий каталог находится внутри PYTHONPATH, который используется для разрешения зависимостей. Итак, если вы находитесь внутри bin и выполняете свой скрипт, проект больше не находится в пути. Вы должны использовать один из распространенных методов для добавления проекта в PYTHONPATH, либо путем добавления к переменной среды, либо путем редактирования программного списка sys.path программным способом, как указано в другом ответе.

добавить путь проекта в PYTHONPATH