Sempre que eu uso sys.path.append
, o novo diretório será adicionado. No entanto, quando eu fechar o python, a lista voltará aos valores anteriores (padrão?). Como adiciono permanentemente um diretório PYTHONPATH
?
Sempre que eu uso sys.path.append
, o novo diretório será adicionado. No entanto, quando eu fechar o python, a lista voltará aos valores anteriores (padrão?). Como adiciono permanentemente um diretório PYTHONPATH
?
Respostas:
Você precisa adicionar seu novo diretório à variável de ambiente PYTHONPATH
, separada por dois pontos do conteúdo anterior. Em qualquer forma de Unix, você pode fazer isso em um script de inicialização apropriado para qualquer shell que esteja usando (.profile
ou o que for, dependendo do seu shell favorito) com um comando que, novamente, depende do shell em questão; no Windows, você pode fazer isso através da GUI do sistema para esse fim.
superuser.com
pode ser um lugar melhor para perguntar mais, ou seja, para obter mais detalhes, se você precisar de detalhes sobre como enriquecer uma variável de ambiente na plataforma e no shell escolhidos, já que não é realmente uma questão de programação em si.
Se você estiver usando o bash (em uma distribuição Mac ou GNU / Linux), adicione-o ao seu ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
~/.bashrc
, em seguida, executar source ~/.bashrc
ver stackoverflow.com/questions/2518127/...
Em vez de manipular, PYTHONPATH
você também pode criar um arquivo de configuração de caminho . Primeiro descubra em qual diretório o Python procura essas informações:
python -m site --user-site
Por alguma razão, isso não parece funcionar no Python 2.7. Lá você pode usar:
python -c 'import site; site._script()' --user-site
Em seguida, crie um .pth
arquivo nesse diretório que contém o caminho que você deseja adicionar (crie o diretório se ele não existir).
Por exemplo:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
python -m site --user-site
e(create the directory if it doesn't exist)
peças eram o que estava faltando para fazê-lo funcionar.
somelib.pth
? Caso contrário, alguma sugestão de por que isso pode não estar funcionando?
Isso funciona no Windows
Então você poderá ver todos os módulos dentro desses caminhos a partir dos seus scripts.
Caso alguém ainda esteja confuso - se você estiver em um Mac, faça o seguinte:
open .bash_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
export
chave era a coisa que estava faltando !!!!, votado, muito obrigado!
Você pode adicionar o caminho através do seu arquivo pythonrc, cujo padrão é ~ / .pythonrc no linux. ie
import sys
sys.path.append('/path/to/dir')
Você também pode definir a PYTHONPATH
variável de ambiente, em um arquivo rc global, como ~/.profile
no mac ou linux, ou através do Painel de Controle -> Sistema -> guia Avançado -> Variáveis de Ambiente no Windows.
Para dar um pouco mais de explicação, o Python construirá automaticamente seus caminhos de pesquisa (como mencionado acima e aqui ) usando o site.py
script (normalmente localizado em sys.prefix + lib/python<version>/site-packages
e também lib/site-python
). Pode-se obter o valor de sys.prefix:
python -c 'import sys; print(sys.prefix)'
O script site.py adiciona vários diretórios, dependendo da plataforma, como /usr/{lib,share}/python<version>/dist-packages
, /usr/local/lib/python<version>/dist-packages
ao caminho de pesquisa e também pesquisa esses caminhos por <package>.pth
arquivos de configuração que contêm caminhos de pesquisa adicionais específicos. Por exemplo, easy-install mantém sua coleção de pacotes instalados, que são adicionados a um arquivo específico do sistema, por exemplo, no Ubuntu /usr/local/lib/python2.7/dist-packages/easy-install.pth
. Em um sistema típico, existem vários desses arquivos .pth em torno dos quais podem explicar alguns caminhos inesperados no sys.path:
python -c 'import sys; print(sys.path)'
Assim, é possível criar um arquivo .pth e colocar em qualquer um desses diretórios (incluindo o sitedir, como mencionado acima ). Esta parece ser a maneira como a maioria dos pacotes é adicionada ao sys.path em vez de usar o PYTHONPATH.
Nota: No OSX, há um caminho de pesquisa adicional especial adicionado por site.py para 'framework builds' (mas parece funcionar para o uso normal de python na linha de comando): /Library/Python/<version>/site-packages
(por exemplo, para Python2.7:), /Library/Python/2.7/site-packages/
onde é suposto os pacotes de terceiros para ser instalado (consulte o arquivo LEIA-ME nesse diretório). Assim, pode-se adicionar um arquivo de configuração de caminho contendo caminhos de pesquisa adicionais, por exemplo, criar um arquivo chamado /Library/Python/2.7/site-packages/pip-usr-local.pth
contendo /usr/local/lib/python2.7/site-packages/
e, em seguida, o python do sistema adicionará esse caminho de pesquisa.
Para mim, funcionou quando mudei o .bash_profile
arquivo. Apenas mudando.bashrc
arquivo funcionou apenas até eu reiniciar o shell.
Para python 2.7, ele deve se parecer com:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
no final do .bash_profile
arquivo.
Adicionar export PYTHONPATH="${PYTHONPATH}:/my/other/path"
ao ~ / .bashrc pode não funcionar se PYTHONPATH
não existir no momento (por causa do :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
Adicionar o acima ao meu ~ / .bashrc fez o truque para mim no Ubuntu 16.04
echo PYTHONPATH
e nada apareceu! isso significa que esse PYTHONPATH não foi iniciado, então colo essa linha export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection
no meu ~/.bashrc
arquivo e source ~/.bashrc
nela. Mais tarde, quando eu ecoei $ PYTHONPATH, isso me deu :<PATH_TO_TF>/TensorFlow/models/research/object_detection
: Alguma sugestão sobre se eu fiz algo errado?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection
, Quando você está exportando PYTHONPATH pela primeira vez você tem que fazê-lo sem a ${PYTHONPATH}:
parte
:<PATH_TO_TF>/TensorFlow/models/research/object_detection
e remove o segundo export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim
. alguma sugestão sobre isso, como corrigi-lo?
No MacOS, em vez de dar caminho para uma biblioteca específica. Fornecendo o caminho completo para a pasta do projeto raiz em
~/.bash_profile
fiz o meu dia, por exemplo:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
depois disso faça:
source ~/.bash_profile
A inclusão de um novo caminho para PYTHONPATH está fazendo manualmente:
adicionando o caminho ao seu perfil ~ / .bashrc, no terminal:
vim ~/.bashrc
cole o seguinte no seu perfil
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
então, certifique-se de fornecer seu perfil bashrc sempre que executar seu código no terminal:
source ~/.bashrc
Espero que isto ajude.
Eu adicionei permanentemente no Windows Vista, Python 3.5
Sistema> Painel de controle> Configurações avançadas do sistema> Avançadas (toque em) Variáveis de ambiente> Variáveis do sistema> (se você não vir PYTHONPATH na coluna Variável) (clique em) Novo> Nome da variável: PYTHONPATH> Valor da variável:
Por favor, escreva o diretório no valor Variável. São detalhes da resposta do Blue Peppers.
O script abaixo funciona em todas as plataformas, pois é puro Python. Ele usa o pathlib Path, documentado aqui https://docs.python.org/3/library/pathlib.html , para fazê-lo funcionar em várias plataformas. Você executa uma vez, reinicia o kernel e é isso. Inspirado em https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574 .
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
Esta é uma atualização para este tópico que possui algumas respostas antigas.
Para aqueles que usam o MAC-OS Catalina ou algum mais recente (> = 10.15), foi introduzido um novo terminal chamado zsh
(um substituto para o antigobash
).
Eu tive alguns problemas com as respostas acima devido a essa alteração e, de certa forma, fiz uma solução alternativa ao criar o arquivo ~/.zshrc
e colar o diretório do arquivo no diretório$PATH
e$PYTHONPATH
Então, primeiro eu fiz:
nano ~/.zshrc
Quando o editor foi aberto, colei o seguinte conteúdo:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
salvou e reiniciou o terminal.
IMPORTANTE: O caminho acima é definido como o caminho do meu computador, você precisa adaptá-lo ao seu python.
No Python 3.6.4, você pode persistir o sys.path em sessões de python como esta:
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
Eu sugiro fortemente que você use virtualenv e virtualenvwrapper, caso contrário você irá desorganizar seu caminho