Σφάλμα Python "ImportError: Δεν υπάρχει ενότητα με όνομα&quot,

Η Python είναι εγκατεστημένη σε έναν τοπικό κατάλογο.

Το δέντρο των καταλόγων μου μοιάζει ως εξής:

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

Ο κώδικάς μου βρίσκεται εδώ:

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

Για να τρέξω το παράδειγμα, γράφω python mountain.py, και στον κώδικα έχω:

from toolkit.interface import interface

Και λαμβάνω το σφάλμα: "Οπότε, αν δεν έχω την ευκαιρία να το κάνω, θα πρέπει να το κάνω...

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

Έχω ήδη ελέγξει το sys.path και εκεί έχω τον κατάλογο /site-packages. Επίσης, έχω το αρχείο __init__.py.bin στο φάκελο toolkit για να δείξω στην Python ότι πρόκειται για πακέτο. Έχω επίσης ένα __init__.py.bin στον κατάλογο examples.

Δεν ξέρω γιατί η Python δεν μπορεί να βρει το αρχείο όταν βρίσκεται στο sys.path. Καμία ιδέα; Μπορεί να είναι πρόβλημα δικαιωμάτων; Χρειάζομαι κάποιο δικαίωμα εκτέλεσης;

Λύση

Με βάση τα σχόλιά σας στην ανάρτηση του orip's, υποθέτω ότι αυτό συνέβη:

  1. Επεξεργαστήκατε το αρχείο __init__.py στα windows.
  2. Ο συντάκτης των windows πρόσθεσε κάτι μη εκτυπωτικό, ίσως ένα carriage-return (το τέλος της γραμμής στα Windows είναι CR/LF- στο unix είναι μόνο LF), ή ίσως ένα CTRL-Z (τέλος του αρχείου στα windows).
  3. Χρησιμοποιήσατε το WinSCP για να αντιγράψετε το αρχείο στο unix box σας.
  4. Το WinSCP σκέφτηκε: "Αυτό έχει κάτι που δεν είναι βασικό κείμενο- θα βάλω μια επέκταση .bin για να δηλώσω δυαδικά δεδομένα.&quot,
  5. Η έλλειψη του __init__.py (τώρα ονομάζεται __init__.py.bin) σημαίνει ότι η python δεν καταλαβαίνει το toolkit ως πακέτο.
  6. Δημιουργείτε το __init__.py στον κατάλληλο κατάλογο και όλα λειτουργούν... ?
Σχόλια (7)

Μήπως

(local directory)/site-packages/toolkit

έχει ένα αρχείο __init__.py;

Για να μπορέσει η import να περπατήσει στους καταλόγους σας, κάθε κατάλογος πρέπει να έχει ένα αρχείο __init__.py.

Σχόλια (2)

Για να χαρακτηρίσετε έναν κατάλογο ως πακέτο χρειάζεστε ένα αρχείο με όνομα __init__.py, βοηθάει αυτό;

Σχόλια (8)