PYTHONPATH não está sendo atualizado

PYTHONPATH não está sendo atualizado

Atualmente eu uso pyenvuma versão específica pythoninstalada. Então eu uso pipenvpara criar ambientes virtuais para meus vários projetos em python.

Atualmente tenho uma estrutura de projeto semelhante a:

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

Há um determinado número de testes que test_app.pyimportam app.pycomo:

import src.app

Eu tenho dois problemas:

  • Editores de código gostam emacsou reclamam dessa cláusula dos testes, marcando-a em vermelho e sendo "moderadamente" irritante vim.vscodeimport
  • Dos editores de texto que invoco pipenv run pytestpara verificar os testes. Ele falha porque srcnão é um módulo que possa encontrar. Se eu invocar o mesmo comando do meu terminal no diretório do projeto, recebo o mesmo erro.

Se eu invocá-lo como um pythonmódulo, pipenv run python -m pytestele funciona, pois adiciona o diretório atual ao arquivo PYTHONPATH. Se eu iniciar os editores a partir de, pipenv shellos testes também funcionarão. Independentemente de como eu inicio os editores, eles import src.appestão marcados como inválidos.

Se eu iniciar a configuração do editor, PYTHONPATH=$PYTHONPATH:.os testes também funcionarão, mas a verificação de sintaxe ainda reclamará.

Qual é a maneira mais limpa de lidar com isso com editores como emacsou vim? Eu não gostaria de mudar para pycharmferramentas semelhantes que resolvem esse problema "automaticamente".

Responder1

Conforme pipenvdocumentação; Qualquer .envarquivo no diretório pipenvde onde é invocado é carregado.

Isso significa que (por exemplo) quando você test_app.pyabre emacsenquanto usa a pythoncamada, o arquivo pipenvdo projeto é carregado (como de costume), mas .envtambém é carregado automaticamente e as dependências internas do arquivo funcionarão.

Por exemplo, criar .envcom este conteúdo na raiz do projeto funciona para mim:

PYTHONPATH=$PYTHONPATH:.

Agora você também poderá executar testes unitários diretamente emacssem enfrentar problemas com as importações.

Essa foi a única maneira de fazê-lo funcionar, mas a solução parece hackeada e deselegante.

informação relacionada