я просто обнаружил http://code.google.com/p/re2, многообещающая библиотека, которая использует долго пропущенный путь (Thompson NFA) для реализации механизма регулярного выражения, который может быть заказами величин быстрее, чем доступные механизмы awk, Perl или Python.
таким образом, я загрузил код и сделал обычное sudo make install
вещь. однако, то действие по-видимому сделало немного больше, чем добавление /usr/local/include/re2/re2.h
к моей системе. казалось, были некоторые' ''.afile in addition, but then what is it with this
.a'' расширение?
я хотел бы использовать re2 из Python (предпочтительно Python 3.1) и был счастлив видеть файлы как make_unicode_groups.py
в дистрибутиве (возможно, просто используемый во время процесса сборки?). они однако не были развернуты на моей машине.
как я могу использовать re2 из Python?
обновите двух дружелюбных людей, указали, что я мог попытаться создать DLLs / *.so файлы из источников и затем использовать Python ctypes
библиотека для доступа к ним. кто-либо может дать полезные подсказки, как сделать просто это? я в значительной степени невежествен здесь, особенно с первой частью (создающий *.so файлы).
обновление я также отправил этот вопрос (ранее) группе re2 разработчиков без ответа до настоящего времени (это - небольшая группа), и сегодня (несколько более густонаселенной) comp.lang.py группе [— потоку здесь —]. надежда состоит в том, что люди от различных углов могут связаться друг с другом. мое предположение является квалифицированным человеком, может сделать это через несколько часов во время их 20% your-free-time-belongs-google-too интервал; это связывало бы меня в течение многих недель. существует ли инструмент к автоматически немому вниз C++ к любой разновидности C, который Python должен смочь соединить? затем, возможно, получение жизнеспособного результата может быть уменьшено до умного объединения в цепочку инструмента.
(напыщенная речь), почему это настолько трудно? чтобы думать, что в 2010 у нас все еще не может быть наших богатых частей программного обеспечения просто, говорят друг с другом. это - такой контрольно-пропускной пункт, что каждый раз, когда Вы хотите обратиться к некоторому коду C из Python, Вы всегда должны хлам эти биты соединения. это требует большой работы, но только поставляет дополнительный модуль, который характерен для версии кода C и версии Python, таким образом, это стареет быстро. (/rant), был бы это быть возможным работать, такие вещи в отдельных процессах (скажите, был ли у меня re2 исполняемый файл, который может привести к результатам для данных, которые входят на, скажем, subprocess/Popen/communicate()
)? (это не должно быть чистым инструментом командной строки, который требует открытия процесса каждый раз, когда оно необходимо, но единственный процесс, который работает непрерывно; возможно, там существуйте обертки такой 'демонизировать' такой код C).
Дэвид Рейсс создал оболочку Python для re2. Он не обладает всеми функциями модуля Python re, но это только начало. Он доступен здесь: http://github.com/facebook/pyre2 .
Вы можете попробовать встроить re2 в его собственную DLL / so и использовать ctypes для вызова функций из этой DLL / so. Возможно, вам потребуется определить свои собственные точки входа в DLL / so.
SWIG работает с C++ (в отличие от ctypes), поэтому может быть более просто использовать его.
Возможно да, легко нет. Если посмотреть на re2.h, то это библиотека C++, представленная в виде класса. Есть два способа использовать ее из Python.
1.) Как говорит Туомас, скомпилировать ее как DLL/so и использовать ctypes. Однако, чтобы использовать его из python, вам придется обернуть инициализацию объекта и методы в внешние функции в стиле c. Я уже делал это в прошлом с ctypes, обернув функции, передающие указатель на объект. Функция "init" возвращает указатель void на объект, который передается при каждом последующем вызове метода. Действительно, очень муторно.
2.) Завернуть его в настоящий модуль python. Опять же, функции, открытые для python, должны быть extern "C". Один из вариантов - использовать Boost.Python, что облегчит эту работу.