Pergunta

Como faço para descobrir quais diretórios estão listados na variável PYTHONPATH do meu sistema, a partir de um script Python (ou o shell interativo)?

Foi útil?

Solução

sys.path podem incluir itens que não são especificamente na variável de ambiente PYTHONPATH. Para consultar a variável diretamente, use:

import os
try:
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
    user_paths = []

Outras dicas

Você provavelmente também querem isso:

import sys
print(sys.path)

Ou como um forro do terminal:

python -c "import sys; print('\n'.join(sys.path))"

Parece que não consegue editar a outra resposta. Tem um pequeno erro na medida em que é somente para Windows. A solução mais genérica é usar os.sep como abaixo:

sys.path podem incluir itens que não são especificamente na variável de ambiente PYTHONPATH. Para consultar a variável diretamente, use:

import os
os.environ['PYTHONPATH'].split(os.pathsep)

PYTHONPATH é uma variável de ambiente cujo valor é uma lista de diretórios. Uma vez definido, ele é usado pelo Python para procurar módulos importados, juntamente com outras DST. e diretórios de bibliotecas 3rd-party listados em "sys.path" do Python.

Como quaisquer outras variáveis ??de ambiente, você pode exportá-lo com casca ou em ~ / .bashrc, consulte aqui . Você pode consultar os.environ [ 'PYTHONPATH'] para o seu valor em Python como mostrado abaixo:

$ python3 -c "import os, sys; print(os.environ['PYTHONPATH']); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"

Se definido no shell como

$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite

THEN resultar =>

/home/Documents/DjangoTutorial/mysite
['', '/home/Documents/DjangoTutorial/mysite', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

ELSE resultado =>

PYTHONPATH is not defined

Para definir PYTHONPATH para vários caminhos, consulte aqui .

Note que se pode adicionar ou excluir um caminho de pesquisa via sys.path.insert (), del ou remove () em tempo de execução, mas não através os.environ []. Exemplo:

>>> os.environ['PYTHONPATH']="$HOME/Documents/DjangoTutorial/mysite"
>>> 'PYTHONPATH' in sorted(os.environ)
True
>>> sys.path // but Not there
['', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

>>> sys.path.insert(0,os.environ['PYTHONPATH'])
>>> sys.path // It's there
['$HOME/Documents/DjangoTutorial/mysite', '', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']
>>> 

Em resumo, PYTHONPATH é uma maneira de especificar o caminho de pesquisa Python (s) para os módulos importados em sys.path. Você também pode aplicar operações de lista diretamente para sys.path sem o auxílio de PYTHONPATH.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top