web-dev-qa-db-fra.com

Appeler Python depuis Ruby

J'ai une bibliothèque Python compilée et des documents API que j'aimerais utiliser à partir de Ruby.

Est-il possible de charger une bibliothèque Python, d'instancier une classe qui y est définie et d'appeler des méthodes sur cet objet à partir de Ruby?

27
Bryan Ash

Cet article donne quelques techniques pour exécuter du code Ruby à partir de Python qui devraient également être applicables en sens inverse (telles que XML-RPC ou des tubes), ainsi que des techniques spécifiques pour exécuter du code Python à partir de Ruby. En particulier rubypython ou Ruby/Python , on dirait qu'ils peuvent faire ce que vous voulez.

14
kindall

Il semble que vous souhaitiez utiliser Apache Thrift, qui permet à votre code Python ou Ruby d’être un serveur/client et de s’appeler. http://thrift.Apache.org/

Vous pouvez instancier vos objets en Ruby et en Python en fonction de votre définition d'économie. Ceci est un exemple tiré du site Web d'épargne.

struct UserProfile {
    1: i32 uid,
    2: string name,
    3: string blurb
  }
  service UserStorage {
    void store(1: UserProfile user),
    UserProfile retrieve(1: i32 uid)
  }

En gros, votre Ruby ou votre python pourra appeler store() et retrieve() et créer des objets UserProfile, etc.

5
Martin

Cette petite bibliothèque facilite grandement cette tâche: https://github.com/steeve/rupy

4
postfuturist

Même si vous pouvez faire ce travail, vous voudrez peut-être examiner si c'est le meilleur choix architectural. Vous pourriez rencontrer toutes sortes de versions de contrôle de version essayant de maintenir une telle bête.

Si vous ne pouvez vraiment pas trouver une bibliothèque Ruby équivalente (ou si vous souhaitez exploiter un investissement important dans Python), envisagez d'utiliser une file d'attente (telle que RabbitMQ) pour implémenter une conception de transmission de message. Ensuite, vous pouvez conserver vos bits Python Python et Ruby bits Ruby sans essayer de maintenir un environnement de construction Frankenstein.

2
Joshua

Êtes-vous sur Windows? Pourriez-vous créer un objet DLL ou COM à partir de votre bibliothèque python et l'appeler avec Ruby's Win32Api ou Win32Ole ?

0
AShelly