файл должен быть только
я есть проект Python, состоящий из блокнота Jupyter, нескольких сценариев вbin
каталог и модули вsrc
каталог, с зависимостями вPipfile
:
myproject
├── myproject.ipynb
├── Pipfile
├── Pipfile.lock
├── bin
│ ├── bar.py
│ └── foo.py
└── src
├── baz.py
└── qux.py
Сценарииfoo.py
а такжеbar.py
использовать стандартный Shebang
#!/usr/bin/env python
и может быть запущен сpipenv shell
:
mymachine:myproject myname$ pipenv shell
(myproject-U308romt) bash-3.2$ bin/foo.py
foo
Тем не менее, я не могу легко получить доступ к модулям вsrc
из сценариев. Если я добавлю
import src.baz as baz
вfoo.py
, Я получил:
ModuleNotFoundError: No module named 'src'
Одно из решений, которое я попробовал, это добавить.env
файл подmyproject
:
PYTHONPATH=${PYTHONPATH}:${PWD}
Это работает благодаряpipenv
«sавтоматическая загрузка.env
, но проверяя.env
файл в дистрибутив проекта git будет сталкиваться с традиционным использованием.env
хранить секреты, такие как пароли - на самом деле, мой по умолчанию.gitignore
для проектов Python уже исключает.env
только по этой причине.
$ git add .env
The following paths are ignored by one of your .gitignore files:
.env
Use -f if you really want to add them.
В качестве альтернативы, я мог бы двигатьсяsrc
подbin
, но тогда блокнот Jupyter должен будет ссылаться на модули какbin.src.baz
и т.д., что также является проблемой.
Мой текущий обходной путь - просто добавить символическую ссылку:
myproject
├── Pipfile
├── Pipfile.lock
├── bin
│ ├── bar.py
│ ├── foo.py
│ └── src -> ../src
└── src
├── baz.py
└── qux.py
Это работает, и я полагаю, что преимущество заключается в прозрачности, но, похоже, должен быть какой-то способ использоватьpipenv
решить ту же проблему.
Существует ли переносимый распространяемый способ размещения этих модулей в пути поиска?