2014-12-08 13 views
10

Sto tentando di importare un modulo (venues) da una shell IPython. Il modulo venues viene importato correttamente ma si tenta quindi di importare un modulo denominato makesoup e non riesce a farlo.Python 3: modulo nella stessa directory dello script: "ImportError: nessun modulo denominato"

Sono nella directory ~ e sto tentando di importare il file venues.py nella sottodirectory processors. Il file makesoup.py si trova anche nella sottodirectory processors, il che significa che qualsiasi script Python vicino dovrebbe essere in grado di trovarlo, giusto?

In [1]: import processors.venues 
--------------------------------------------------------------------------- 
ImportError        Traceback (most recent call last) 
<ipython-input-1-765135ed9288> in <module>() 
----> 1 import processors.venues 

~/processors/venues.py in <module>() 
     7 """ 
     8 
----> 9 import makesoup 
    10 import re 
    11 

ImportError: No module named 'makesoup' 

Ho aggiunto un vuoto __init__.py in sia le ~ e processors directory, senza successo.

Nota: il modulo makesoup viene importato correttamente quando si trova in processors ma so che questo non è l'unico modo in cui dovrebbe funzionare.

risposta

17

The makesoup.py file is also located in the processors subdirectory, which means any Python script near it should be able to find it, right?

No. Questa funzione was changed in Python 3 e quella sintassi non funziona più.

Modificare il import makesoup a questo:

from . import makesoup 

O a questa:

from processors import makesoup 

Entrambi questi l'impossibilità di eseguire python processors/venues.py direttamente, anche se si può ancora fare python -m processors.venues dalla propria home directory .

+0

Grazie Kevin. Tuttavia, non capisco perché queste soluzioni renderebbero impossibile eseguire 'venues.py'direttamente. Puoi dirmi perché? –

+0

Se si utilizza un'importazione relativa esplicita (la prima opzione che ho elencato), la variabile magica '__package__' deve essere impostata, ma' python' non lo farà quando si esegue uno script direttamente senza '-m'. Se si utilizza un'importazione assoluta, Python probabilmente non sarà in grado di trovare il pacchetto 'processors', poiché non si trova nella stessa directory dello script. Ancora, '-m' risolverà questo problema. – Kevin

Problemi correlati