Personalizar la ruta de búsqueda del módulo (PYTHONPATH) a través de pipenv
Tengo un proyecto de Python que consiste en un cuaderno Jupyter, varios scripts en unbin
directorio y módulos en unsrc
directorio, con dependencias en unPipfile
:
myproject
├── myproject.ipynb
├── Pipfile
├── Pipfile.lock
├── bin
│ ├── bar.py
│ └── foo.py
└── src
├── baz.py
└── qux.py
Los guionesfoo.py
ybar.py
usa el shebang estándar
#!/usr/bin/env python
y se puede ejecutar conpipenv shell
:
mymachine:myproject myname$ pipenv shell
(myproject-U308romt) bash-3.2$ bin/foo.py
foo
Sin embargo, no puedo acceder fácilmente a los módulos ensrc
De los guiones. Si agrego
import src.baz as baz
afoo.py
, Yo obtengo:
ModuleNotFoundError: No module named 'src'
Una solución que probé es agregar un.env
archivo bajomyproject
:
PYTHONPATH=${PYTHONPATH}:${PWD}
Esto funciona gracias apipenv
'scarga automática de.env
, pero revisando el.env
archivo en la distribución git del proyecto colisionaría con el uso tradicional de.env
para almacenar secretos como las contraseñas; de hecho, mi valor predeterminado.gitignore
para proyectos de Python ya excluye.env
solo por esta razón.
$ git add .env
The following paths are ignored by one of your .gitignore files:
.env
Use -f if you really want to add them.
Alternativamente, podría movermesrc
debajobin
, pero luego el cuaderno Jupyter tendría que hacer referencia a los módulos comobin.src.baz
etc., que también es una molestia.
Mi solución actual es solo agregar un enlace simbólico:
myproject
├── Pipfile
├── Pipfile.lock
├── bin
│ ├── bar.py
│ ├── foo.py
│ └── src -> ../src
└── src
├── baz.py
└── qux.py
Esto funciona, y supongo que tiene el beneficio de ser transparente, pero parece que debería haber alguna forma de aprovecharpipenv
para resolver el mismo problema
¿Existe una forma portátil y distribuible de colocar estos módulos en la ruta de búsqueda?