Impossibile importare un modulo che è sicuramente installato


144

Dopo aver installato meccanize , non riesco a importarlo.

Ho provato a installare da pip, easy_install e tramite python setup.py installquesto repository: https://github.com/abielr/mechanize . Tutto questo inutilmente, poiché ogni volta che accedo al mio Python interattivo ottengo:

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
>>> 

Le installazioni che ho eseguito in precedenza hanno riferito che sono state completate correttamente, quindi mi aspetto che l'importazione funzioni. Cosa potrebbe causare questo errore?


Puoi mostrarci l'output della corsa easy_install? Inoltre, si prega di confermare il percorso completo easy_install, pipe di python.
Larks

Sei sicuro che non sia stato installato su 2.6 (che è di default su Ubuntu? (Almeno è sul mio debian)
dav1d

bene, l'output di easy install mostra che è installato su 2.7: Installed /usr/local/lib/python2.7/dist-packages/mechanize-0.2.6.dev_20130112-py2.7.egg
roy

@larks - aggiunte quelle informazioni in post originale
roy

Ho appena provato questo in ogni modo - setup.py, easy_install, pip - da pypi e repo, ma non riesco a farlo fallire. Potresti verificare sys.pathse stai cercando nei posti giusti, ls -laR /usr/local/lib/python2.7/dist-packages/mech*verificare la presenza di problemi con le autorizzazioni e cercare imp.find_module("mechanize")di distinguere tra errori Impossibile trovare e Impossibile sopravvivere a importarlo?
DSM,

Risposte:


100

Nel mio caso, è un problema di autorizzazione. Il pacchetto è stato in qualche modo installato solo con il permesso di root rw, altri utenti non possono proprio farlo!


26
Questo è successo a me, solo correndo sudo pip install .... Correzione semplice:sudo chmod -R ugo+rX /lib/python2.7/site-packages/
jozxyqk,

3
Mi sono imbattuto in questo molte volte e penso di aver appena scoperto il motivo: umask viene passato su sudo, quindi se la tua umask personale è stretta e usi sudo per l'installazione, i file e le directory saranno limitati. Se prima esegui semplicemente su e poi esegui l'installazione da una shell radice completa, è possibile utilizzare l'installazione risultante (almeno per me). Questo era per pip, ma potrebbe valere anche per apt-get. Se altri confermano questa causa, potresti voler modificare la risposta di conseguenza?
Brandyn

Aggiunta ai commenti di jozxyqk: assicurati di avere la directory giusta facendo $ pip show <nome_pacchetto>
Federico

2
Stessa cosa per me. Sto lavorando con Python 3.6 su Mac, così ha sudo chmod 777 /usr/local/lib/python3.6/site-packagesfatto il trucco
Antonio Serrano

3
sudo 777 è sempre una pessima idea
Marx

81

Ho avuto lo stesso problema: lo script con import coloramastava lanciando e ImportError, ma sudo pip install coloramami diceva "pacchetto già installato".

La mia soluzione: eseguire pip , senza sudo : pip install colorama. Quindi pip ha concordato che doveva essere installato, installato e il mio script è stato eseguito.

Il mio ambiente è Ubuntu 14.04 a 32 bit; Penso di averlo visto prima e dopo aver attivato virtualenv.

AGGIORNAMENTO : ancora meglio, usare python -m pip install <package>. Il vantaggio è che, poiché si sta eseguendo la versione specifica di Python in cui si desidera il pacchetto, pip installerà inequivocabilmente il pacchetto nel pitone "giusto". Ancora una volta, non usare sudo in questo caso ... quindi ottieni il pacchetto nel posto giusto, ma possibilmente con permessi di root (indesiderati).


1
in alternativa puoi usare la bandiera -H di sudo
Graydyn Young,

21

È il problema del percorso Python.

Nel mio caso, ho installato Python in:

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

e non esiste alcuna directory dei pacchetti del sito in python2.6.

Il pacchetto (SOAPpy) che ho installato da pip si trova

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

E site-package non è nel percorso python, tutto quello che ho fatto è stato aggiungere permanentemente pacchetti-site a PYTHONPATH.

  1. Apri Terminale
  2. Digitare open .bash_profile
  3. Nel file di testo che si apre, aggiungi questa riga alla fine:

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

  4. Salva il file, riavvia il Terminale e il gioco è fatto

Questo ha funzionato per me nel far lavorare Jenkins con il selenio pitone.
edst

Questo ha funzionato per me nell'esecuzione del sedano attraverso il supervisore, quando il mio script bash ha chiamato il mio script sedano; lo script sedano non è riuscito a importare i moduli già installati nel mio pip. Grazie mille.
Shivam Sharma,

Nota: un'altra possibilità dell'errore di importazione è che nel tuo computer siano installate più versioni di Python. Ad esempio, uno dal sistema Python e uno da Miniconda o Anaconda. Pertanto, assicurarsi di utilizzare sempre il "pip" corrispondente corretto.
Sanchit,

8

Il meccanismo di importazione di Python funziona davvero, quindi:

  1. Il tuo PYTHONPATH è sbagliato,
  2. La tua libreria non è installata dove pensi che sia
  3. Hai un'altra libreria con lo stesso nome che maschera questo

1
In questo caso non può essere l'opzione 3; che non genererebbe un ImportError.
Martijn Pieters

2
forse 2? Semplicemente non so perché sarebbe installato nel posto sbagliato per questa libreria, dove la maggior parte degli altri va bene.
Roy

3
Opzione 4: PYTHONPATH ha ragione, la tua libreria è dove vuoi, non hai una libreria che lo maschera ... ma poiché l'hai usata sudo pip installè stata installata con i privilegi di root e al momento dell'importazione qualcosa sta bombardando per la mancanza di accesso in lettura o scrittura.
Dan H,

2
Non del tutto vero, @MartijnPieters: se ci fosse un'importazione del modulo "da <pacchetto> import <foo>", e se il pacchetto ostruente non avesse "pippo", si otterrebbe un errore di importazione per l'opzione 3.
Dan H,

@DanH certo, ma non è questo il modulo utilizzato dall'OP.
Martijn Pieters

8

Ho sbattuto la testa contro il mio monitor su questo fino a quando un giovane tirocinante mi ha detto che il segreto è "python setup.py install" nella directory del modulo.

Per qualche motivo, eseguire l'installazione da lì lo fa funzionare.

Per essere chiari, se il nome del tuo modulo è "pippo":

[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 si tenta di eseguire setup.py da qualsiasi altra directory chiamando il suo percorso, si finisce con un'installazione interrotta.

NON FUNZIONA:

python /root/foo/setup.py install

FUNZIONA:

cd /root/foo
python setup.py install

7

Sono stato in grado di correggere questo problema con un approccio combinato. Innanzitutto, ho seguito il consiglio di Chris, ho aperto una riga di comando e ho digitato 'pip show nomepacchetto' Questo ha fornito la posizione del pacchetto installato.

Successivamente, ho aperto Python e ho digitato 'import sys', quindi 'sys.path' per mostrare dove il mio python cerca i pacchetti che importa. Purtroppo, la posizione mostrata nel primo passaggio NON era nell'elenco.

Passo finale, ho digitato 'sys.path.append (' package_location_seen_in_step_1 '). Se lo desideri, puoi ripetere il secondo passaggio per vedere che la posizione è ora nell'elenco.

Test passo, prova a importare di nuovo il pacchetto ... funziona.

Il rovescio della medaglia? È temporaneo e devi aggiungerlo ogni volta all'elenco.


5

Ho riscontrato questo durante il tentativo di utilizzare il portachiavi che ho installato tramite sudo pip install keyring. Come menzionato nelle altre risposte, nel mio caso si tratta di un problema di autorizzazioni.

Cosa ha funzionato per me:

  1. Portachiavi disinstallato:
    • sudo pip uninstall keyring
  2. Ho usato l' -Hopzione di sudo e ho reinstallato il portachiavi:
    • sudo -H pip install keyring

Spero che questo ti aiuti.


3

Sono nuovo di Python. Ho risolto questo problema modificando il percorso dell'interprete del progetto.
File -> Settings -> Project -> Project Interpreter


Da dove, un IDE o ???
Christopher Kikoti,

2

Non sono riuscito a far funzionare correttamente il mio PYTHONPATH. Mi sono reso conto che aggiungendo exportrisolto il problema:

(ha funzionato)

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

vs.

(non ha funzionato)

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

2

Nel mio caso avevo eseguito pip install Django==1.11e non avrebbe importato pythondall'interprete.

Navigando attraverso i comandi di pip ho scoperto pip showche assomigliava a questo:

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

Notare che la posizione dice "3.4". Ho scoperto che il pythoncomando era collegato apython2.7

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

Proprio accanto ho trovato un link chiamato, python3quindi l'ho usato. È inoltre possibile modificare il collegamento in python3.4. Anche questo lo risolverebbe.


1

Nel mio caso era un problema con un file init .py mancante nel modulo, che volevo importare in un ambiente Python 2.7.

Python 3.3+ ha pacchetti di spazi dei nomi impliciti che gli consentono di creare pacchetti senza un file .py di init .


1

Se le altre risposte menzionate non funzionano per te, prova a eliminare la cache del pip e a reinstallare il pacchetto. La mia macchina esegue Ubuntu14.04 e si trovava sotto ~/.cache/pip. L'eliminazione di questa cartella ha fatto il trucco per me.


1

Inoltre, assicurarsi che non confondere pip3con pip. Quello che ho scoperto è che il pacchetto installato con pipnon funzionava python3e viceversa.


0

Quando si installa tramite easy_installo pip, si sta completando correttamente? Qual è l'output completo? Quale installazione di Python stai usando? Potrebbe essere necessario utilizzarlo sudoprima del comando di installazione, se si stanno installando moduli in una directory di sistema (se si sta utilizzando l'installazione di Python di sistema, forse). Non ci sono molte informazioni utili nella tua domanda da cui partire, ma alcuni strumenti che probabilmente ti aiuteranno includono:

  • echo $PYTHONPATHe / o echo $PATH: durante l'importazione di moduli, Python cerca una di queste variabili d'ambiente (elenchi di directory, :delimitati) per il modulo desiderato. I problemi di importazione sono spesso dovuti all'assenza della directory corretta da questi elenchi

  • which python, which pipoppure which easy_install: ti indicheranno la posizione di ciascun eseguibile. Potrebbe essere utile sapere.

  • Usa virtualenv , come suggerisce @JesseBriggs. Funziona molto bene pipper aiutarti a isolare e gestire i moduli e l'ambiente per progetti Python separati.


0

Ho avuto questo esatto problema, ma nessuna delle risposte sopra ha funzionato. Mi ha fatto impazzire finché non ho notato che sys.path era diverso dopo che avevo importato dal progetto padre. Si è scoperto che avevo usato importlib per scrivere una piccola funzione al fine di importare un file non nella gerarchia del progetto. Cattiva idea: ho dimenticato di averlo fatto. Ancora peggio, il processo di importazione si è confuso con il sys.path e l'ha lasciato così. Molto cattiva idea.

La soluzione era quella di fermarlo e semplicemente mettere il file che avevo bisogno di importare nel progetto. Un altro approccio sarebbe stato quello di inserire il file nel proprio progetto, poiché deve essere ricostruito di volta in volta e la ricostruzione potrebbe o meno coincidere con la ricostruzione del progetto principale.


0

Ho avuto questo problema con 2.7 e 3.5 installati sul mio sistema cercando di testare un bot di telegrammi con Python-Telegram-Bot .

Non sono riuscito a farlo funzionare dopo l'installazione con pip e pip3, con sudo o senza. Ho sempre avuto:

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

Leggere correttamente il messaggio di errore mi dice che python sta cercando nella directory corrente un telegram.py. E giusto, avevo una sceneggiatura lì chiamata telegram.py e questo è stato caricato da Python quando ho chiamato import.

Conclusione, assicurati di non averne package.pynella directory di lavoro corrente quando tenti di importare. (E leggere attentamente il messaggio di errore).


0

Ho avuto un problema simile (su Windows) e la causa principale nel mio caso era il software ANTIVIRUS ! Ha la funzione "Auto-Contenimento", che avvolge il processo in esecuzione con una sorta di macchina virtuale. I sintomi sono: pip install somemodulefunziona benissimo in una finestra cmd-line eimport somemodule fallisce quando eseguito da un altro processo con l'errore

ModuleNotFoundError: No module named 'somemodule'

Spero che farà risparmiare un po 'di tempo a qualcuno :)


0

Forse un po 'fuori tema, ma ho avuto problemi import PyYAML. Sottolinea che è necessario import yaml. (suppongo sia un classico RTFM ...)


0

Ho avuto un problema simile usando Django. Nel mio caso, potrei importare il modulo dalla shell Django, ma non da un .py che ha importato il modulo.
Il problema era che stavo eseguendo il server Django (quindi, eseguendo il .py) da un virtualenv diverso da cui era stato installato il modulo.

Invece, l'istanza della shell veniva eseguita nel virtualenv corretto. Quindi, perché ha funzionato.


0

Questo funziona !!!

Ciò accade spesso quando il modulo è installato su una versione precedente di Python o in un'altra directory, senza preoccupazioni poiché la soluzione è semplice. - importa il modulo dalla directory in cui è installato il modulo. Puoi farlo importando prima il sysmodulo Python, quindi importandolo dal percorso in cui è installato il modulo

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

import <module_name>

0

La maggior parte dei casi possibili sono già stati trattati in soluzioni, condividendo solo il mio caso, mi è successo che ho installato un pacchetto in un ambiente (ad esempio X) e che stavo importando il pacchetto in un altro ambiente (ad esempio Y). Quindi, assicurati sempre di importare il pacchetto dall'ambiente in cui hai installato il pacchetto.


0

Qualcosa che ha funzionato per me è stato:

python -m pip install -user {package name}

Il comando non richiede sudo. Questo è stato testato su OSX Mojave.


0

Nel mio caso ho dovuto installare anche i moduli per il superutente.

sudo su
pip install <module>

Apparentemente il superuso non può accedere ai normali file degli utenti in determinate circostanze.


0

Per me stava assicurando che la versione del modulo fosse allineata con la versione di Python che stavo usando .. Ho costruito l'immagine su una scatola con Python 3.6 e poi iniettata in un'immagine Docker che si trovava con 3.7 installata, e poi sbattendo la testa quando Python mi stava dicendo che il modulo non era installato ...

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

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


pip installla versione che corrisponde alla versione di Python che stai utilizzando. Che errore ricevi e qual è l'output dipython --version
streetster

python --version mi dà: Python 3.7.7 e quando controllo dove è installato il pacchetto con pip show librosa dà; Posizione: /home/ec2-user/anaconda3/lib/python3.7/site-packages come significa che il pacchetto si trova nel posto giusto, ma quando importa il pacchetto dà: nessun nome di modulo sto lavorando su AWS Sagemaker env Pytorch_p36
Walid Bousseta,

presumibilmente vuoi usare pytorch_p37?
streetster

non c'è pytorch_p37
Walid Bousseta

0

So che questo è un post super vecchio, ma per me ho avuto un problema con un pitone a 32 bit e un pitone a 64 bit installato. Dopo aver disinstallato Python a 32 bit, tutto ha funzionato come dovrebbe.


0

Ho risolto il problema che le stesse librerie funzionavano bene in un progetto (A) ma l'importazione di quelle stesse librerie in un altro progetto (B) ha causato errori. Sto usando Pycharm come IDE sul sistema operativo Windows. Quindi, dopo aver provato molte potenziali soluzioni e non aver risolto il problema, ho fatto queste due cose (cartella "Venv" eliminata e interprete riconfigurato):

1-Nel progetto (B), c'era una cartella denominata ("venv"), situata in Librerie esterne /. Ho cancellato quella cartella.

2-Step 1 (eliminazione della cartella "venv") causa errori nella configurazione dell'interprete Python e nella parte superiore dello schermo viene visualizzato un messaggio che dice "Interprete python non valido selezionato per il progetto" e "configura interprete python", selezionare quel collegamento e apre una nuova finestra. Nell'elenco a discesa "Interprete progetto" è presente una linea rossa che mostra l'interprete non valido precedente. Ora, apri questo elenco e seleziona Python Interpreter (nel mio caso, è Python 3.7). Premi "Applica" e "OK" in basso e sei a posto.

Nota: è stato potenzialmente il problema in cui Virtual Environment of my Project (B) non riconosceva le librerie già installate e funzionanti.


0

Se si utilizza un ambiente virtuale, utilizzare pipenv install <module name>invece dipip install <module name>

Ha funzionato per me.


pipenv non trovato
Walid Bousseta

0

Aveva anche questo problema .. il pacchetto era installato su Python 3.8.0 ma VS Code stava eseguendo il mio script usando una versione precedente (3.4)

correzione nel terminale:

py .py

Assicurati di installare il pacchetto sulla versione corretta di Python


0

Come un amico ha fatto per me oggi, ecco cosa mi ha aiutato (sto usando Windows):

Premere 'Setting' -> 'Project' -> 'Project Interpreter'. Qui nella finestra a destra, c'è una riga con il titolo "Interprete di progetto" alla sua sinistra. Fai clic su questa riga per aprire diverse righe aggiuntive.

Ora premi la riga "Mostra tutto". Si aprirà una finestra. In questa finestra premi il piccolo segno '+' nell'angolo in alto a destra.

Verrà aperta una nuova finestra. Sulla sinistra ci sono 4 schede, premi quella più in alto, che dice "Virtualenv Environment". Ora, nella finestra a destra, seleziona l'opzione "Ambiente esistente". La riga "Interprete" diventerà ben visibile. Premi il tasto '...' sulla destra della linea.

Ora si aprirà una finestra di navigazione. Passare alla directory in cui è installato Python stesso . Non quello con PyCharm. Quando ci arrivi, scegli il file 'python.exe' e premi OK (la finestra scomparirà).

Premere di nuovo OK (anche questa finestra scomparirà).

Ora in questa finestra assicurati che la nuova riga che hai creato sia contrassegnata e premi nuovamente OK.

Ora, tutti i pacchetti installati dovrebbero essere visibili nell'interprete del progetto e essere letti dal tuo programma.


0

La soluzione più semplice che ha funzionato per me che non vedo menzionata in questa discussione:

Ho installato più versioni di Python ma stavo cercando di usare Python3.7, quindi ho dovuto usare:

sudo pip3.7 install <package>

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.