Variável de ambiente PYTHONPATH

19

Eu tenho isso no meu ~/.profile:

export PYTHONPATH=/home/dev/python-files

No python-filesdiretório, tenho alguns projetos clonados no git-hub (flask, curveship e py-vgdl).

Sempre que tento iniciar um dos exemplos nesses projetos, recebo erros semelhantes ao seguinte:

$ python ~/python-files/py-vgdl/examples/gridphysics/frogs.py 
Traceback (most recent call last):
    File "/home/dev/python-files/py-vgdl/examples/gridphysics/frogs.py", line 67, in <module>
        from vgdl.core import VGDLParser
ImportError: No module named vgdl.core

Parece-me que não devo receber esse erro porque tenho essa PYTHONPATHvariável ambiental configurada?

Executando o interpretador interativo python:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'
Jerome
fonte

Respostas:

35

Tente anexar ao PYTHONPATH em vez de substituí-lo completamente.

export PYTHONPATH=$PYTHONPATH:/home/dev/python-files

Referências:

De acordo com a documentação do Python sobre PYTHONPATH

Aumente o caminho de pesquisa padrão para arquivos de módulo. [...]

O caminho de pesquisa padrão depende da instalação, mas geralmente começa com prefix/lib/pythonversion(veja PYTHONHOMEacima). É sempre anexado a PYTHONPATH.

significando que alguns valores existem PYTHONPATHe o caminho de pesquisa padrão também é anexado apenas.

Além disso, esta postagem no blog ( link Archive.org ) também explica claramente por que você precisa anexá-lo PYTHONPATHe não substituí-lo. Rolar para baixo até a seção - Casos especiais e examinar o caminho de pesquisa explicam claramente (infelizmente, não existe um URL relativo a esse link, portanto você terá que rolar). Embora o usuário dê os exemplos em um mac, eles são muito relevantes para qualquer plataforma

Nitin Venkatesh
fonte
1
@Garrett Thanks :) Atualizado com o link Archive.org.
Nitin Venkatesh
+1 para o link archive / stereoplex. Ele responde a tantas perguntas que deveria estar na primeira página dos documentos oficiais do Python!
Malik A. Rumi
5

Você também pode fazer o seguinte:

export PYTHONPATH=$(pwd) **or** export PYTHONPATH=${PWD}

pwd é o atual diretório de trabalho.

Mrudhvika Damaraju
fonte
Cuidado, isso substituirá seu PYTHONPATH no processo! Se você deseja adicionar o pwd ao seu PYTHONPATH:export PYTHONPATH=$PYTHONPATH:$(pwd)
jackw11111
4

PYTHONPATHdeve apontar para onde estão seus pacotes e módulos Python, não para onde estão seus checkout. Em outras palavras, se você fizer um, ls "$PYTHONPATH"deverá ver*.py arquivos ( módulos Python ) e diretórios contendo __init__.pyarquivos ( pacotes Python ).

Então, se você quiser import vgdl, você PYTHONPATHdeve ficar assim:

PYTHONPATH=/home/dev/python-files/py-vgdl

porque o vgdl pacote está dentro py-vgdl, não dentro python-files.

Para adicionar outros caminhos também, você pode usá :-los para separá-los:

PYTHONPATH="/home/dev/python-files/py-vgdl:/home/dev/python-files/something:$PYTHONPATH"

Isso realmente funcionará, no entanto, para tais casos, usando PYTHONPATH pode ser muito complexo. O que eu recomendo é usar virtualenv, feito de propósito para simplificar situações como a sua. O que você precisa fazer é basicamente:

  1. Crie um ambiente: virtualenv env
  2. 'Ative': source env/bin/activate
  3. Instale seus pacotes: isso pode ser feito usando pipou osetup.py script dos seus pacotes.
  4. Apreciar.

Não estou fornecendo muita informação porque o virtualenv está bem documentado e, se você precisar de ajuda com alguma coisa, é melhor abrir uma nova pergunta.

Andrea Corbellini
fonte