write seqio read descargar bio python cython setuptools anaconda

seqio - Forzar compilador cuando se ejecuta python setup.py install



read fasta python (3)

Bueno, encontré un truco en mi caso: quería usar MSVC14.0 (de buildtools 2015) y NO MSVC14.1 (buildtools 2017). Edité el archivo Lib / distutils_msvccompiler.py. Hay un metodo

_find_vcvarsall

que está llamando

best_version, best_dir = _find_vc2017()

Repuse esta llamada por

best_version, best_dir = _find_vc2015()

No olvides deshacer este truco sucio una vez compilado.

¿Hay alguna forma de forzar explícitamente el compilador para compilar extensiones de Cython cuando se ejecuta la instalación de python setup.py install ? Donde setup.py es de la forma:

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()] )

Estoy intentando instalar un paquete en Windows 8.1 x64 con Anaconda 3.16, Python 3.4, setuptools 18, Numpy 1.9 y Cython 0.24. El script de implementación se adapta de la wiki Cython y this respuesta de desbordamiento de pila.

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

El problema es que en este caso setup.py install todavía usó el compilador mingw incluido con conda en lugar del MS Windows SDK 7.1 uno.

  • Por lo tanto, DISTUTILS_USE_SDK=1 y MSSdk=1 no parecen tener un impacto en el buid. No estoy seguro de que la activación del MS SDK desde un conda virtualenv pueda ser un problema aquí.

  • La ejecución de python setup.py build_ext --compiler=msvc crea correctamente la extensión con el compilador de MS, pero posteriormente ejecuta la setup.py install , la vuelve a compilar con mingw. Lo mismo se aplica a python setup.py build --compiler=msvc .

  • También intenté ejecutar %COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%/Microsoft SDKs/Windows/v7.1/Bin/SetEnv.cmd" como se %COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%/Microsoft SDKs/Windows/v7.1/Bin/SetEnv.cmd" en la respuesta vinculada anteriormente, pero para mí esto produce un Un nuevo indicador de terminal, de color amarillo, y detiene el proceso de instalación.

¿Hay alguna forma de forzar al compilador a construir este paquete, por ejemplo, editando el setup.py ?


Como observación: en Linux, puede utilizar muchas de las variables de entorno de autoconf. Para el compilador

CC=mpicc python setup.py build_ext -i


Puede proporcionar (predeterminados) argumentos de línea de comando para los nombres de archivo en un archivo separado llamado setup.cfg (colocado en paralelo a su setup.py ). Consulte la docs para obtener más información. Para configurar el compilador usa algo como:

[build] compiler=msvc

Ahora, llamar a python setup.py build es equivalente a llamar a python setup.py build --compiler=msvc . (Aún puede indicar a los destinatarios el uso de otro compilador llamando a python setup.py build --compiler=someothercompiler )

Ahora tiene (dirigió correctamente los nombres de usuario para usar un compilador msvc. Desafortunadamente, no hay ninguna opción para decirle qué compilador msvc debe usar. Básicamente hay dos opciones:

Uno: no hacer nada y los distritos intentarán localizar vcvarsall.bat y usarlo para configurar un entorno. vcvarsall.bat (y el compilador para el que configura el entorno) son parte de Visual Studio, por lo que debe tener instalado eso para que funcione.

Dos: instala el SDK de Windows y dile a los distritos que usen eso. Tenga en cuenta que el nombre DISUTILS_USE_SDK es más bien engañoso (al menos en mi opinión). De hecho, NO le dice a distutils que use el SDK (y es setenv.bat ) para configurar un entorno, sino que significa que distutils debe asumir que el entorno ya se ha configurado. Es por eso que tiene que usar algún tipo de Makefile.bat como se muestra en el OP.

Nota al margen: la versión específica de VisualStudio o el SDK de Windows depende de la versión de Python específica.