python erreur d'importation
quel est le problème avec mon importations?
Dossier App structure:
myapp/
- models/models.py contient
SpotModel()
- tests/tests.py contient TestSpotModel(unittest.Cas de test). tests.py les importations
from myapp.models.models import *
qui fonctionne comme un charme - scripts/import.py contient
from myapp.models.models import *
le problème est que import.py lors de l'exécution entraîne un message d'erreur:
ImportError: No module named myapp.models.models
mais tests.py s'exécute.
J'ai __init__.py
fichiers dans myapp/__init__.py
, myapp/models/__init__.py
, myapp/tests/__init__.py
et comme mentionné, l'exécution de tests unitaires à l'aide nosetests fonctionne comme prévu.
from foo import *
est fortement déconseillée car elle provoque des collisions d'espace de noms. Il est difficile de dire ce qui se passe avec cette déclaration présente.Je voudrais aussi essayer d'éviter de nommer un module avec un Python mot-clé comme
import
. Maintenant, vous ne pouvez pas import myapp.import
!Je l'ai renommé pour python myapp/scripts/data.py mais c'est toujours le même problème
Dans les paquets,
import *
est beaucoup moins un problème si l'on sait ce qu'ils font, et aussi omniprésent.T: les maladies sexuellement transmissibles sont omniprésents, il ne signifie pas qu'ils ont besoin d'un avocat. Et dans ce cas on ne sait pas ce que l'on faisait.
OriginalL'auteur kristian nissen | 2010-08-21
Vous devez vous connecter pour publier un commentaire.
Il est
__init__.py
pasinit.py
. Assurez-vous que le répertoire dans la hiérarchie contient afin d'être en mesure d'importer.EDIT: j'ai réussi à le reproduire.
Voici la structure de répertoire:
J'ai mis le code suivant au début de la
data.py
pour cerner le problème:De l'exécution de l'
data.py
la voie OP indiqué yeilds ImportError:Mais de cette façon, fonctionne comme un charme:
Notez la différence dans la première entrée de
sys.path
.Il a écrit
__init__.py
, mais d'abord sans backticks, donc démarque de la pensée, il doit l'afficher en gras.Ai-je besoin d'une init.py à l'intérieur du dossier des scripts? J'ai essayé de l'ajouter, mais c'est toujours la même erreur
OriginalL'auteur Ihor Kaharlichenko
Comment êtes-vous de l'exécution de
import.py
? Qu'est-ce que le répertoire de travail courant quand vous le faites?La
myapp
répertoire doit être sur le Python chemin (ie. à l'intérieur de l'un des répertoires listés danssys.path
) pour vous d'être en mesure deimport
. Python ajoute automatiquement le répertoire de travail en cours à la liste des chemins à l'interprète temps de démarrage.Donc, si le répertoire qui contient
myapp
n'est pas ajouté manuellement le chemin d'accès (par exemple. à l'aide de laPYTHONPATH
variable d'environnement, ou de l'ajouter àsys.path
danssitecustomize.py
), vous devez être dans le répertoire contenantmyapp
lorsque vous exécutez le script. Si vous êtes à l'intérieur de lamyapp
répertoire lui-même, vous ne serez pas en mesure d'importer lesmyapp
paquet.OriginalL'auteur bobince
Votre
sys.path
est clairement pas configurés de la même manière, lorsque vous exécutez le test et lorsque vous exécutez le script. Neau-dessus de deux modules pour le confirmer. Ensuite, fixer le mal (par l'ajout de
sys.path
le répertoire parent demyapp
dans le cas où il manque.OriginalL'auteur Alex Martelli
Sauf si vous avez oublié de le mentionner, vous n'avez pas de
__init__.py
dansmyapp/scripts
, doncmyapp/scripts/import.py
n'est pas un module demyapp
.Sauf
myapp
est dans votre chemin d'accès global d'une certaine façon, le script ne peut pas le trouver, car il ne va pas chercher au bon endroit.Soit faire de votre dossier scripts d'un module par l'ajout d'un
__init__.py
, la déplacer les scripts de la hiérarchie du système de fichiers (que ce soit enmyapp
ou dans son dossier parent) ou installermyapp
dans votre path (c'est à dire déplacer à votrepackages
dossier, par exemple/usr/lib/python2.6/dist-packages/
).OriginalL'auteur Alan Plum