visual microsoft python mingw distutils cython

python - microsoft - cython windows



Compilar con cython y mingw produce gcc: error: opción de línea de comando no reconocida ''-mno-cygwin'' (4)

Estoy tratando de compilar una extensión de Python con cython en win 7 de 64 bits usando mingw (64-bit).
Estoy trabajando con Python 2.6 (Active Python 2.6.6) y con el archivo distutils.cfg adecuado (estableciendo mingw como compilador)

Cuando se ejecuta

> C:/Python26/programas/Cython>python setup.py build_ext --inplace

Me sale un error que dice que gcc no tiene una opción -mno-cygwin:

> C:/Python26/programas/Cython>python setup.py build_ext --inplace running build_ext skipping ''hello2.c'' Cython extension (up-to-date) building ''hello2'' extension C:/mingw/bin/gcc.exe -mno-cygwin -mdll -O -Wall -IC:/Python26/include -IC:/Python26/PC -c hello2.c -o build/temp.win-amd64-2.6/Release/hello2.o gcc: error: unrecognized command line option ''-mno-cygwin'' error: command ''gcc'' failed with exit status 1

gcc es:

C:/>gcc --version gcc (GCC) 4.7.0 20110430 (experimental) Copyright (C) 2011 Free Software Foundation, Inc.

¿Cómo podría solucionarlo?


Durante el proceso de resolver estos y los siguientes problemas que encontré, escribí una receta en este hilo . Lo reproduzco aquí en caso de que pueda ser de utilidad para otros:

Receta paso a paso para compilar extensiones de cython de 64 bits con Python 2.6.6 con el compilador mingw en win 7 de 64 bits

Instalar el compilador mingw
1) Instale tdm64-gcc-4.5.2.exe para la compilación de 64 bits

Aplicar el parche a python.h
2) Modifique python.h en C: / python26 / include como se indica en http://bugs.python.org/file12411/mingw-w64.patch

Modificar distutils
Edición 2013: Nota que en python 2.7.6 y 3.3.3 -mno-cygwin ha sido eliminado finalmente para que el paso 3 pueda omitirse .

3) Eliminar todos los parámetros -mno-cygwin desde la llamada a gcc en la clase Mingw32CCompiler en Python26 / Lib / distutils / cygwinccompiler.py
4) En el mismo módulo, modifique get_msvcr () para devolver una lista vacía en lugar de [''msvcr90''] cuando msc_ver == ''1500''.

Produzca el archivo libpython26.a (no incluido en Python de 64 bits)
Edición 2013: los siguientes pasos 5-10 se pueden omitir al descargar e instalar libpython26.a de gohlke .

5) Obtenga gendef.exe de mingw-w64-bin_x86_64- mingw_20101003_sezero.zip (gendef.exe no está disponible en la distribución tmd64. Otra solución es compilar gendef desde la fuente ...)
6) Copie python26.dll (ubicado en C / windows / system32) en el directorio de usuario (C: / Users / myname)
7) Produzca el archivo python26.def con:

gendef.exe C: / Users / myname / python26.dll

8) Mueva el archivo python.def producido (ubicado en la carpeta desde donde se ejecutó gendef) al directorio de usuarios
9) Produzca el libpython.a con:

dlltool -v --dllname python26.dll --def C: / Users / myname / python26.def --output-lib C: / Users / myname / libpython26.a

10) Mueva el libpython26.a creado a C: / Python26 / libs

Produzca su extensión .pyd
11) Cree un archivo de prueba hello.pyx y un archivo setup.py como se indica en el tutorial de cython ( http://docs.cython.org/src/quickstart/build.html )
12) Compilar con

python setup.py build_ext --inplace

¡Hecho!



Parece que GCC 4.7.0 finalmente ha eliminado la -mno-cygwin obsoleta -mno-cygwin , pero distutils aún no se ha puesto al día con ella. Instale una versión ligeramente anterior de MinGW o edite distutils/cygwinccompiler.py en su directorio de Python para eliminar todas las instancias de -mno-cygwin .