【发布时间】:2016-01-24 17:09:39
【问题描述】:
有没有办法在运行python setup.py install 时显式强制编译器构建 Cython 扩展?其中setup.py 的形式为:
import os.path
import numpy as np
from setuptools import setup, find_packages, Extension
from Cython.Distutils import build_ext
setup(name='test',
packages=find_packages(),
cmdclass={'build_ext': build_ext},
ext_modules = [ Extension("test.func", ["test/func.pyx"]) ],
include_dirs=[np.get_include()]
)
我正在尝试使用 Anaconda 3.16、Python 3.4、setuptools 18、Numpy 1.9 和 Cython 0.24 在 Windows 8.1 x64 上安装软件包。部署脚本改编自 Cython wiki 和 this Stack Overflow 答案。
Makefile.bat
:: create and activate a virtual environement with conda
conda create --yes -n test_env cython setuptools=18 pywin32 libpython numpy=1.9 python=3
call activate test_env
:: activate the MS SDK compiler as explained in the Cython wiki
cd C:\Program Files\Microsoft SDKs\Windows\v7.1\
set MSSdk=1
set DISTUTILS_USE_SDK=1
@call .\Bin\SetEnv /x64 /release
cd C:\test
python setup.py install
问题在于,在这种情况下,setup.py install 仍然使用 conda 附带的 mingw 编译器,而不是 MS Windows SDK 7.1。
所以
DISTUTILS_USE_SDK=1和MSSdk=1似乎对构建没有影响。我不确定从 conda virtualenv 中激活 MS SDK 是否是个问题。运行
python setup.py build_ext --compiler=msvc可以使用 MS 编译器正确构建扩展,但随后运行setup.py install会再次使用 mingw 重新编译它。同样适用于python setup.py build --compiler=msvc。还尝试运行
%COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd",如上面链接的答案中所述,但对我来说,这会产生一个新的终端提示,以黄色着色,并停止安装过程。
有没有办法强制编译器构建这个包,例如,通过编辑setup.py?
【问题讨论】:
-
尝试使用
python setup.py build_ext --compiler=msvc --force强制编译器构建/重建包,看看会发生什么。 -
@romeric 所以
build_ext按预期使用MS VC 构建扩展(有和没有--force标志)。问题是当我运行install时,它会用 mingw 重建。
标签: python cython setuptools anaconda