Question

Je viens de découvrir http://code.google.com/p/re2 , un bibliothèque prometteuse qui utilise un moyen négligé depuis longtemps ( Thompson NFA ) pour mettre en œuvre une expression régulière moteur qui peut être des ordres de grandeur plus rapide que les moteurs disponibles awk, Perl ou Python.

donc je téléchargé le code et fait la chose habituelle sudo make install. Cependant, cette action avait apparemment fait un peu plus que d'ajouter /usr/local/include/re2/re2.h à mon système. il semble y avoir un `` ` .afile in addition, but then what is it with this .a`` l'extension?

je voudrais utiliser RE2 de Python (Python 3.1 de préférence) et a été très heureux de voir les fichiers comme make_unicode_groups.py dans la distro (peut-être juste utilisés au cours du processus de construction?). ceux mais n'ont pas été déployés sur ma machine.

Comment puis-je utiliser RE2 de Python?


mise à jour deux personnes sympathiques ont fait remarquer que je pourrais essayer de construire des DLL / * .so fichiers à partir des sources, puis utiliser la bibliothèque de ctypes de Python pour accéder à ceux-ci. quelqu'un peut-il donner des indications utiles comment faire cela? Je suis à peu près aucune idée ici, surtout avec la première partie (la construction des * .so fichiers).


mise à jour J'ai posté cette question (plus tôt) au RE2 groupe de développeurs , sans réponse jusqu'à présent (il est un petit groupe), et aujourd'hui à la (un peu plus peuplé) comp.lang.py groupe

Autres conseils

Possible oui, non facile. En regardant le re2.h, ceci est une bibliothèque C ++ exposée en tant que classe. Il y a deux façons dont vous pouvez l'utiliser à partir de Python.

1.) Comme le dit Tuomas, compiler comme une DLL / et donc utiliser ctypes. Pour l'utiliser de python, cependant, vous devez envelopper le init objet et les méthodes dans le style c fonctions externed. Je l'ai fait dans le passé avec ctypes par externing fonctions qui passent un pointeur vers l'objet autour. La fonction « init » renvoie un pointeur vide à l'objet qui est passé sur chaque appel de méthode suivante. Très bien en désordre.

2.) Enveloppez dans un véritable module python. Encore une fois les fonctions exposées à python auraient besoin d'être extern « C ». Une option consiste à utiliser Boost.Python , qui faciliteraient ce travail.

SWIG poignées C ++ (contrairement ctypes), il peut être plus facile à utiliser.

Vous pouvez essayer de construire RE2 dans sa propre DLL / et donc utiliser ctypes pour appeler des fonctions de cette DLL / ainsi. Vous aurez probablement besoin de définir vos propres points d'entrée dans la DLL / ainsi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top