Python:对导入如何工作的误解

时间:2010-03-02 01:49:25

标签: python google-app-engine import

这是我的装载机类 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 instructions复制的。当我运行appcfg.py时,我收到此错误:

ImportError: No module named models

我做错了什么?如果我拿出那个import语句,我会得到一个不同的错误:

... No implementation for kind 'Item'

更新1:我尝试直接从Google的说明中复制/粘贴,我也遇到了相同的导入错误。

更新2 :将类型实施的名称更改为models.py。仍然无法正常工作。 ItemLoader.pymodels.py都位于同一目录中。

更新3: hacky解决方案:将它们放在同一个文件中!它有效,但我不了解进口产品?

1 个答案:

答案 0 :(得分:1)

您必须将模型目录添加到PYTHONPATH。来自docs:

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

如果你不这样做,python找不到你的模块。