Skip to main content
 首页 » 编程设计

Python:对导入工作原理的误解

2025年05月04日13飞鱼

这是我的加载器类,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.py 和 models.py 都在同一目录中。

更新 3: hacky 解决方案:将它们放在同一个文件中!它有效,但我对导入有什么不了解?

请您参考如下方法:

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

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

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