具体来说,这是我遇到的情况:
我正在使用 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 是作为 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/