Python é instalado em um diretório local.
Minha árvore de diretórios fica assim:
(local directory)/site-packages/toolkit/interface.py
Meu código está aqui:
(local directory)/site-packages/toolkit/examples/mountain.py
Para executar o exemplo, escrevo python mountain.py
e no código que tenho:
from toolkit.interface import interface
E eu recebo o erro:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
Eu já verifiquei sys.path
e lá tenho o diretório /site-packages
. Além disso, tenho o arquivo __init__.py.bin
na pasta do kit de ferramentas para indicar ao Python que este é um pacote. Eu também tenho um __init__.py.bin
no diretório de exemplos.
Eu não sei por que Python não consegue encontrar o arquivo quando ele está em sys.path
. Alguma ideia? Pode ser um problema de permissões? Preciso de alguma permissão de execução?
python
importerror
python-import
Eduardo
fonte
fonte
755
. Isso ocorreu porqueumask
a máquina era0027
devido à qualothers
não haviaread
permissão, fazendo com que o módulo não fosse lido. A adição deread
permissão corrigiu meu problema. Vale a pena verificar a permissão do diretório de destino pós-instalação.interface
(tenha sido um conflito).Respostas:
Com base nos seus comentários no post do orip, acho que foi o que aconteceu:
__init__.py
no Windows.__init__.py
(agora chamada__init__.py.bin
) significa que o python não entende o kit de ferramentas como um pacote.__init__.py
no diretório apropriado e tudo funciona ...?fonte
.bin
.python driver.py
quando deveria estar usandopython3 driver.py
desde a instalaçãopip3
.Faz
tem um
__init__.py
?Para fazer a importação percorrer seus diretórios, todo diretório deve ter um
__init__.py
arquivo.fonte
Encontrei algo muito semelhante quando fiz este exercício no LPTHW; Eu nunca consegui o Python reconhecer que eu tinha arquivos no diretório de onde estava ligando. Mas consegui fazê-lo funcionar no final. O que fiz e o que recomendo é tentar o seguinte:
(NOTA: Desde o seu post inicial, suponho que você esteja usando uma máquina baseada em * NIX e executando coisas na linha de comando, portanto, este conselho é adaptado a isso. Desde que eu executo o Ubuntu, foi o que fiz)
1) Altere o diretório (cd) para o diretório acima do diretório onde estão seus arquivos. Nesse caso, você está tentando executar o
mountain.py
arquivo e chamando otoolkit.interface.py
módulo, que está em diretórios separados. Nesse caso, você iria para o diretório que contém caminhos para esses dois arquivos (ou seja, o diretório mais próximo que os caminhos desses arquivos compartilham). Qual, neste caso, é otoolkit
diretório2) Quando você estiver no
tookit
diretório, digite esta linha de código na sua linha de comandos:export PYTHONPATH=.
Isso define o seu PYTHONPATH como ".", O que basicamente significa que o seu PYTHONPATH agora procurará os arquivos chamados no diretório em que você está atualmente (e, mais precisamente, nas ramificações do subdiretório em que você está. Portanto, ele não olha apenas no diretório atual, mas em todos os diretórios que estão no diretório atual).
3) Depois de definir seu PYTHONPATH na etapa acima, execute seu módulo no diretório atual (o
toolkit
diretório). O Python agora deve encontrar e carregar os módulos que você especificou.Espero que isto ajude. Eu fiquei bastante frustrado com isso.
fonte
set PYTHONPATH=.
.No * nix, verifique também se PYTHONPATH está configurado corretamente, especialmente se ele possui este formato:
(Observe o
.:
princípio, para que ele também possa pesquisar no diretório atual.)Também pode estar em outros locais, dependendo da versão:
fonte
.:/usr/lib/python
,.:/usr/lib/python2.6
,.:/usr/lib/python2.7
e etc., dependendo da versão#!/usr/bin/python
no final de um arquivo também deve funcionar, certo?Resolvi meu próprio problema e escreverei um resumo das coisas erradas e da solução:
O arquivo precisa ser chamado exatamente
__init__.py
. Se a extensão for diferente, como no meu caso.py.bin
, o Python não poderá se mover pelos diretórios e não poderá encontrar os módulos. Para editar os arquivos, você precisa usar um editor Linux, como vi ou nano . Se você usar um editor do Windows, isso gravará alguns caracteres ocultos.Outro problema que estava afetando era que eu tinha outra versão do Python instalada pela raiz; portanto, se alguém estiver trabalhando com uma instalação local do python, verifique se a instalação do Python que está executando os programas é o Python local. Para verificar isso, basta fazer
which python
e ver se o executável é o que está no seu diretório local. Caso contrário, altere o caminho, mas verifique se o diretório local do Python é anterior ao outro Python.fonte
__init__.py
arquivos colocados no diretório relevante, mas instalei manualmente um pacote usandosetup.py
. Como a instalação de um novo pacote interferiu nas importações.uma solução fácil é instalar o módulo usando, em
python -m pip install <library-name>
vez depip install <library-name>
você, usar o sudo em caso de restrições de administradorfonte
python -m
alcançar na frentepip install
?python -m pip...
funcionou errado , maspip...
não o fez: elas são efetivamente a mesma coisa, supondo que estejam realmente no mesmopython
diretório. Possivelmente, a situação observada foi que opip
programa autônomo não estava disponível em algumas versões mais antigas do python (mas agora está nas versões 2.7 e 3.x). Nesse caso, opython
estava em um virtualenv local epip
não estava, porpython -m pip install
isso instalaria no virtualenv local, enquantopip
tentaria instalar no python do sistema (e falharia sem o sudo). De qualquer forma, não faz sentido.Para marcar um diretório como um pacote, você precisa de um arquivo chamado
__init__.py
, isso ajuda?fonte
Usando
PyCharm
(parte do conjunto JetBrains), você precisa definir seu diretório de scripts como Origem:Right Click > Mark Directory as > Sources Root
fonte
Você está lendo esta resposta e diz que
__init__.py
está no lugar certo, instalou todas as dependências e ainda está recebendo oImportError
.Eu estava enfrentando um problema semelhante, exceto que meu programa funcionava bem quando executado com PyCharm, mas o erro acima quando eu o executava a partir do terminal. Depois de pesquisar mais, descobri que
PYTHONPATH
não havia a entrada para o diretório do projeto. Então, eu definoPYTHONPATH
por instrução Import funciona no PyCharm, mas não no terminal :Há outra maneira de fazer isso usando
sys.path
como:Você pode usar inserir / acrescentar com base na ordem em que deseja que seu projeto seja pesquisado.
fonte
Para mim, foi algo realmente estúpido. Eu instalei a biblioteca usando,
pip3 install
mas estava executando o meu programapython program.py
em oposição apython3 program.py
.fonte
Sim. Você precisa do diretório para conter o
__init__.py
arquivo, que é o arquivo que inicializa o pacote. Aqui, dê uma olhada nisso .fonte
por exemplo: / etc / environment
PYTHONPATH = $ PYTHONPATH: / opt / folder1: / opt / folder2
/ opt / folder1 / foo
/ opt / folder2 / foo
E, se você estiver tentando importar um arquivo foo, o python não saberá qual você deseja.
from foo import ... >>> importadorror: nenhum módulo chamado foo
fonte
Meus dois centavos:
Cuspir:
Isso me deixou confuso - passou por posts e posts sugerindo feios hacks de syspath (como você vê
__init__.py
, todos os meus estavam lá). Acontece que game / oblivion.py e game / oblivion estavam confundindo python, o que cuspiu o inútil "Nenhum módulo chamado RecordGroups". Eu estaria interessado em uma solução alternativa e / ou links que documentem esse comportamento (mesmo nome) -> EDIT (2017.01.24) - veja E se eu tiver um módulo e um pacote com o mesmo nome? Curiosamente, normalmente os pacotes têm precedência, mas aparentemente nosso lançador viola isso.EDIT (2015.01.17): não mencionei que usamos um iniciador personalizado dissecado aqui .
fonte
game.oblivion.RecordGroups !== game/oblivion/patchers/RecordGroups.py
Pode querer corrigir isso com anexando seu código python para uso:game.oblivion.patchers.RecordGroups
game.oblivion.__init__.py
mas talvez seja necessário verificar issoLinux: Os módulos importados estão localizados em /usr/local/lib/python2.7/dist-packages
Se você estiver usando um módulo compilado em C, não se esqueça de chmod o arquivo .so depois
sudo setup.py install
.fonte
No meu caso, o problema era que eu estava vinculando ao debug
python
&boost::Python
, o que exige que a extensão sejaFooLib_d.pyd
, não apenasFooLib.pyd
; renomear o arquivo ou atualizarCMakeLists.txt
propriedades corrigiu o erro.fonte
Se você tentou todos os métodos fornecidos acima, mas falhou, talvez o seu módulo tenha o mesmo nome que um módulo interno. Ou, um módulo com o mesmo nome existente em uma pasta com alta prioridade
sys.path
que a do seu módulo.Para depurar, diga suas
from foo.bar import baz
reclamaçõesImportError: No module named bar
. Mudando paraimport foo; print foo
, que mostrará o caminho defoo
. É o que você espera?Caso contrário, renomeie
foo
ou use importações absolutas .fonte
ImportError: No module named foo
.Meu problema foi que eu adicionei o diretório com o
__init__.py
arquivo ao PYTHONPATH, quando na verdade eu precisava adicionar o diretório pai.fonte
Para todos aqueles que ainda têm esse problema. Acredito que Pycharm se confunde com as importações. Para mim, quando escrevo 'from namespace import something', a linha anterior fica sublinhada em vermelho, sinalizando que há um erro, mas funciona. No entanto, '' de .namespace import something '' não é sublinhado, mas também não funciona.
Tentar
fonte
Corrigido meu problema escrevendo
print (sys.path)
e descobrindo que o python estava usando pacotes desatualizados, apesar de uma instalação limpa. A exclusão desses python criados automaticamente usa os pacotes corretos.fonte
No meu caso, porque estou usando PyCharm e PyCharm, crie um 'venv' para cada projeto na pasta do projeto, mas é apenas um mini env de python. Embora você tenha instalado as bibliotecas necessárias no Python, mas no seu projeto personalizado 'venv', ele não está disponível. Esse é o verdadeiro motivo de 'ImportError: nenhum módulo chamado xxxxxx' ocorreu no PyCharm. Para resolver esse problema, você deve adicionar bibliotecas ao ambiente personalizado do projeto seguindo estas etapas:
Aproveitar.
fonte
Depois de sofrer o mesmo problema, achei que minha resolução era excluir todos os
pyc
arquivos do meu projeto, parece que esses arquivos em cache estavam causando esse erro.A maneira mais fácil de encontrar isso foi navegar para a pasta do meu projeto no Windows Explorer e procurar
*.pyc
, selecionando todos ( Ctrl+ A) e excluindo-os ( Ctrl+ X).É possível que eu possa ter resolvido meus problemas apenas excluindo o
pyc
arquivo específico, mas nunca tentei issofonte
Eu enfrentei o mesmo problema:
Import error
. Além disso, a biblioteca foi instalada 100% corretamente. A fonte do problema foi que no meu PC 3 a versão do python (pacote anaconda) foi instalada). É por isso que a biblioteca foi instalada não no lugar certo. Depois disso, mudei para a versão adequada do python no meu PyCharm IDE.fonte
Eu tive o mesmo erro. Foi causado por alguém criando uma pasta na mesma pasta do meu script, cujo nome conflitava com um módulo que eu estava importando de outro lugar. Em vez de importar o módulo externo, ele olhou dentro desta pasta que obviamente não continha os módulos esperados.
fonte
Eu tive o mesmo problema (Python 2.7 Linux), encontrei a solução e gostaria de compartilhá-la. No meu caso, eu tinha a estrutura abaixo:
Em 'main.py', tentei sem êxito todas as combinações abaixo:
A solução era muito mais simples do que eu pensava. Renomeei a pasta "Livreto" para "livreto" e é isso. Agora, o Python pode importar a classe Question normalmente usando em 'main.py' o código:
A partir disso, posso concluir que nomes de pacotes (pastas) como 'livreto' devem começar com letras minúsculas; caso contrário, o Python o confunde com nomes de classes e nomes de arquivos.
Aparentemente, esse não foi o seu problema, mas a resposta de John Fouhy é muito boa e esse tópico tem quase tudo o que pode causar esse problema. Então, isso é mais uma coisa e espero que talvez isso possa ajudar outras pessoas.
fonte
No meu caso, eu estava incluindo o caminho para a pasta package.egg em vez do pacote real abaixo. Copiei o pacote para o nível superior e funcionou.
fonte
Isso funcionou para mim:
__init__.py
arquivo criado dentro da pasta pai (no seu caso, dentro dasite-packages
pasta). E importado assim:Espero que seja útil para você também!
fonte
No servidor linux, tente
dos2unix script_name
(remova todos (se houver)
pyc
arquivos com o comandofind . -name '*.pyc' -delete
)e execute novamente no caso, se você trabalhou no script no Windows
fonte
No meu caso, eu estava usando
sys.path.insert()
para importar um módulo local e estava obtendomodule not found
de uma biblioteca diferente. Eu tive que colocarsys.path.insert()
abaixo as importações que relatarammodule not found
. Eu acho que a melhor prática é colocarsys.path.insert()
na parte inferior de suas importações.fonte