Estou tentando executar um script que lança, entre outras coisas, um script python. Eu recebo um ImportError: nenhum módulo chamado ..., no entanto, se eu iniciar o ipython e importar o mesmo módulo da mesma maneira através do interpretador, o módulo será aceito.
O que está acontecendo e como posso corrigi-lo? Eu tentei entender como python usa PYTHONPATH, mas estou completamente confuso. Qualquer ajuda seria muito apreciada.
python
ipython
jupyter-notebook
importerror
CodeOcelot
fonte
fonte
-v
opção e você verá onde o python está (ou não) encontrando os módulos importados.Respostas:
Esse problema ocorre devido às maneiras pelas quais o interpretador IPython da linha de comando usa seu caminho atual versus a maneira como um processo separado (seja um notebook IPython, um processo externo, etc.). O IPython procurará módulos a serem importados, encontrados não apenas no sys.path, mas também no diretório de trabalho atual. Ao iniciar um intérprete a partir da linha de comando, o diretório atual em que você está operando é o mesmo em que o ipython foi iniciado. Se você executar
você verá que isso é verdade.
No entanto, digamos que você esteja usando um notebook ipython, execute
os.getcwd()
e seu diretório de trabalho atual seja a pasta na qual você instruiu o notebook a operar no seu arquivo ipython_notebook_config.py (normalmente usando ac.NotebookManager.notebook_dir
configuração).A solução é fornecer ao interpretador python o caminho para o seu módulo. A solução mais simples é anexar esse caminho à sua lista sys.path. No seu notebook, tente primeiro:
Se isso não funcionar, você tem um problema diferente em suas mãos, não relacionado ao caminho para a importação, e deve fornecer mais informações sobre o seu problema.
A maneira melhor (e mais permanente) de resolver isso é definir o seu PYTHONPATH , que fornece ao intérprete diretórios adicionais para procurar pacotes / módulos python. A edição ou configuração do PYTHONPATH como uma var global depende do sistema operacional e é discutida em detalhes aqui para Unix ou Windows .
fonte
__init_.py
, certo? ... e não vai querer modificarPYTHONPATH
nem ligarsys.path.append
, mesmo que eles também estejam corretos (correto?). Quero dizer, eu tenho dezenas de diretórios com código neles, e não vou adicioná-los todos ao caminho - ou esperar outros usuários em seu arquivo de configuração jupyter, mesmo que seja um diretório.Basta criar um arquivo python vazio com o nome
__init__.py
na pasta que mostra erro, enquanto você executa o projeto python.fonte
foo.ipynb
usandobar/baz.py
, adicione umbar/__init__.py
arquivo vazio para que o notebook possa ser usadofrom bar.baz import MyClass
Verifique se eles estão usando o mesmo intérprete. Isso aconteceu comigo no Ubuntu:
E
sys.path
foi diferente entre os dois intérpretes. Para corrigi-lo, removi o Python 3.3.fonte
pip install --upgrade ipython
para obter a versão mais recente e, em seguida, ele usava o 2.7.11 automaticamente por padrão.import sys; sys.version
O principal motivo é que os sys.paths do Python e do IPython são diferentes.
Por favor, consulte o link lucypark , a solução funciona no meu caso. Isso acontece quando instala o opencv por
conda install opencv
E ocorreu um erro de importação no iPython. Existem três etapas para resolver esse problema:
1. Verifique o caminho no Python e no iPython com o seguinte comando
Você encontrará resultados diferentes do Python e Jupyter. Segundo passo, use apenas
sys.path.append
para corrigir o caminho perdido por tentativa e erro.2. Solução temporária
No iPython:
o
ImportError:..
problema resolvido3. Solução permanente
Crie um perfil iPython e defina o acréscimo inicial:
No shell bash:
No vi, acrescente ao arquivo:
FEITO
fonte
A ação
sys.path.append('my-path-to-module-folder')
funcionará, mas para evitar ter que fazer isso no IPython toda vez que você quiser usar o módulo, você pode adicionarexport PYTHONPATH="my-path-to-module-folder:$PYTHONPATH"
ao seu~/.bash_profile
arquivo.fonte
Antes de instalar o ipython, instalei os módulos através do easy_install; dizer
sudo easy_install mechanize
.Depois de instalar o ipython, tive que executar novamente o easy_install para que o ipython reconhecesse os módulos.
fonte
Tive um problema semelhante, corrigi- lo chamando em
python3
vez depython
, meus módulos estavam em Python3.5.fonte
Se você o estiver executando na linha de comando, às vezes o intérprete python não está ciente do caminho onde procurar por módulos.
Abaixo está a estrutura de diretórios do meu projeto:
Eu estava executando o comando abaixo:
Depois de executar o comando acima, obtive o erro abaixo
lib foi importado em my_test.py
imprimi sys.path e descobri que o caminho do projeto em que estou trabalhando não está disponível na lista sys.path
eu adicionei o código abaixo no início do meu script
my_test.py
.Não tenho certeza se é uma boa maneira de resolvê-lo, mas sim funcionou para mim.
fonte
os.getcwd()
obtém o diretório em que o script foi executado, não o diretório em que o arquivo de script está.Foi assim que eu consertei:
fonte
Eu descobri que a solução para esse problema foi amplamente documentada aqui:
https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/
Basicamente, você deve instalar os pacotes dentro do ambiente Jupyter, emitindo comandos do shell como:
Por favor, verifique o link acima para obter uma resposta completa autorizada.
fonte
Encontrei outra fonte dessa discrepância:
Eu tenho o ipython instalado localmente e geralmente em virtualenvs. Meu problema era que, dentro de um virtualenv recém-criado com ipython, o ipython do sistema foi escolhido, que era uma versão diferente do python e ipython no virtualenv (um 2.7.x vs. 3.5.x), e a hilaridade se seguiu.
Eu acho que a coisa mais inteligente a fazer sempre que instalar algo que terá um binário
yourvirtualenv/bin
é executar imediatamenterehash
ou semelhante para qualquer shell que você esteja usando, para que o python / ipython correto seja captado. (Preciso verificar se existempip
ganchos adequados para pós-instalação ...)fonte
Solução sem script:
fonte
Provavelmente, isso é causado por diferentes versões do python instaladas no seu sistema , por exemplo , python2 ou python3 .
Execute o comando
$ pip --version
e$ pip3 --version
verifique de qual pip é o Python 3x . Por exemplo, você deve ver as informações da versão como abaixo:Em seguida, execute o
example.py
script com o comando abaixofonte
Aconteceu comigo com o diretório
utils
. Eu estava tentando importar este diretório como:utils
já é um pacote em python. Apenas mude o nome do diretório para algo diferente e deve funcionar bem.fonte
Esse tipo de erro ocorre provavelmente devido a conflitos de versão do python. Por exemplo, se seu aplicativo é executado apenas no python 3 e você também possui o python 2, é melhor especificar qual versão usar. Por exemplo, use
ao invés de
fonte
Esta resposta se aplica a esta pergunta se
Modificar temporariamente PYTHONPATH
o caminho abaixo pode ser relativo
fonte
import sys sys.path.append ('/ Usuários / {usuário} /Library/Python/3.7/lib/python/site-packages')
fonte
Remova
pathlib
e reinstale-o. Exclua o pathlib nasitepackages
pasta e reinstale o pacote pathlib usando o comando pip:fonte