2011-05-12 1 views
7

J'utilise Django 1.3.0 avec Python 2.7.1. Dans tous les tests que j'écris les importations suivantes je reçois le ImportError ci-dessus:ImportError: impossible d'importer les signaux de nom

 
from django.utils import unittest 
from django.test.client import Client 

La trace complète de la pile:

 
    File "C:\Program Files (x86)\j2ee\plugins\org.python.pydev.debug_1.6.3.2010100513\pysrc\runfiles.py", line 342, in __get_module_from_str 
    mod = __import__(modname) 
    File "C:/Users/benjamin/workspace/BookIt/src/BookIt/tests\basic_flow.py", line 11, in 
    from django.test.client import Client 
    File "C:\Python27\lib\site-packages\django\test\__init__.py", line 5, in 
    from django.test.client import Client, RequestFactory 
    File "C:\Python27\lib\site-packages\django\test\client.py", line 21, in 
    from django.test import signals 
ImportError: cannot import name signals 
ERROR: Module: basic_flow could not be imported. 

Toutes les idées pourquoi ce qui se passe?

+1

J'ai lu cette [question] (http://stackoverflow.com/questions/4707111/importerror-cannot-import-name-modulea), est-ce parce que ** Client ** est importé deux fois? une fois dans C: \ Python27 \ lib \ paquets-de-site \ django \ test \ __ init __. py' et encore dans mon test 'C:/Users/benjamin/espace de travail/BookIt/src/BookIt/tests \ basic_flow.py'. Si c'est le cas, alors comment importer le ** Client ** à mon test? –

+0

Cela importerait seulement si l'importation du client crée une importation circulaire, c'est-à-dire que file_A importe le fichier_B et file_B importe le fichier_A. Peu importe si les importations ne sont pas complètes. Python doit toujours analyser le module pour extraire les éléments individuels. Parfois, des importations circulaires sont nécessaires, donc si c'est votre cas, vous pouvez envelopper les importations en conflit dans un bloc 'try', en utilisant' ImportError' comme exception. –

+0

J'ai rencontré ce problème quand, à partir d'un shell python, j'ai essayé d'importer pour importer mes modèles django. Il a échoué (en raison de l'absence de jeu de paramètres), j'ai géré cela, puis j'ai essayé de les importer à nouveau, et j'ai eu cette erreur. D'une manière ou d'une autre, ce processus a rendu mon espace de noms de module dans un état sale, mais @ BenjaminK. Pensait que quelque chose était importé deux fois m'a fait réaliser que cela se passait. –

Répondre

5

@Hugo avait raison de dire que c'était un problème avec settings.py. Mais je n'ai pas eu ce problème lors de l'exécution de l'environnement Django. Mais quand je voulais faire des tests unitaires un par un (en utilisant la course de Pydev comme unittest), il a échoué à fonctionner. ce que je devais faire était d'ajouter les informations du module de paramètres Django, donc pour l'instant ce que je fais est d'ajouter les lignes à mes tests unitaires suivants:

 
from django.core import management; 
import BookIt.settings as settings; 
management.setup_environ(settings) 

Ce module charge mes paramètres du projet Django et me permettent de fonctionner comme unittest régulier. Si quelqu'un a une meilleure suggestion sur la façon de configurer cela plus proprement dans Pydev s'il vous plaît faites le moi savoir.

2

J'ai eu le même problème il y a une minute. En enquêtant j'ai réalisé que le problème était avec mon fichier settings.py *.

Vérifiez si vous rencontrez des problèmes avec Django pour trouver votre fichier de paramètres correctement.

Ce message d'erreur est totalement non-sens.

* IIRC Django recherche settings.py fichier, s'il ne trouve pas, il recherche la variable d'environnement DJANGO_SETTINGS_MODULE et essayez-le.

+0

Je ne pense pas qu'il y ait un problème avec mon fichier 'settings.py'. Lorsque j'ajoute la ligne suivante aux imports: 'from BookIt.settings import ADMIN_MEDIA_PREFIX' cela fonctionne Ok. –

-1

Ceci est facile à résoudre. Si vous avez déjà écrit le settings.py (le plus probable), naviguez simplement dans le répertoire qui contient le fichier "settings.py" et exécutez-le.

1] python 2] paramètres d'importation

Ces commandes devraient faire l'affaire. Ensuite, allez dans n'importe quel dossier et continuez l'exécution.

Questions connexes