我可以配置pydev来自动编译cython文件吗?

时间:2011-11-28 00:10:38

标签: eclipse pydev distutils cython

我只是选择了Cython。我正在使用它在我的Python项目中构建一个核心库。目前我已经使用setup.py配置了distutils文件,并且每当我想重新编译Cython文件时,我都会运行以下命令:

python ./setup.py build_ext --inplace

然而,我经常忘记。我喜欢Eclipse每次编辑/保存时如何自动为Java构建类文件。是否可以为PyDev,Eclipse或其他一些聪明的方法配置类似的行为?

2 个答案:

答案 0 :(得分:5)

目前在PyDev中没有特别支持在他们改变时自动编译cython文件...如果你想要你可以创建一个外部构建器:

右键单击项目>属性>建设者>新>程序,然后将程序配置为python,作为参数运行和接收作为参数的模块$ {build_files}变量。

您应该检查一些更改的文件是否是.pyx文件,如果是,请调用该文件的实际构建命令 - 也许是依赖项。

答案 1 :(得分:1)

你可以使用调用sitecustomize.py的基础PYTHONPATH中的“魔法”pyximport自动获取cython编译,即使它需要一些安装细节(例如,在windows下,你的mingw位置),这是一个例子:

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

作为旁注,如果你在windows下,请记住你的cython必须slightly modified才能使用mingw。

你也应该调用你的文件* .pyx来实现这个目的。另一个建议是:你应该使用cython“pure python”syntax,以便Pydev编辑器不会抱怨。