具体来说,这就是我遇到的情况:
我使用zc.buildout来安装需要pymssql的应用程序。 Pymssql需要Cython才能正确安装。但是,我不想修改我的运行环境,所以我想做一些像:
我认为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进程中。在buildout中是否有一些配置允许我这样做?
答案 0 :(得分:2)
pymssql
包alreade将Cython
egg声明为setup_requires
依赖项,但不会给distutils
时间安装它。只需在setup_requires
中列出它们但仍尝试在模块范围内导入它们(如pymssql
那样)是不够的。
必须重新构造setup.py
模块,以便在解析Cython
行并且其中列出的依赖项可用之前不导入setup_requires
依赖项。基本上,它需要定义它自己的build_cmd
类,在实例化时,导入Cython
依赖项并在那时包装该类,而不是之前。
可能您可以创建一个自定义构建配方,使用Cython
作为依赖项,然后可以在buildout执行您的配方时安装pymssql
依赖项和Cython
。但这是pymssql
应该处理的伤口上的膏药,真的。