Quali sono alcuni metodi alternativi a IronPython per chiamare il codice Python da .NET?

2

Ci sono alcune grandi librerie per Python che hanno cugini nel mondo .NET, ma alcune sono ineguagliate.

Comprendendo che Python è un linguaggio dinamico, che rende difficile il mix con un linguaggio (in gran parte) tipizzato staticamente come C # (sebbene questo sia apparentemente più facile con .NET 4.0), ci sono opzioni come IronPython che possono aiutare a combaciare le due lingue.

Non ho mai trovato nessuna altra opzione per le librerie Python a coda di rondine con .NET. Ci sono altri modi per farlo che sono provati e veri? Ho molta meno esperienza con Python, quindi è del tutto possibile che sto trascurando qualcosa.

    
posta jonsca 24.10.2011 - 04:32
fonte

5 risposte

3

Se il tuo caso d'uso non dipende dalla velocità puoi usare cose come .net remoting e servizi XML per consentire a piattaforme / lingue / ambienti differenti di parlare tra loro (questo è l'approccio utilizzato da Robot Framework RemoteLibrary per esempio).

Un'altra opzione è avere un archivio dati comune dietro entrambe le lingue (tipicamente un database).

    
risposta data 24.10.2011 - 09:51
fonte
5

Non sto dicendo che raccomando questo approccio, ma nello spirito di completezza, puoi usare COM per invocare Python da .NET o viceversa. Non ho mai usato COM con Python ma a quanto pare è possibile .

    
risposta data 24.10.2011 - 13:31
fonte
4

IronPython prova l'approccio di integrazione totale. Esiste un pacchetto chiamato Python.NET che è un ibrido del CLR e del runtime Python standard basato su C. Sembra meno sviluppato di IronPython e non sono sicuro che sia abbastanza ".NET". Tuttavia, darebbe accesso diretto alle librerie Python.

    
risposta data 24.10.2011 - 04:36
fonte
3

La nostra applicazione esegue il shelling per eseguire python. Dovevamo farlo invece di usare IronPython perché un certo numero di librerie di base sono compilate da C. Un semplice test per determinare cosa devi fare è analizza un file CSV .

    
risposta data 24.10.2011 - 06:52
fonte
2

Stiamo usando Python.Net per chiamare il codice CLR da Python e vice vera. Funziona piuttosto bene, ma ha alcuni inconvenienti, principalmente che scrivere codice CLR in Python è ... strano (questo vale anche per l'altro modo).

Quindi lo utilizziamo principalmente come interfaccia: abbiamo metodi di alto livello che possono essere chiamati e quali strutture di dati definite restituite - cerchiamo di evitare di creare un programma python completo nel codice C #. Ciò ha anche vantaggi in termini di testabillity.

Si noti che Python.Net viene aggiornato solo lentamente, il che può essere un problema se si desidera utilizzare la versione python più recente e più calda. D'altra parte: puoi usare TUTTI python, non solo il sottoinsieme IronPython.

Un'ultima parola di avvertimento: se chiami il codice CLR da Python prova ad evitare di passare gli oggetti CLR più in profondità nel tuo programma python - mentre Python.Net è una buona pubblicità che allontana alcune differenze, altre differenze arriveranno a morderti , come cercare di decapitare / annullare un oggetto CLR. Abbiamo trovato che scrivere un codice di conversione aiuta davvero a mitigare tali problemi. Avviso 2: Esistono alcune eccezioni .Net che possono rallentare il processo Python. Se osservi arresti anomali, dai un'occhiata al gestore globale delle eccezioni .Net. Questo non è colpa né di python né di clr - solo che entrambi hanno idee leggermente diverse su come alcuni dovrebbero essere gestiti.

Ultimo ma non meno importante: in termini di scienza dei dati, F # è veramente buono e ha alcune librerie interessanti come link

    
risposta data 02.11.2016 - 08:55
fonte

Leggi altre domande sui tag