python setup.py install
を実行しているときに、Cython拡張をビルドするためにコンパイラを明示的に強制する方法はありますか? 、私はアナコンダ3.16、Pythonの3.4を使用して、Windows 8.1のx64上のパッケージをインストールしようとしているPythonを実行するときにコンパイラを強制するsetup.py install
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()]
)
、numpyの1.9とCython 0.24を18 setuptoolsの:setup.py
の形式です。デプロイメントスクリプトは、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
はまだ代わりにMSのWindows SDK 7.1 1のcondaに含まれてmingwのコンパイラを使用したことです。
ので
DISTUTILS_USE_SDK=1
とMSSdk=1
はBUIDに影響を与えていないようです。私は、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
@romericしたがって、 'build_ext'はMS VCを期待通りに拡張します(' --force'フラグの有無にかかわらず)。問題は、 'install'を実行するとmingwで再構築されることです。 – rth