Problemi di importazione irrisolti con PyDev ed Eclipse


108

Sono molto nuovo di PyDev e Python, anche se ho usato molto Eclipse per Java. Sto cercando di lavorare su alcuni degli esempi di Dive Into Python e questo sembra un problema estremamente banale che sta diventando estremamente fastidioso. Sto usando Ubuntu Linux 10.04.

Voglio essere in grado di utilizzare il file odbchelper.py, che si trova nella directory /Desktop/Python_Tutorials/diveintopython/py

Ecco il mio file example.py su cui sto lavorando nel mio progetto PyDev / Eclipse:

import sys
sys.path.append("~/Desktop/Python_Tutorials/diveintopython/py")

Funziona bene, ma poi voglio che la riga successiva del mio codice sia:

import odbchelper

e questo causa ogni volta un errore di importazione non risolto. Ho aggiunto __init__.pyfile a quasi tutte le directory possibili e non aiuta nulla. Ho provato ad aggiungere i __init__.pyfile uno alla volta ai vari livelli di directory tra la posizione del progetto e il file odbchelper.py, e ho anche provato ad aggiungere i __init__.pyfile a tutte le directory in mezzo contemporaneamente. Nessuno dei due funziona.

Tutto quello che voglio fare è avere un progetto da qualche parte in qualche altra directory, diciamo /Desktop/MyStuff/Project, in cui ho example.py ... e poi da example.py voglio importare odbchelper.py da/Desktop/Python_Tutorials/diveintopython/py/

Ogni risposta della bacheca che riesco a trovare dice semplicemente di usare la sys.path.append()funzione per aggiungere questa directory al mio percorso e quindi importarla ... ma è esattamente quello che sto facendo nel mio codice e non funziona.

Ho anche provato il Ctrl-1 trucco per sopprimere il messaggio di errore, ma il programma non funziona ancora correttamente. Ottengo un errore, ImportError: No module named odbchelper. Quindi chiaramente non viene aggiunto il percorso o c'è qualche problema che tutte le mie numerose permutazioni di aggiunta di __init__.pyfile hanno perso.

È molto frustrante che qualcosa di così semplice ... chiamare cose da qualche file che esiste da qualche altra parte sulla mia macchina ... richieda così tanto sforzo.


Assicurati che le maiuscole / minuscole siano corrette per tutte le directory necessarie nel tuo PYTHONPATH.
Cam Jackson

So che è già stata data una risposta, ma ho ricevuto un'importazione non risolta per il grpmodulo. L'ho appena aggiunto builtinsall'elenco in Preferenze> PyDev> Interpreti> Python> Forced Builtins e ottengo ancora il completamento automatico per quel modulo
user1040495

Risposte:


132

Nelle proprietà del tuo progetto pydev, c'è un pannello chiamato "PyDev - PYTHONPATH", con un sotto-pannello chiamato "Librerie esterne". È possibile aggiungere cartelle di origine (qualsiasi cartella che ha un __init__.py) al percorso utilizzando quel riquadro. Il codice del tuo progetto sarà quindi in grado di importare moduli da quelle cartelle di origine.


4
Se imposti correttamente le proprietà di pydev, non devi scherzare consys.path
Velociraptors

6
Per altri ricercatori, volevo aggiungere la mia esperienza -Windows 7, Python 2.7.1, Eclipse 3.6.2, PyDev, Pyschopg (per Python 2.7 amd64). L'installazione di Psychopg è andata in C: \ Python27 \ Lib \ site-packages \ psycopg2 (sotto l'installazione di Python 2.7). Per prima cosa ho fatto riferimento a quella cartella e a tutte le cartelle figlio con init .py, ma ho scoperto che dovevo fare riferimento anche alla cartella site_packages. ( stackoverflow.com/questions/2983088/unresolved-import-models ) ( stackoverflow.com/questions/4631377/… )
Jeff Maass

86
Un altro punto da notare: potrebbe essere necessario riavviare Eclipse affinché funzioni. Questo sembra funzionare solo tramite "File -> Riavvia" e non chiudendo e riaprendo manualmente.
soulBit

18
Nota importante: ho trovato che l'interprete Auto Config aggiunge C:\Python27\lib\site-packages, ma sul mio computer, la cartella lib è capitalizzata: C:\Python27\Lib\site-packages. Sostituire la voce minuscola con una maiuscola e quindi File-> Riavvia ha risolto il problema per me. Spero che questo aiuti qualcun altro là fuori :)
Cam Jackson

10
@soulBit Vorrei poter alzare il pollice a quel commento 20 volte, ho passato un'ora buona cercando di capire perché la mia importazione era ancora irrisolta. Grazie
Matt Dodge

51

Sto usando eclipse kepler 4.3, PyDev 3.9.2 e sul mio ubuntu 14.04 ho riscontrato lo stesso problema. Ho provato e trascorso ore, con tutte le opzioni di cui sopra, ma invano. Quindi ho provato quanto segue, il che è stato fantastico:

  • Seleziona Project -> RightClick-> PyDev -> Remove PyDev Project Config
  • file-> riavvia

E stavo usando Python 2.7 come interprete, anche se non ha effetto, credo.


5
Non è necessario riavviare Eclipse, basta chiudere e riaprire il file. Ha funzionato anche su Windows con Eclipse Luna, grazie!
Noam Manos

Ho dovuto riavviare Eclipse due volte per far scomparire gli avvisi. Grazie
Vladimir S.

Funziona anche con Python 3.7. Questa dovrebbe essere la soluzione a questa domanda.
SPRBRN

Ho provato questo e ora non riesco ad avviare il mio server DEV. Come si sostituisce il file?
Lee Loftiss

@ BitByty-Bake qual è la causa principale?
ankostis

42

Ho appena aggiornato un progetto WXWindows a Python 2.7 e non ho avuto problemi a far riconoscere a Pydev il nuovo interprete. Ha fatto la stessa cosa come sopra configurando l'interprete, fatto una nuova installazione di Eclipse e Pydev. Pensavo che una parte di Python fosse corrotta, quindi ho reinstallato tutto di nuovo. Arghh! Chiuso e riaperto il progetto e riavviato Eclipse tra tutte queste modifiche.

FINALMENTE ho notato che puoi 'rimuovere la configurazione del progetto PyDev' facendo clic con il tasto destro sul progetto. Quindi può essere trasformato di nuovo in un progetto PyDev, ora è buono come l'oro!


Sì, ha chiuso e riaperto il progetto per sbarazzarsi di quei messaggi di ImportError inquietanti
somnathchakrabarti

17

Ho corretto il mio percorso python e tutto era perfetto quando ho importato cose tramite la console, ma tutte queste importazioni precedentemente non risolte erano ancora contrassegnate come errori nel mio codice, non importa quante volte avessi riavviato eclipse o aggiornato / pulito il progetto.

Ho fatto clic con il pulsante destro del mouse sul progetto-> Pydev-> Rimuovi i marcatori di errore e si è sbarazzato di quel problema. Non preoccuparti, se il tuo codice contiene errori effettivi, verranno contrassegnati nuovamente.


Funziona bene usando liclipse con odoo 10. Grazie!
Didierh

11

progetto -> proprietà -> pydev-pythonpath -> librerie esterne -> aggiungi cartella sorgente, aggiungi la CARTELLA GENITORE del progetto. Quindi riavvia eclipse.


2
Bene, questo è stato quello che ha risolto il mio problema.
Simon Hayward

Non è necessario riavviare, basta chiudere e riaprire il file. Risolto il problema per me!
Jerther

4

Ecco cosa ha funzionato per me (suggerito da soulBit):

1) Restart using restart from the file menu
2) Once it started again, manually close and open it.

Questa è la soluzione più semplice in assoluto e rimuove completamente la cosa fastidiosa.


1

Esistono due modi per risolvere questo problema:

  • Elimina l'interprete Python da "Interpreti Python" e aggiungilo di nuovo.
  • O semplicemente aggiungi la cartella con le librerie nell'interprete che stai usando nel tuo progetto, nel mio caso stavo usando "bottle" e la cartella che ho aggiunto era "c: \ Python33 \ Lib \ site-packages \ bottle-0.11.6 -py3.3.egg"

Ora non vedo più l'errore e la funzione di completamento del codice funziona anche con "bottiglia".


1

Sto eseguendo Eclipse 4.2.0 (Juno) e PyDev 2.8.1 e mi sono imbattuto in questo problema con una lib installata nel percorso dei miei pacchetti del sito. Secondo questa domanda SO:

File Pydev e * .pyc

... c'è un problema con i file PyDev e pyc. Nel caso della particolare libreria a cui ho provato a fare riferimento, tutto ciò che viene fornito sono file pyc.

Ecco cosa ho fatto per risolvere questo problema:

  1. Installa uncompyle2 da https://github.com/Mysterie/uncompyle2
  2. Esegui uncompyle2 sui file * .pyc nella libreria site-packages. Esempio:

    uncompyle2 -r -o / tmp / percorso / a / site-packages / lib

  3. Rinomina i file * .pyc_dis risultanti prodotti da uncompyle2 a * .py
  4. Sposta / copia questi file * .py nel percorso dei pacchetti del sito
  5. In Eclipse, seleziona File> Riavvia

L'errore di importazione irrisolto relativo ai file .pyc dovrebbe ora scomparire.


0

Di seguito, a mio avviso, risolverà il problema

  1. Aggiunta di init .py alla cartella "~ / Desktop / Python_Tutorials / diveintopython / py"
  2. Vai a Finestra -> Preferenze -> PyDev -> Interpreti -> Python Interpreter per rimuovere l'impostazione dell'interprete Python (il motivo è che PyDev non è in grado di aggiornare automaticamente gli aggiornamenti effettuati su qualsiasi sistema PythonPath)
  3. Aggiungi l'interprete con gli stessi dettagli di prima (questo aggiornerà l'impostazione dell'interprete Python con gli aggiornamenti apportati al tuo percorso Python)
  4. Infine, poiché la tua cartella "~ / Desktop / Python_Tutorials / diveintopython / py" non è un PythonPath standard, dovrai aggiungerla. Ci sono due modi per farlo

un. Secondo quanto suggerito da David German. Tuttavia, questo è applicabile solo per i progetti particolari in cui ti trovi b. Aggiungi "~ / Desktop / Python_Tutorials / diveintopython / py" in un nuovo PythonPath in Finestra -> Preferenze -> PyDev -> Interpreti -> Python Interpreter -> Sottoscheda Librerie -> Nuova cartella

Spero che sia d'aiuto.


0

Ho avuto alcuni problemi con l'importazione di librerie aggiuntive, dopo aver provato a risolvere il problema, comprendendo PYTHONPATH, Interpreter e Grammar ho scoperto che ho scritto tutto ma i problemi continuano. Dopodiché, aggiungo solo una nuova riga vuota nei file che avevano gli errori di importazione e li ho salvati e l'errore è stato risolto .


-1
KD.py

class A:
a=10;

KD2.py 
from com.jbk.KD import A;
class B:
  b=120;

aa=A();
print(aa.a)

QUESTO file funziona perfettamente per me

Un altro esempio è

main.py
=======
from com.jbk.scenarios.objectcreation.settings import _init
from com.jbk.scenarios.objectcreation.subfile import stuff

_init();
stuff();

settings.py
==========
def _init():
print("kiran")


subfile.py
==========
def stuff():
print("asasas")    

Si prega di considerare di separare nomi di file e codici. E devi anche correggere alcuni rientri.
dkato
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.