У меня есть проект 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
- добавить файл .env
в myproject
:
PYTHONPATH=${PYTHONPATH}:${PWD}
Это работает благодаря pipenv
автоматической загрузки .env
, но проверка .env
файл в распределение мерзавца проекта будет сталкиваться с традиционным использованием .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
и т.д., bin.src.baz
также является проблемой.
Мое текущее решение - просто добавить символическую ссылку:
myproject
├── Pipfile
├── Pipfile.lock
├── bin
│ ├── bar.py
│ ├── foo.py
│ └── src -> ../src
└── src
├── baz.py
└── qux.py
Это работает, и я полагаю, что имеет преимущество быть прозрачным, но кажется, что должен быть какой-то способ использовать pipenv
для решения одной и той же проблемы.
Есть ли переносимый, распространяемый способ поместить эти модули в путь поиска?