2009-07-17 15 views
0

En ajax.py, j'ai cette déclaration d'importation:Essayer d'importer un module qui importe un autre module, se ImportError

import components.db_init as db 

Dans les composants/db_init.py, j'ai cette déclaration d'importation:

# import locals from ORM (Storm) 
from storm.locals import * 

Et dans les composants/tempête/locals.py, il a ceci:

from storm.properties import Bool, Int, Float, RawStr, Chars, Unicode, Pickle 
from storm.properties import List, Decimal, DateTime, Date, Time, Enum 
from storm.properties import TimeDelta 
from storm.references import Reference, ReferenceSet, Proxy 
from storm.database import create_database 
from storm.exceptions import StormError 
from storm.store import Store, AutoReload 
from storm.expr import Select, Insert, Update, Delete, Join, SQL 
from storm.expr import Like, In, Asc, Desc, And, Or, Min, Max, Count, Not 
from storm.info import ClassAlias 
from storm.base import Storm 

Alors, quand je lance cette déclaration d'importation dans ajax.py, je ge t cette erreur:

<type 'exceptions.ImportError'>: No module named storm.properties 

Je peux exécuter des composants/fines db_init.py sans exception ... donc je ne sais pas ce qui se passe.

Quelqu'un peut-il faire la lumière sur ce problème?

Répondre

2

Je suppose que storm.locals 'idée de son nom de paquet est différent de ce que vous pensez qu'il est (probablement il pense qu'il est dans components.storm.locals). Vous pouvez le vérifier en imprimant __name__ en haut de storm.locals, je crois. Si vous utilisez des importations qui ne sont pas relatives au package en cours, les noms de package doivent correspondre. L'utilisation d'une importation relative fonctionnerait probablement ici. Depuis locals et properties sont dans le même paquet, à l'intérieur storm.locals vous devriez être en mesure de faire juste

from properties import Bool 

et ainsi de suite.

+0

Cela résout mon problème, mais il en déterre un autre. Tous les modules internes de Storm utilisent 'import storm. {Module_name}' pour une raison quelconque. Je pense que cela signifie que Storm ne peut pas être utilisé par les modules Grandparent! – alecwh

+0

J'ai parlé trop tôt. Wuub a énuméré quelques méthodes pour circumnavigating ce problème ci-dessous. – alecwh

1

Vous devez soit

  • add (...)/composants/tempête PYTHONPATH,
  • utilisation des importations par rapport dans les composants/tempête/locals.py ou
  • propriétés à l'importation au lieu de storm.properties