Могу ли я настроить pydev для автоматической компиляции файлов cython? - PullRequest
5 голосов
/ 28 ноября 2011

Я просто забираю Cython.Я использую его для создания базовой библиотеки в моем проекте Python.В настоящее время я настроил файл setup.py с distutils и запускаю следующую команду всякий раз, когда я хочу перекомпилировать файл Cython:

python ./setup.py build_ext --inplace

Однако я часто забываю.Мне нравится, как Eclipse автоматически создает файлы классов для Java каждый раз, когда я редактирую / сохраняю.Можно ли настроить подобное поведение для PyDev, Eclipse или каким-либо другим умным способом?

Ответы [ 2 ]

5 голосов
/ 29 ноября 2011

На данный момент в PyDev нет специальной поддержки для автоматической компиляции файлов Cython при их изменении ... если вы хотите, вы можете создать внешний компоновщик:

Щелкните правой кнопкой мыши проект> свойства> строители> новая> программа, затем настройте программу как python, имеющую в качестве параметра модуль для запуска и получающий в качестве аргументов также переменную $ {build_files}.

Вы, вероятно, должны проверить, является ли какой-то измененный файл файлом .pyx, и если это так, вызвать фактическую команду сборки для этого файла - и, возможно, зависимости.

1 голос
/ 26 сентября 2012

Вы можете автоматически получить компиляцию Cython, используя «магию» sitecustomize.py в вашей базовой PYTHONPATH, которая вызывает pyximport , даже если для этого требуются некоторые подробности установки (например, под 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

В качестве примечания, если вы находитесь под окнами, имейте в виду, что ваш цитон должен быть слегка изменен , чтобы использовать mingw.

Вам также следует назвать ваши файлы * .pyx, чтобы это работало. Еще один совет: вы должны использовать «чистый питон» синтаксис cython , чтобы редактор Pydev не жаловался.

...