2011-06-06 2 views
2

J'essaye de refactoriser du code python et je suis coincé avec une erreur d'importation que je ne comprends pas. Je soupçonne qu'il pourrait y avoir une dépendance circulaire quelque part mais je ne la vois pas, et je ne reçois pas beaucoup d'indices à partir des messages d'erreur. Le code de base est grande, mais il y a deux modules d'intérêt ici:Bizarre incompatible python ImportError - dépendance circulaire possible?

radian/models.py définit une classe appelée ACount

datalayer/radian.py a la ligne suivante dans le:

from radian.models import ACount 

Quand je lance le code (soit interactivement ou à partir du programme principal) les importations échouent d'une manière qui n'a pas de sens pour moi.

>>> from radian.models import ACount 
>>> import datalayer.radian 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/Users/leopd/dev/dbproj/datalayer/radian.py", line 10, in <module> 
    from radian.models import ACount 
ImportError: No module named models 

Ma meilleure estimation est qu'il ya une dépendance circulaire quelque part - que radian est l'importation quelque chose qui importe datalayer. Mais je ne le vois pas. Et le message d'erreur n'a aucun sens pour moi. Avez-vous une idée de ce qui passe?

- MISE À JOUR -

J'utilise python 2.6.1 sur Mac. Les fichiers __init__.py contiennent du code, mais ils ne sont importés qu'à partir de paquets python standard.

+1

Quelle version de Python utilisez-vous? Je recommande d'autoriser les importations absolues si elles sont disponibles. –

+1

Est-ce que 'radian' a un fichier' __init __. Py'? –

+1

Le fichier 'radian.py' pourrait-il essayer d'importer' models' de lui-même? – JAB

Répondre

1

Tout module dans le dossier datalayer (y compris radian.py), quand il voit from radian, supposons que datalayer/radian.py est le module concerné. Vous devrez peut-être faire

from __future__ import absolute_import 

dans datalayer/radian.py et d'autres modules de la même touchés, puis vérifiez toutes vos importations pour veiller à ce qu'ils sont absolus. Vous pouvez être en mesure de renoncer à renommer datalayer/radian.py et les importations qui le référencent, en fonction de l'endroit où ce module est référencé.

Questions connexes