variável de ambiente PYTHONPATH

16

Eu tenho isso no meu ~/.profile :

export PYTHONPATH=/home/dev/python-files

No diretório python-files , eu tenho alguns projetos clonados do git-hub (flask, curveship e py-vgdl).

Sempre que eu tento inicializar qualquer um dos exemplos nesses projetos, recebo erros semelhantes aos seguintes:

$ 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 este erro porque tenho essa PYTHONPATH variável de ambiente configurada?

Executando o interpretador interativo do python:

>>> import os
>>> os.environ["PYTHONPATH"]
'/home/dev/python-files'
    
por jerome 03.02.2013 / 16:16

3 respostas

30

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 em PYTHONPATH

Augment the default search path for module files. [...]

The default search path is installation dependent, but generally begins with prefix/lib/pythonversion (see PYTHONHOME above). It is always appended to PYTHONPATH.

, o que significa que alguns valores existem em PYTHONPATH e o caminho de pesquisa padrão também é anexado apenas.

Além disso, esta postagem do blog (Archive.org link ) também explica claramente por que você precisa anexar a PYTHONPATH e não sobrescrevê-lo. Rolando até a seção - Casos especiais e examinando o caminho de busca explica claramente (infelizmente nenhum URL relativo a esse link, então você terá que rolar). Embora o usuário forneça os exemplos em um mac, eles são muito relevantes para qualquer plataforma

    
por Nitin Venkatesh 03.02.2013 / 16:35
3

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

Então, se você quiser ser capaz de import vgdl , seu PYTHONPATH deve ficar assim:

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

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

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

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

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

  1. Crie um ambiente: virtualenv env
  2. 'Ativar': source env/bin/activate
  3. Instale seus pacotes: isso pode ser feito usando pip ou o script setup.py de seus pacotes.
  4. Aprecie.

Não estou dando muita informação porque o virtualenv é bem documentado e, se você precisar de ajuda com algo, você d melhor abrir uma nova pergunta.

    
por Andrea Corbellini 03.02.2013 / 17:43
3

Você também pode fazer o seguinte:

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

pwd é o diretório de trabalho atual.

    
por Mrudhvika Damaraju 14.02.2017 / 08:32