Personalizar o caminho de pesquisa do módulo (PYTHONPATH) via pipenv
Eu tenho um projeto Python que consiste em um notebook Jupyter, vários scripts em umbin
diretório e módulos em umsrc
diretório, com dependências em umPipfile
:
myproject
├── myproject.ipynb
├── Pipfile
├── Pipfile.lock
├── bin
│ ├── bar.py
│ └── foo.py
└── src
├── baz.py
└── qux.py
Os scriptsfoo.py
ebar.py
use o shebang padrão
#!/usr/bin/env python
e pode ser executado compipenv shell
:
mymachine:myproject myname$ pipenv shell
(myproject-U308romt) bash-3.2$ bin/foo.py
foo
No entanto, não consigo acessar facilmente os módulos nosrc
dos scripts. Se eu adicionar
import src.baz as baz
parafoo.py
, Eu recebo:
ModuleNotFoundError: No module named 'src'
Uma solução que tentei é adicionar um.env
arquivo emmyproject
:
PYTHONPATH=${PYTHONPATH}:${PWD}
Isso funciona graças apipenv
écarregamento automático de.env
, mas verificando o.env
arquivo na distribuição git do projeto colidiria com o uso tradicional de.env
armazenar segredos como senhas - na verdade, meu padrão.gitignore
para projetos Python já exclui.env
por esse motivo.
$ git add .env
The following paths are ignored by one of your .gitignore files:
.env
Use -f if you really want to add them.
Como alternativa, eu poderia me mudarsrc
sobbin
, mas o notebook Jupyter precisaria fazer referência aos módulos comobin.src.baz
etc., o que também é um aborrecimento.
Minha solução atual é apenas adicionar um link simbólico:
myproject
├── Pipfile
├── Pipfile.lock
├── bin
│ ├── bar.py
│ ├── foo.py
│ └── src -> ../src
└── src
├── baz.py
└── qux.py
Isso funciona, e suponho que tenha o benefício de ser transparente, mas parece que deve haver alguma maneira de alavancarpipenv
para resolver o mesmo problema.
Existe uma maneira portátil e distribuível de colocar esses módulos no caminho de pesquisa?