我有一个金字塔应用程序,它有这一行
from zope.sqlalchemy import ZopeTransactionExtension
它没有任何问题
但是如果我用命令行尝试相同的话我会得到
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named sqlalchemy
和
from zope.sqlalchemy.datamanager import ZopeTransactionExtension
ImportError: No module named sqlalchemy.datamanager
我不确定为什么会这样。文档有same line,它似乎对他们起作用至少
答案 0 :(得分:3)
这听起来像是混合pip和easy_install(setup.py develop
使用的)的问题。当涉及像zope.*
这样的命名空间包时,它们不能很好地协作。我建议重新创建你的virtualenv。
答案 1 :(得分:3)
我最近在金字塔应用程序和终端中都遇到了相同的错误。在这种情况下,重新安装无效。显然,zope.sqlalchemy项目在2019年10月17日发布的1.2版中将ZopeTransactionExtension重命名为ZopeTransactionEvents。
为了使情况更清楚,我们将ZopeTransactionExtension类重命名为 到ZopeTransactionEvents。使用“注册”版本的现有代码 保持兼容。
https://pypi.org/project/zope.sqlalchemy/在更改1.2下
解决方案是在实例化DBSession时使用register
from zope.sqlalchemy import register
DBSession = scoped_session(sessionmaker(autoflush=False))
register(DBSession)
根据https://github.com/zopefoundation/zope.sqlalchemy/issues/37
或将ZopeTransactionExtension
重命名为ZopeTransactionEvents
。