Python: недоразумение о том, как работает импорт - PullRequest
2 голосов
/ 02 марта 2010

Вот мой класс загрузчика, ItemLoader.py :

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]

Вот моя любезная реализация, 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()

Они по сути скопированы из GAE инструкции . Когда я запускаю appcfg.py, я получаю эту ошибку:

ImportError: No module named models

Что я делаю не так? Если я возьму это утверждение импорта, я получу другую ошибку:

... No implementation for kind 'Item'

ОБНОВЛЕНИЕ 1: Я попытался скопировать / вставить непосредственно из инструкций Google, и я получил ту же ошибку импорта.

ОБНОВЛЕНИЕ 2: Изменено имя реализации вида на models.py. Все еще не работает. И ItemLoader.py, и models.py находятся в одном каталоге.

ОБНОВЛЕНИЕ 3: хакерское решение: поместите их обоих в один файл! Это работает, но что я не понимаю об импорте?

1 Ответ

1 голос
/ 02 марта 2010

Вы должны добавить каталог моделей в PYTHONPATH. Из документов:

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

Если вы этого не сделаете, python не сможет найти ваш модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...