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

Posted

技术标签:

【中文标题】在zc.buildout中,如何安装egg A,然后安装需要egg A才能正确安装的egg B?【英文标题】:In zc.buildout, how do I install egg A, then install egg B which needs egg A to install correctly? 【发布时间】:2012-02-25 01:13:00 【问题描述】:

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

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

    安装 Cython 将 Cython 加载到构建中 安装 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 是作为鸡蛋安装的,但没有加载到正在运行 buildout 的 python 进程中。 buildout 中是否有一些配置可以让我这样做?

【问题讨论】:

【参考方案1】:

pymssql 包已经将Cython egg 声明为setup_requires 依赖项,但没有给distutils 时间来安装它。仅仅在setup_requires 中列出它们,但仍然尝试在模块范围内导入它们(就像pymssql 所做的那样)是不够的。

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

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

【讨论】:

感谢您的回答,这有助于我更好地了解实际情况!我想我将只包含一个预编译的 pymssql 并处理它的问题。

以上是关于在zc.buildout中,如何安装egg A,然后安装需要egg A才能正确安装的egg B?的主要内容,如果未能解决你的问题,请参考以下文章

zc.buildout构建项目时报错‘AttributeError: '_NamespacePath' object has no attribute 'sort'’(

buildout 和 setuptools 要求

Python 构建工具 buildout 的介绍与使用

安装 xadmin 报错: Command "python setup.py egg_info" failed with error code 1 in C:UsersPyth(示

npm:egg-oss安装与使用

egg参数校验