Esiste un modo per forzare esplicitamente il compilatore per la creazione di estensioni Cython quando si esegue python setup.py install
? Dove setup.py
è della forma:Compilatore forzato quando si esegue 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()]
)
Sto cercando di installare un pacchetto su Windows 8.1 x64 utilizzando Anaconda 3.16, Python 3.4, setuptools 18, Numpy 1,9 e Cython 0,24. Lo script di distribuzione viene adattato dalla risposta di Overflow dello stack di Cython wiki e this.
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
Il problema è che in questo caso setup.py install
ancora in uso il compilatore MinGW incluso con conda invece del MS Windows SDK 7.1 uno.
Così il
DISTUTILS_USE_SDK=1
eMSSdk=1
non sembrano avere un impatto sulla buid. Non sono sicuro che l'attivazione dell'SDK di MS all'interno di una conda virtualenv potrebbe essere un problema qui.L'esecuzione di
python setup.py build_ext --compiler=msvc
crea correttamente l'estensione con il compilatore MS, ma successivamente esegue lo , ricompilandolo nuovamente con mingw. Lo stesso vale perpython setup.py build --compiler=msvc
.Anche provato a funzionare
%COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd"
come discusso nella risposta collegata sopra, ma per me questo produce un nuovo prompt del terminale, colorato in giallo, e interrompe il processo di installazione.
C'è un modo di forzare il compilatore per la costruzione di questo pacchetto, per esempio, modificando il setup.py
?
Provare a utilizzare 'python setup.py build_ext --compiler = msvc --force' per forzare il compilatore a compilare/ricostruire il pacchetto e vedere cosa succede. – romeric
@romeric Quindi 'build_ext' crea l'estensione con MS VC come previsto (sia con che senza il flag' --force'). Il problema è che quando eseguo l'installazione, viene ricostruito con mingw. – rth