python - 在zc.buildout中,如何安装egg A,然后安装egg B,而egg B需要egg A才能正确安装?

标签 python cython buildout pymssql

具体来说,这是我遇到的情况:

我正在使用 zc.buildout 安装需要 pymssql 的应用程序。 Pymssql 需要 Cython 才能正确安装。但是,我不想修改我的运行环境,所以我想做这样的事情:

  1. 安装 Cython
  2. 将 Cython 加载到构建中
  3. 安装 Pymssql。

我认为 Buildout 已经做到了这一点,但它看起来更像是检查 setup.cfg 以确保安装了明确声明为必要的任何内容。目前我的构建如下:

[buildout]
  parts = required-eggs
  ...

[required-eggs]
  eggs = Cython
         pymssql

Cython 安装正常。不幸的是 pymssql 没有:

    return self.build_and_install(setup_script, setup_base)
  File "/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 1101, in build_and_install
self.run_setup(setup_script, setup_base, args)
  File "/usr/lib/python2.7/dist-packages/setuptools/command/easy_install.py", line 1090,  in run_setup
run_setup(setup_script, args)
  File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 29, in run_setup
lambda: execfile(
  File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 70, in run
return func()
  File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 31, in <lambda>
{'__file__':setup_script, '__name__':'__main__'}
  File "setup.py", line 41, in <module>
ImportError: No module named Cython.Distutils

因此,我认为 Cython 是作为 Egg 安装的,但没有加载到正在运行 buildout 的 python 进程中。构建中是否有一些配置允许我执行此操作?

最佳答案

pymssql 包已将 Cython Egg 声明为 setup_requires 依赖项,但没有提供 distutils是时候安装它了。简单地在 setup_requires 中列出它们,但仍然尝试在模块范围内导入它们(如 pymssql 所做的那样)是不够的。

必须重构 setup.py 模块,以便在解析 setup_requires 行并解析依赖项之前不导入 Cython 依赖项那里列出的已经可用。基本上,它需要定义自己的 build_cmd 类,在实例化时,导入 Cython 依赖项并在当时(而不是之前)包装该类。

您可能可以创建一个使用 Cython 作为依赖项的自定义构建配方,然后可以使用 Cython 安装 pymssql 依赖项由 buildout 在执行您的配方时安装,但这确实是 pymssql 应该处理的伤口上的膏药。

关于python - 在zc.buildout中,如何安装egg A,然后安装egg B,而egg B需要egg A才能正确安装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9440223/

相关文章:

python - 句子中最常见的单词按类别分组

python - BBC Micro Bit 卡在代码上

mercurial - 是否保留我自己的版本化应用程序

python - 一种将 C++ 对象传递给 cython 中另一个对象的方法的方法

python - 在 zc.buildout 中生成 IPython 脚本

python - Buildout 是否支持 extends 选项中的值替换?

python - 压缩稀疏列矩阵的并行构造

python - 仅选择日期和年份 SQLite

c++ - Cython 和类的构造函数

python - 使用 Cython 包装 C++ 模板以接受任何 numpy 数组