【问题标题】:Not able to import ZopeTransactionExtension from command line无法从命令行导入 ZopeTransactionExtension
【发布时间】:2013-06-08 04:58:36
【问题描述】:

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

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

【问题讨论】:

  • 如果您使用 virtualenvs,请确保在命令行中使用与运行应用程序相同的 virtualenv。
  • 好吧。我对 python 很满意

标签: sqlalchemy pyramid zope


【解决方案1】:

我最近在金字塔应用程序和终端中都遇到了同样的错误。在这种情况下,重新安装不起作用。显然,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 适用于我正在处理的 Python 2.7 到 3.8 更新。它在现有代码库中比 import register 更具可读性,但我可能会稍后返回并尝试 register
  • 我错了。在此处查看修复:stackoverflow.com/q/64486574/123033
  • 必须使用注册;你不能只是重命名类。需要对 SqlAlchemy 和 Zope.Sqlalchemy 进行一些根本性更改。
  • 谢谢,删除了重命名的建议
【解决方案2】:

这听起来像是混合 pip 和 easy_install(setup.py develop 使用)的问题。当涉及到像zope.* 这样的命名空间包时,它们不能很好地合作。我建议重新创建你的 virtualenv。

【讨论】:

  • 是的。我卸载了 zope.sqlalchemy 并用 pip 再次安装了它。这现在有效。谢谢
  • 只需卸载 zope.sqlalchemy 并使用 pip 重新安装它也可以解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2015-06-02
  • 2015-04-20
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多