adicionando diretório ao sys.path / PYTHONPATH


130

Estou tentando importar um módulo de um diretório específico.

O problema é que, se eu usar sys.path.append(mod_directory)para acrescentar o caminho e abrir o interpretador python, o diretório mod_directoryserá adicionado ao final da lista sys.path. Se eu exportar a PYTHONPATHvariável antes de abrir o interpretador python, o diretório será adicionado ao início da lista. No último caso, posso importar o módulo, mas no primeiro, não posso.

Alguém pode explicar por que isso está acontecendo e me dar uma solução para adicionar mod_directoryo início, dentro de um script python?


Respostas:


178

Isso está funcionando como documentado. Todos os caminhos especificados em PYTHONPATHsão documentados como normalmente vindo após o diretório de trabalho, mas antes dos caminhos fornecidos pelo interpretador padrão. sys.path.append()anexa ao caminho existente. Veja aqui e aqui . Se você deseja que um diretório específico seja o primeiro, insira-o no início do sys.path:

import sys
sys.path.insert(0,'/path/to/mod_directory')

Dito isto, geralmente existem maneiras melhores de gerenciar importações do que usar PYTHONPATHou manipular sys.pathdiretamente. Veja, por exemplo, as respostas para esta pergunta .


Obrigado pela resposta. O problema era que eu não sabia que esse módulo para adicionar empacotado como um arquivo .egg você tem que incluir o nome do arquivo em vez de apenas o diretório em Python 2.6
UnadulteratedImagination

2
Ei cara, isso quebrou meu django. Tem certeza de que deseja dizer às pessoas para colocá-lo no topo?!? !!?
R Claven

16
@RClaven, desculpe, é difícil dizer a quais ações e resultados você está se referindo: "coloque no topo" e "quebrou meu django" não são muito precisos. Você pode elaborar?
Ned Deily

Para saber mais sobre como funciona o sys.path, consulte esta resposta stackoverflow.com/a/38403654/850326
djhaskin987

2
Você realmente deve usar "1" em vez de "0"! Caso contrário, você interrompe o sys.path . Consulte também stackoverflow.com/q/10095037/125507 .
22418 Kadee


6

Quanto a mim, eu preciso caffe para o meu caminho python. Eu posso adicionar o caminho para o arquivo /home/xy/.bashrcadicionando

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH.

para o meu /home/xy/.bashrc arquivo.

Mas quando eu uso pycharm, o caminho ainda não está.

Para que eu possa adicionar o caminho à PYTHONPATHvariável, execute -> editar Configuração.

insira a descrição da imagem aqui


O mais simples é a melhor resposta, adicione este para o desenvolvimento vai fazer o trabalho autocomplete
Gang

Atualizei o .bashrc conforme explicado acima, mas não refleti no bloco de anotações jupyter. O notebook Jupyter ainda diz que o módulo não foi encontrado.
Athar

3

A alteração temporária de diretórios funciona bem para a importação:

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

Ao executar um script Python do Powershell no Windows, isso deve funcionar:

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

# Now run the actual script
python your_script.py
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.