我在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支持的工作。
答案 0 :(得分:1)
这是一个老问题,但我昨天遇到了类似的问题。我的解决方案是在setup.py中建立一个切换,将LIBRARY_INC
和LIBRARY_LIB
路径添加到distutils的include_dirs
和library_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)