IronPython vs. Python.NET

Je veux accéder à certains assemblys. net écrits en C # à partir du code Python.

Un peu de recherche a montré que j'ai deux choix:

Quels sont les compromis entre les deux solutions?

72
demandé sur denfromufa 2009-07-23 04:06:00

10 réponses

Si vous voulez principalement baser votre code sur le framework. net, je recommande fortement IronPython vs Python.NET. IronPython est à peu près natif. net-donc cela fonctionne très bien lors de l'intégration avec d'autres langages.net.

Python.NET est bon si vous voulez simplement intégrer un ou deux composants de. net dans une application Python standard.

Il existe des différences notables lors de L'utilisation de IronPython - mais la plupart d'entre elles sont assez subtiles. Python.NET utilise le CPython standard runtime, donc cette page Wiki est une discussion pertinente sur les différences entre les deux implémentations. Les plus grandes différences se produisent dans le coût des exceptions - de sorte que certaines bibliothèques Python standard ne fonctionnent pas aussi bien dans IronPython en raison de leur implémentation.

63
répondu Reed Copsey 2011-12-27 09:56:33

Tout en étant d'accord avec les réponses données par Reed Copsey et Alex Martelli, je voudrais souligner une autre différence - le verrou Global Interpreter (GIL). Alors que IronPython n'a pas les limites du GIL, CPython le fait - il semblerait donc que pour les applications où le GIL est un goulot d'étranglement, disons dans certains scénarios multicœurs, IronPython a un avantage sur Python.NET.

De la Python.NET documentation:

Note Importante pour les intégrateurs: Python n'est pas libre de thread et utilise un mondial verrouillage de l'interpréteur pour permettre applications multithread à interagir en toute sécurité avec le Python interprète. Beaucoup plus d'informations A propos de cela est disponible dans le Python C documentation API sur le www.python.org site Web.

Lors de l'intégration de Python dans un application, vous devez gérer le GIL de la même manière que vous le feriez lors de l'intégration de Python dans un C ou c++ application.

Avant d'interagir avec tout de la objets ou API fournis par le Python.Runtime espace de noms, code appelant doit avoir acquis le global Python verrouillage de l'interpréteur en appelant le PythonEngine.AcquireLock méthode. Le seule exception à cette règle est le PythonEngine.Initialize méthode, qui peut être appelé au démarrage sans ayant acquis le GIL.

Lorsque vous avez terminé d'utiliser les API Python, le code géré doit appeler un {[4] } pour libérer le GIL et permettre à d'autres fils à utiliser Python.

Les AcquireLock et ReleaseLock les méthodes sont des emballages minces sur le non géré PyGILState_Ensure et PyGILState_Release fonctions du API Python, et la documentation pour ces Api s'applique à la gestion de version.

Un autre problème est le support IDE. CPython a probablement un meilleur support IDE à l'heure actuelle que IronPython - donc cela peut être un facteur dans le choix de l'un sur l'autre.

26
répondu Vinay Sajip 2011-09-05 23:08:50

La plupart des bibliothèques scientifiques et numériques Python qui reposent sur CPython C-API (numpy, scipy, matplotlib, pandas, cython, etc.) travaillent principalement sous CPython, donc dans ce cas votre meilleur pari est pythonnet (autres noms - Python.NET et Python pour. NET). La même chose est vraie pour les liaisons GUI CPython telles que WxWidgets, PyQt / PySide, GTK,Kivy, etc., bien que pythonnet et IronPython puissent utiliser WPF et WinForms.

Et enfin IronPython ne supporte pas encore complètement Python 3.

12
répondu denfromufa 2017-07-24 16:05:15

IronPython est". net-native " - donc ce sera préférable si vous voulez intégrer complètement votre code Python avec. net tout le chemin; Python.NET fonctionne avec Python classique, donc il vous permet de garder le "bras de longueur" de votre code Python loin de. Net proprement dit. (Notez qu'avec CE code Vous pouvez réellement utiliser des extensions écrites pour CPython à partir de votre code IronPython, ce n'est donc plus une condition discriminante).

8
répondu Alex Martelli 2009-07-23 00:12:16

IronPython vient de Microsoft, donc j'irais avec mon instinct et l'utiliserais d'abord puisque vous devez supposer qu'il jouera plus bien avec d'autres technologies MSFT.

6
répondu i_am_jorf 2009-07-23 00:13:49

Comme pour 2016.

Dans mon entreprise, nous avons utilisé IronPython, mais nous n'étions pas satisfaits des performances (la plupart du temps l'utilisation de la mémoire - garbage collector était trop lent), nous avons donc décidé de passer à Python standard et de l'intégrer à.Net en utilisant Zeroce-s ICE.

3
répondu topolm 2016-06-16 11:21:13

IronPython, actuellement, ne supporte pas Python 3.6 (seulement 2.7)

De IronPython 3 "les versions de IronPython 3 ne sont pas encore fournies."

1
répondu Ariel 2018-04-24 14:36:26
  1. Ironpython est comme C# à son tour, il repose sur des bibliothèques prédéfinies statiques alors que contrairement à C# est un langage dynamique.

  2. Cpython est comme c++ comme Ironpython est un langage dynamique et a accès à des bibliothèques dynamiques qui à son tour se traduit par être obligé d'écrire tout.

  3. Ironpython est plus rapide que C# dans certaines zones mais pas plus rapide que Cpython, cependant vous pouvez lier Ironpython à n'importe quelle langue ainsi sur les problèmes à venir, mais là encore vous pouvez faire de même avec Disponible.

Un langage drôle, simple et puissant quel que soit ce que vous choisissez!

0
répondu Meh 2012-01-24 04:09:19

Iron Python est fondamentalement Python 2.7 avec un support. net intégré, il ne supportera probablement jamais Python 3. Il perd sur les bibliothèques C et Python, mais du côté de la torsion a accès à. net et peut être étendu avec C#. Donc, si vous utilisez déjà c#, Iron Python est un bonus.

0
répondu Anonimoose 2018-05-18 00:58:00

Je préfère principalement Python pour.NET, car IronPython est compilé en tant que code géré, qui peut être facilement décompilé (ce que je déteste le plus), mais avec py2exe ou pyinstaller, vous pouvez compiler Python avec le module NET en tant qu'application non gérée.

-1
répondu XorTroll 2017-12-10 21:27:56