无法从conda环境构建cython代码

时间:2014-08-13 11:56:09

标签: python cython anaconda

我在Windows中使用anaconda。我的根环境有python 2.7,另一个名为py34的环境有python 3.4。 我是cython的新手,尝试用于需要与C链接的项目。我可以成功构建并运行cython示例 root环境,但无法使用py34构建相同的示例。

当我从root环境中执行此操作时,它可以正常工作:

C:\ETC\py34>python setup.py build_ext --inplace
Compiling hello.pyx because it changed.
Cythonizing hello.pyx
running build_ext
building 'hello' extension
c:\Anaconda\Scripts\gcc.bat -DMS_WIN64 -mdll -O -Wall -Ic:\Anaconda\include -Ic:\Anaconda\PC -c hello.c -o build\temp.wi
n-amd64-2.7\Release\hello.o
writing build\temp.win-amd64-2.7\Release\hello.def
c:\Anaconda\Scripts\gcc.bat -DMS_WIN64 -shared -s build\temp.win-amd64-2.7\Release\hello.o build\temp.win-amd64-2.7\Rele
ase\hello.def -Lc:\Anaconda\libs -Lc:\Anaconda\PCbuild\amd64 -lpython27 -lmsvcr90 -o C:\ETC\py34\hello.pyd

但是从python 3.4环境中它失败了:

[py34] C:\ETC\py34>python setup.py build_ext --inplace
running build_ext
error: [WinError 2] El sistema no puede encontrar el archivo especificado

看起来"激活py34" 无法正确设置所有路径以便cython正常工作。

请帮助。

更新:问题似乎与python 3.4有关,而不是它是一个conda环境。我用python 3.3创建了一个新的py33环境,它运行正常。对我来说这个解决方案已经足够好了,我希望我的项目支持python 3.xx.支持3.4可以等待。可能正在进行修复python 3.4的cython支持的工作。

1 个答案:

答案 0 :(得分:1)

这是一个老问题,但我昨天遇到了类似的问题。我的解决方案是在setup.py中建立一个切换,将LIBRARY_INCLIBRARY_LIB路径添加到distutils的include_dirslibrary_dirs

import platform
from distutils.core import setup, Extension

if platform.system() == 'Windows':
    try:
        include_dirs = [os.environ['LIBRARY_INC']]
    except KeyError:
        include_dirs = []
    try:
        library_dirs = [os.environ['LIBRARY_LIB']]
    except KeyError:
        library_dirs = []

...
setup(ext_modules=[
        Extension(...
                include_dirs=include_dirs,
                libraries=...,
                library_dirs=library_dirs)