【问题标题】:Can I configure pydev to automatically compile cython files?我可以配置 pydev 来自动编译 cython 文件吗?
【发布时间】:2012-09-26 18:14:53
【问题描述】:

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

python ./setup.py build_ext --inplace

但是,我经常忘记。我喜欢 Eclipse 在我每次编辑/保存时自动为 Java 构建类文件的方式。是否可以为 PyDev、Eclipse 或其他一些巧妙的方式配置类似的行为?

【问题讨论】:

    标签: eclipse pydev distutils cython


    【解决方案1】:

    目前 PyDev 没有特别支持在 cython 文件发生变化时自动编译它们……如果你愿意,你可以创建一个外部构建器:

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

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

    【讨论】:

    【解决方案2】:

    您可以使用调用pyximport 的基本 PYTHONPATH 中的“魔术”sitecustomize.py 自动获得 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 编辑器就不会抱怨了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多