无法从命令行导入ZopeTransactionExtension

时间:2013-06-12 06:58:53

标签: sqlalchemy pyramid zope

我有一个金字塔应用程序,它有这一行

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,它似乎对他们起作用至少

2 个答案:

答案 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