0

在 ajax.py 中,我有这个 import 语句:

import components.db_init as db

在 components/db_init.py 中,我有这个导入语句:

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

在 components/storm/locals.py 中,它有这个:

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

所以,当我在 ajax.py 中运行 import 语句时,我得到了这个错误:

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

我可以毫无例外地运行 components/db_init.py ......所以我不知道发生了什么。

有人可以阐明这个问题吗?

4

2 回答 2

2

我猜想storm.locals它的包名的想法与你认为的不同(很可能它认为它在 中components.storm.locals)。我相信,您可以通过__name__在顶部打印来检查这一点。storm.locals如果您使用与当前包无关的导入,则包名称必须匹配。

在这里使用相对导入可能会起作用。因为localsproperties都在同一个包中,所以在里面storm.locals你应该能够做到

from properties import Bool

等等。

于 2009-07-17T21:41:32.640 回答
1

你要么需要

  • 将 (...)/components/storm 添加到 PYTHONPATH,
  • 在 components/storm/locals.py 中使用相对导入或
  • 导入属性而不是storm.properties
于 2009-07-17T21:44:38.377 回答