2011-11-28 11 views
5

Recién estoy recogiendo Cython. Lo estoy usando para construir una biblioteca central en mi proyecto de Python. Actualmente He configurado un archivo setup.py con distutils y estoy ejecutando el siguiente comando cuando quiera volver a compilar el archivo Cython:¿Puedo configurar pydev para compilar automáticamente archivos cython?

python ./setup.py build_ext --inplace 

Sin embargo, a menudo se olvide. Me gusta cómo Eclipse construye automáticamente archivos de clase para Java cada vez que edito/guardo. ¿Es posible configurar un comportamiento similar para PyDev, Eclipse o alguna otra forma inteligente?

Respuesta

5

Por ahora no hay un apoyo especial en PyDev para compilar automáticamente Cython archivos cuando cambian ... si lo desea, puede crear un constructor externo:

derecho proyecto presione> propiedades> constructores> nueva> programa, a continuación, configure el programa como python teniendo como parámetro el módulo a ejecutar y recibiendo como argumentos también la variable $ {build_files}.

Probablemente deberías comprobar si algún archivo modificado es un archivo .pyx y, en caso afirmativo, llama al comando de compilación real para ese archivo, y tal vez dependencias.

+0

Aunque hay soporte para cython http://pydev.blogspot.com/2011/10/pydev-cython.html – fabrizioM

1

Puede obtener automáticamente Cython compilar usando una "mágica" sitecustomize.py en su PYTHONPATH base que llama pyximport, incluso si requiere algunos detalles de la instalación (como, bajo las ventanas, su ubicación MinGW), aquí es un ejemplo:

import pyximport 
import os 
import numpy 
#import cython 
import Cython.Compiler.Options as Options 
Options.cimport_from_pyx = True 

if os.name == 'nt': 
    if os.environ.has_key('CPATH'): 
     os.environ['CPATH'] = os.environ['CPATH'] + numpy.get_include() 
    else: 
     os.environ['CPATH'] = numpy.get_include() 

    # XXX: we're assuming that MinGW is installed in C:\MinGW (default) 
    if os.environ.has_key('PATH'): 
     os.environ['PATH'] = os.environ['PATH'] + ';C:\MinGW\bin' 
    else: 
     os.environ['PATH'] = 'C:\MinGW\bin' 

    mingw_setup_args = { 'options': { 'build_ext': { 'compiler': 'mingw32' } } } 
    pyximport.install(setup_args=mingw_setup_args) 
elif os.name == 'posix': 
    if os.environ.has_key('CFLAGS'): 
     os.environ['CFLAGS'] = os.environ['CFLAGS'] + ' -I' + numpy.get_include() 
    else: 
     os.environ['CFLAGS'] = ' -I' + numpy.get_include() 

    pyximport.install() 

pyximport.DEBUG_IMPORT = True 

Como nota al margen, si está en Windows, tenga en cuenta que su cython debe ser slightly modified para usar mingw.

También debe llamar a sus archivos * .pyx para que esto funcione. Otro consejo: debe usar el cython "python puro" syntax para que el editor de Pydev no se queje.

Cuestiones relacionadas