Errore Python "ImportError: Nessun modulo chiamato"

Python è installato in una directory locale.

Il mio albero di directory assomiglia a questo:

(local directory)/site-packages/toolkit/interface.py

Il mio codice è qui dentro:

(local directory)/site-packages/toolkit/examples/mountain.py

Per eseguire l'esempio, scrivo python mountain.py, e nel codice ho:

from toolkit.interface import interface

E ottengo l'errore:

Traceback (most recent call last):
  File "mountain.py", line 28, in ?
    from toolkit.interface import interface
ImportError: No module named toolkit.interface

Ho già controllato sys.path e lì ho la directory /site-packages. Inoltre, ho il file __init__.py.bin nella cartella toolkit per indicare a Python che questo è un pacchetto. Ho anche un __init__.py.bin nella directory examples.

Non so perché Python non riesce a trovare il file quando è in sys.path. Qualche idea? Può essere un problema di permessi? Ho bisogno di qualche permesso di esecuzione?

Soluzione

Sulla base dei vostri commenti al post di orip's, credo che questo sia quello che è successo:

  1. Hai modificato __init__.py su windows.
  2. L'editor di windows ha aggiunto qualcosa di non stampabile, forse un carriage-return (la fine della linea in Windows è CR/LF; in unix è solo LF), o forse un CTRL-Z (windows end-of-file).
  3. Hai usato WinSCP per copiare il file sulla tua casella unix.
  4. WinSCP ha pensato: "Questo ha qualcosa che non è testo di base; metterò un'estensione .bin per indicare dati binari;
  5. Il mancante __init__.py (ora chiamato __init__.py.bin) significa che python non capisce il toolkit come un pacchetto.
  6. Si crea __init__.py nella directory appropriata e tutto funziona... ?
Commentari (7)

Fa

(local directory)/site-packages/toolkit

ha un __init__.py?

Per far sì che import passeggi attraverso le vostre directory, ogni directory deve avere un file __init__.py.

Commentari (2)

Per marcare una directory come pacchetto è necessario un file chiamato __init__.py, questo aiuta?

Commentari (8)