Não foi possível importar um módulo que está definitivamente instalado


144

Depois de instalar o mecanize , não consigo importá-lo.

Tentei instalar a partir do pip, easy_install e através python setup.py installdeste repositório: https://github.com/abielr/mechanize . Tudo isso sem sucesso, pois cada vez que entro no meu interativo Python, recebo:

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import mechanize
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mechanize
>>> 

As instalações que eu executei anteriormente relataram que foram concluídas com êxito, portanto, espero que a importação funcione. O que poderia estar causando esse erro?


Você pode nos mostrar o resultado da corrida easy_install? Além disso, confirme o caminho completo easy_install, pipe de python.
Larsks

Tem certeza de que não foi instalado para 2.6 (que é padrão no Ubuntu (pelo menos é no meu debian)?
dav1d

bem, a saída de fácil instalação mostra que é instalado para 2,7: Instalado /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
roy

@larks - adicionou essa informação no post original
roy

Eu apenas tentei isso de todas as formas - setup.py, easy_install, pip - do pypi e do repo, mas não consigo fazê-lo falhar. Você poderia verificar sys.pathse está procurando nos lugares certos, ls -laR /usr/local/lib/python2.7/dist-packages/mech*verificar se há problemas de permissão e procurar imp.find_module("mechanize")distinguir entre os erros não consegue encontrar e não consegue sobreviver na importação?
DSM

Respostas:


100

No meu caso, é problema de permissão. De alguma forma, o pacote foi instalado apenas com permissão root rw, outro usuário não pode fazer o rw!


26
Isso aconteceu comigo, apenas correndo sudo pip install .... Correção simples:sudo chmod -R ugo+rX /lib/python2.7/site-packages/
jozxyqk

3
Eu já me deparei com isso muitas vezes e acho que acabei de descobrir o motivo: umask é passada pelo sudo; portanto, se o seu umask pessoal estiver apertado e você usar o sudo para a instalação, os arquivos e diretórios ficarão muito restritos. Se você simplesmente su primeiro e depois instala a partir de um shell raiz completo, a instalação resultante é utilizável (pelo menos é para mim). Isso foi para pip, mas também pode se aplicar ao apt-get. Se outras pessoas confirmarem essa causa, convém alterar a resposta adequadamente?
Brandyn

Somando-se jozxyqk comentário de: Certifique-se que você tem o diretório certa, fazendo $ show de pip <package_name>
Federico

2
O mesmo para mim. Eu estou trabalhando com Python 3.6 no Mac, por isso sudo chmod 777 /usr/local/lib/python3.6/site-packagesfez o truque
Antonio Serrano

3
sudo 777 é sempre uma péssima idéia
Marx

81

Eu tive o mesmo problema: o script com import coloramaestava jogando e ImportError, mas sudo pip install coloramaestava me dizendo "pacote já instalado".

Minha solução: executar pip sem sudo : pip install colorama. Então o pip concordou que precisava ser instalado, instalado e meu script foi executado.

Meu ambiente é o Ubuntu 14.04 de 32 bits; Acho que vi isso antes e depois de ativar meu virtualenv.

ATUALIZAÇÃO : melhor ainda, use python -m pip install <package>. O benefício disso é que, como você está executando a versão específica do python em que deseja o pacote, o pip instalará inequivocamente o pacote no python "correto". Novamente, não use o sudo nesse caso ... então você obtém o pacote no lugar certo, mas possivelmente com permissões de root (indesejadas).


1
Alternativamente, você pode usar o sinalizador -H do sudo
Graydyn Jovem

21

É o problema do caminho do python.

No meu caso, tenho o python instalado em:

/Library/Frameworks/Python.framework/Versions/2.6/bin/python,

e não há diretório de pacotes de sites no python2.6.

O pacote (SOAPpy) que eu instalei pelo pip está localizado

/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

E o site-package não está no caminho do python, tudo o que fiz foi adicionar pacotes de sites ao PYTHONPATH permanentemente.

  1. Abra o Terminal
  2. Digite open .bash_profile
  3. No arquivo de texto que aparece, adicione esta linha no final:

    exportar PYTHONPATH = $ PYTHONPATH: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/

  4. Salve o arquivo, reinicie o Terminal e pronto

Isso funcionou para mim, fazendo com que Jenkins trabalhasse com selênio python.
edst 15/09/16

Isso funcionou para mim na execução do aipo através do supervisor, quando meu script bash chamou meu script de aipo; o script de aipo não pôde importar os módulos já instalados dentro do meu pip. Muito obrigado.
Shivam Sharma

Nota: outra possibilidade do erro de importação é que você tem várias versões do Python instaladas no seu computador. Por exemplo, um do Python do sistema e um do Miniconda ou Anaconda. Portanto, sempre use o "pip" correspondente correto.
Sanchit em 21/02

8

O mecanismo de importação do Python funciona, realmente, então:

  1. Seu PYTHONPATH está errado,
  2. Sua biblioteca não está instalada onde você pensa que é
  3. Você tem outra biblioteca com o mesmo nome, mascarando esta

1
Não pode ser a opção 3 neste caso; que não geraria um ImportError.
Martijn Pieters

2
talvez 2? Só não sei por que ele seria instalado no lugar errado para esta biblioteca, onde a maioria das outras está bem.
roy

3
Opção 4: Seu PYTHONPATH está certo, sua biblioteca está onde você deseja, você não tem uma biblioteca que mascara isso ... mas porque você a usou sudo pip installfoi instalada com privs raiz e, no momento da importação, algo está bombardeando a falta de acesso de leitura ou gravação.
Dan H

2
Não é bem verdade, @MartijnPieters: se houvesse uma importação do formulário "from <package> import <foo>" e se o pacote obstrutivo não tivesse "foo", você receberá um erro de importação na opção 3.
Dan H:

@ DanH claro, mas essa não é a forma que o OP está usando.
Martijn Pieters

8

Eu tenho batido minha cabeça no meu monitor até que um estagiário jovem me disse que o segredo é "python setup.py install" dentro do diretório do módulo.

Por alguma razão, executar a instalação a partir daí faz funcionar.

Para ficar claro, se o nome do seu módulo for "foo":

[burnc7 (2016-06-21 15:28:49) git]# ls -l
total 1
drwxr-xr-x 7 root root  118 Jun 21 15:22 foo
[burnc7 (2016-06-21 15:28:51) git]# cd foo
[burnc7 (2016-06-21 15:28:53) foo]# ls -l
total 2
drwxr-xr-x 2 root root   93 Jun 21 15:23 foo
-rw-r--r-- 1 root root  416 May 31 12:26 setup.py
[burnc7 (2016-06-21 15:28:54) foo]# python setup.py install
<--snip-->

Se você tentar executar o setup.py a partir de qualquer outro diretório, chamando seu caminho, você terminará com uma instalação com bork.

NÃO FUNCIONA:

python /root/foo/setup.py install

FUNCIONA:

cd /root/foo
python setup.py install

7

Consegui corrigir esse problema com uma abordagem combinada. Primeiro, segui o conselho de Chris, abri uma linha de comando e digitei 'pip show packagename'. Isso fornecia a localização do pacote instalado.

Em seguida, abri o python e digitei 'import sys' e, em seguida, 'sys.path' para mostrar onde o python pesquisa os pacotes importados. Infelizmente, o local mostrado na primeira etapa NÃO estava na lista.

Etapa final, digitei 'sys.path.append (' package_location_seen_in_step_1 '). Opcionalmente, você pode repetir a etapa dois para ver a localização agora na lista.

Etapa do teste, tente importar o pacote novamente ... funciona.

A desvantagem? É temporário e você precisa adicioná-lo à lista sempre.


5

Eu encontrei isso ao tentar usar o chaveiro que eu instalei via sudo pip install keyring. Como mencionado nas outras respostas, é um problema de permissões no meu caso.

O que funcionou para mim:

  1. Porta-chaves não instalado:
    • sudo pip uninstall keyring
  2. Usei a -Hopção do sudo e reinstalei o chaveiro:
    • sudo -H pip install keyring

Espero que isto ajude.



2

Não consegui que meu PYTHONPATH funcionasse corretamente. Percebi que a adição exportcorrigiu o problema:

(funcionou)

export PYTHONPATH=$PYTHONPATH:~/test/site-packages

vs.

(não funcionou)

PYTHONPATH=$PYTHONPATH:~/test/site-packages

2

No meu caso, eu corri pip install Django==1.11e não importaria do pythonintérprete.

Navegando pelos comandos do pip, achei o pip showseguinte:

> pip show Django
Name: Django
Version: 1.11
...
Location: /usr/lib/python3.4/site-packages
...

Observe que o local diz '3,4'. Eu descobri que o pythoncomando-estava vinculado apython2.7

/usr/bin> ls -l python
lrwxrwxrwx 1 root root 9 Mar 14 15:48 python -> python2.7

Ao lado disso, encontrei um link chamado, python3então usei isso. Você também pode alterar o link para python3.4. Isso também resolveria.


1

No meu caso, havia um problema com um arquivo init .py ausente no módulo, que eu queria importar em um ambiente Python 2.7.

O Python 3.3+ possui pacotes de espaço para nome implícito que permitem criar pacotes sem um arquivo .py de init .


1

Se as outras respostas mencionadas não funcionarem, tente excluir o cache do pip e reinstalar o pacote. Minha máquina roda o Ubuntu14.04 e estava localizada em ~/.cache/pip. A exclusão desta pasta fez o truque para mim.


1

Além disso, certifique-se que você não confunda pip3com pip. O que descobri foi que o pacote instalado pipnão estava funcionando python3e vice-versa.


0

Quando você instala via easy_installou pip, ele está sendo concluído com êxito? Qual é a saída completa? Qual instalação python você está usando? Pode ser necessário usar sudoantes do comando de instalação, se você estiver instalando módulos em um diretório do sistema (se estiver usando a instalação do sistema python, talvez). Não há muitas informações úteis na sua pergunta, mas algumas ferramentas que provavelmente ajudarão incluem:

  • echo $PYTHONPATHe / ou echo $PATH: ao importar módulos, o Python pesquisa uma dessas variáveis ​​de ambiente (listas de diretórios, :delimitadas) pelo módulo que você deseja. Os problemas de importação geralmente ocorrem devido à ausência do diretório correto nessas listas

  • which python,, which pipou which easy_install: eles informarão a localização de cada executável. Pode ajudar a saber.

  • Use virtualenv , como @JesseBriggs sugere. Ele funciona muito bem pippara ajudá-lo a isolar e gerenciar os módulos e o ambiente de projetos Python separados.


0

Eu tive esse problema exato, mas nenhuma das respostas acima funcionou. Isso me deixou louco até que notei que o sys.path era diferente depois que eu havia importado do projeto pai. Aconteceu que eu havia usado o importlib para escrever uma pequena função para importar um arquivo que não estava na hierarquia do projeto. Má ideia: esqueci que tinha feito isso. Pior ainda, o processo de importação foi afetado pelo sys.path - e o deixou assim. Muito má ideia.

A solução foi parar com isso e simplesmente colocar o arquivo que eu precisava importar no projeto. Outra abordagem seria colocar o arquivo em seu próprio projeto, pois ele precisa ser reconstruído de tempos em tempos, e a reconstrução pode ou não coincidir com a reconstrução do projeto principal.


0

Eu tive esse problema com o 2.7 e 3.5 instalado no meu sistema tentando testar um bot de telegrama com o Python-Telegram-Bot .

Não consegui fazê-lo funcionar após a instalação com o pip e o pip3, com o sudo ou sem. Eu sempre consegui:

Traceback (most recent call last):
  File "telegram.py", line 2, in <module>
    from telegram.ext import Updater
  File "$USER/telegram.py", line 2, in <module>
    from telegram.ext import Updater
ImportError: No module named 'telegram.ext'; 'telegram' is not a package

A leitura correta da mensagem de erro informa que o python está procurando no diretório atual por um telegram.py. E, certo, eu tinha um script lá chamado telegram.py e isso foi carregado pelo python quando liguei import.

Conclusão, verifique se você não possui nenhum package.pyno seu diretório de trabalho atual ao tentar importar. (E leia a mensagem de erro completamente).


0

Eu tive um problema semelhante (no Windows) e a causa raiz no meu caso foi software ANTIVIRUS ! Possui o recurso "Auto-contenção", que envolve o processo em execução com algum tipo de máquina virtual. Os sintomas são: pip install somemodulefunciona bem em uma janela de linha cmd e import somemodulefalha quando executado a partir de outro processo com o erro

ModuleNotFoundError: No module named 'somemodule'

Espero que poupe algum tempo a alguém :)


0

Talvez um pouco fora de tópico, mas eu tinha problemas para import PyYAML. Salienta que você precisa import yaml. (acho que é um rtfm clássico ...)


0

Eu tive um problema semelhante ao usar o Django. No meu caso, eu poderia importar o módulo do shell do Django, mas não de um .py que importou o módulo.
O problema era que eu estava executando o servidor Django (portanto, executando o .py) de um virtualenv diferente da qual o módulo havia sido instalado.

Em vez disso, a instância do shell estava sendo executada no virtualenv correto. Por isso, por que funcionou.


0

Isso funciona!!!

Isso geralmente acontece quando o módulo é instalado em uma versão mais antiga do python ou em outro diretório, não se preocupe, pois a solução é simples. - módulo de importação do diretório em que o módulo está instalado. Você pode fazer isso importando primeiro o sysmódulo python e depois importando do caminho em que o módulo está instalado

import sys
sys.path.append("directory in which module is installed")

import <module_name>

0

A maioria dos casos possíveis já foi abordada em soluções, apenas compartilhando meu caso; aconteceu comigo que instalei um pacote em um ambiente (por exemplo X) e estava importando o pacote em outro ambiente (por exemplo Y). Portanto, sempre verifique se está importando o pacote do ambiente em que o instalou.


0

Algo que funcionou para mim foi:

python -m pip install -user {package name}

O comando não requer sudo. Isso foi testado no OSX Mojave.


0

No meu caso, também tive que instalar o (s) módulo (s) para o superusuário.

sudo su
pip install <module>

Aparentemente, o superuso não pode acessar os arquivos normais dos usuários sob certas circunstâncias.


0

Para mim, era garantir a versão do módulo alinhada com a versão do Python que eu estava usando. Construí a imagem em uma caixa com o Python 3.6 e, em seguida, injetei em uma imagem do Docker que tinha 3.7 instalada e depois bati na minha cabeça quando o Python estava me dizendo que o módulo não estava instalado ...

36m para Python 3.6 bsonnumpy.cpython-36m-x86_64-linux-gnu.so

37m para Python 3.7 bsonnumpy.cpython-37m-x86_64-linux-gnu.so


pip installa versão que corresponde à versão do Python que você está usando. Que erro você recebe e qual é o resultado depython --version
streetster

python --version me fornece: Python 3.7.7 e quando eu chek onde o pacote está instalado com o pip show librosa gives; Local: /home/ec2-user/anaconda3/lib/python3.7/site-packages como significa que o pacote está no lugar certo, mas quando eu importo o pacote, você indica: no module name, estou trabalhando no ambiente do AWS Sagemaker Pytorch_p36
Walid Bousseta

presumivelmente você quer usar pytorch_p37?
streetster

não há pytorch_p37
Walid Bousseta

0

Eu sei que este é um post super antigo, mas para mim, eu tive um problema com um python de 32 bits e um python de 64 bits instalado. Depois de desinstalar o python de 32 bits, tudo funcionou como deveria.


0

Resolvi meu problema de que as mesmas bibliotecas estavam funcionando bem em um projeto (A), mas a importação dessas mesmas bibliotecas em outro projeto (B) causou erro. Estou usando o Pycharm como IDE no sistema operacional Windows. Então, depois de tentar muitas soluções em potencial e não conseguir resolver o problema, fiz essas duas coisas (pasta "Venv" excluída e intérprete reconfigurado):

1-No projeto (B), havia uma pasta chamada ("venv"), localizada em Bibliotecas Externas /. Eu apaguei essa pasta.

A etapa 2 (excluir a pasta "venv") causa erro na configuração do interpretador Python e é exibida uma mensagem na parte superior da tela dizendo "Intérprete python inválido selecionado para o projeto" e "configurar intérprete python", selecione esse link e ele abre uma nova janela. Na lista suspensa "Intérprete do projeto", há uma linha vermelha mostrando o intérprete inválido anterior. Agora, abra esta lista e selecione o interpretador Python (no meu caso, é Python 3.7). Pressione "Aplicar" e "OK" na parte inferior e você está pronto para ir.

Nota: era potencialmente o problema em que o ambiente virtual do meu projeto (B) não reconhecia as bibliotecas já instaladas e em funcionamento.


0

Se você estiver usando um ambiente virtual, use em pipenv install <module name>vez depip install <module name>

Trabalhou para mim.


pipenv não encontrado
Walid Bousseta

0

Também tive esse problema .. o pacote foi instalado no Python 3.8.0, mas o VS Code estava executando meu script usando uma versão mais antiga (3.4)

conserte no terminal:

py .py

Certifique-se de instalar o pacote na versão correta do Python


0

Como um amigo fez por mim hoje, aqui está o que me ajudou (estou usando o Windows):

Pressione 'Setting' -> 'Project' -> 'Project Interpreter'. Aqui na janela à direita, há uma linha com o título 'Project Interpreter' à esquerda. Clique nesta linha e ela abrirá várias linhas adicionais.

Agora pressione a linha 'Mostrar tudo'. Uma janela será aberta. Nesta janela, pressione o pequeno sinal de '+' no canto superior direito.

Uma nova janela se abrirá. À esquerda, existem 4 guias, pressione a mais superior, que diz 'Ambiente Virtualenv'. Agora, na janela à direita, marque a opção 'Ambiente existente'. A linha 'Intérprete' ficará bem visível. Pressione o botão '...' à direita da linha.

Agora, uma janela de navegação será aberta. Navegue até o diretório em que você instalou o próprio Python . Não é aquele com PyCharm. Quando chegar lá, escolha o arquivo 'python.exe' e pressione OK (a janela desaparecerá).

Pressione OK novamente (esta janela também desaparecerá).

Agora nesta janela, verifique se a nova linha que você criou está marcada e pressione OK novamente.

Agora, todos os pacotes instalados devem estar visíveis no interpretador do projeto e são lidos pelo seu programa.


0

Solução mais simples que funcionou para mim e que não vejo mencionada neste tópico:

Eu tenho várias versões do Python instaladas, mas estava tentando usar o Python3.7 - então tive que usar:

sudo pip3.7 install <package>

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.