PYTHONPATH no se actualiza

PYTHONPATH no se actualiza

Actualmente suelo pyenvtener pythoninstalada una versión particular. Luego utilizo pipenvpara crear entornos virtuales para mis diversos proyectos en python.

Actualmente tengo una estructura de proyecto similar a:

foo/
  src/app.py
  src/__init__.py
  tests/unit/test_app.py
  tests/unit/__init_.py

Hay un número determinado de pruebas test_app.pyque importan app.pycomo:

import src.app

Tengo dos problemas:

  • A los editores de código les gusta emacs, vimo vscodese quejan de esa importcláusula de las pruebas, marcándola en rojo y siendo "moderadamente" molesta.
  • Desde los editores de texto que invoco pipenv run pytestpara comprobar las pruebas. Falla porque srcno es un módulo que pueda encontrar. Si invoco el mismo comando desde mi terminal en el directorio del proyecto, aparece el mismo error.

Si lo invoco como un pythonmódulo, pipenv run python -m pytestfunciona, ya que agrega el directorio actual a PYTHONPATH. Si inicio los editores desde a, pipenv shelllas pruebas también funcionan. Independientemente de cómo inicie los editores, import src.appse marca como no válido.

Si inicio la configuración del editor, PYTHONPATH=$PYTHONPATH:.las pruebas también funcionan, pero la verificación de sintaxis aún se queja.

¿Cuál es la forma más limpia de manejar esto con editores como emacso vim? No me gustaría pasar pycharma herramientas similares que resuelvan "automáticamente" este problema.

Respuesta1

Según pipenvdocumentación; Se carga cualquier .envarchivo en el directorio pipenvdesde donde se invoca.

Esto significa que (por ejemplo) cuando abre test_app.pymientras emacsusa la pythoncapa, la pipenvdel proyecto se carga (como de costumbre), pero .envtambién se carga automáticamente y las dependencias internas del archivo funcionarán.

Entonces, por ejemplo, crear .envcon este contenido en la raíz del proyecto me funciona:

PYTHONPATH=$PYTHONPATH:.

Ahora, también podrá ejecutar pruebas unitarias directamente emacssin tener problemas con las importaciones.

Esta es la única forma en que pude hacerlo funcionar, pero la solución parece pirateada y poco elegante.

información relacionada