2010-03-02 6 views
2

Voici ma classe de chargeur, ItemLoader.py:Python: Malentendu sur la façon dont les importations fonctionnent

from google.appengine.ext import db 
from google.appengine.tools import bulkloader 
import models 

class ItemLoader(bulkloader.Loader): 
    def __init__(self): 
     bulkloader.Loader.__init__(self, 'Item', [('CSIN', int), # not too DRY... 
                ('name', str), 
                ('price', int), 
                ('quantity', int) 
                ] 
            ) 

loaders = [ItemLoader] 

Voici mon implémentation genre, models.py:

from google.appengine.ext import db 

class Item(db.Model): 
    CSIN = db.IntegerProperty() 
    name = db.StringProperty() 
    price = db.IntegerProperty() # OK that it's an int? 
    quantity = db.IntegerProperty() 

Ce sont essentiellement copié de GAE instructions. Quand je lance appcfg.py, je reçois cette erreur:

ImportError: No module named models 

Qu'est-ce que je fais mal? Si je prends cette déclaration d'importation, je reçois une autre erreur:

... No implementation for kind 'Item' 

MISE À JOUR 1: J'ai essayé de copier/coller directement des instructions de Google, et je reçois la même erreur d'importation.

MISE À JOUR 2: Changé le nom de la mise en œuvre du genre à models.py. Ça ne marche toujours pas. Les deux ItemLoader.py et models.py sont dans le même répertoire.

MISE À JOUR 3: solution hacky: placez-les tous les deux dans le même fichier! Cela fonctionne, mais qu'est-ce que je ne comprends pas sur les importations?

+0

D'où vient cette classe ItemLoader - dans un fichier '.py' dans le même répertoire que' models.py'? De l'erreur, il semblerait que non. –

+0

@Alex Les deux fichiers sont dans le même répertoire (voir ci-dessus). –

+0

et est ce répertoire votre répertoire actuel pendant que vous exécutez appcfg? Sinon, vous devrez modifier le chemin python, comme le suggère la réponse ci-dessous. –

Répondre

1

Vous devez ajouter le répertoire des modèles au PYTHONPATH. De docs:

(which is in your PYTHONPATH, such as the directory where you'll run the tool) 

Si vous ne faites pas cela, python ne trouve pas votre module.

Questions connexes