IronPython против Python .NET

Я хочу получить доступ к некоторым сборкам .NET, написанным на C #, из кода Python.

Небольшое исследование показало, что у меня есть два варианта:

  • IronPython с поддержкой / поддержкой интерфейса .NET.
  • Python с пакетом Python .NET

Каковы компромиссы между обоими решениями?

  • Использование C # сборок из Python через pythonnet
  • Как экспортировать методы C #?
  • Как передать обратный вызов python на вызов функции c #
  • Как использовать .NET-метод, который модифицируется в Python?
  • Как запустить скрипт Python с C #?
  • Можем ли мы загрузить pandas DataFrame в .NET ironpython?
  • Как установить Python для .NET в Windows
  • Определенный метод использования NumPy и SciPy от IronPython
  • 7 Solutions collect form web for “IronPython против Python .NET”

    Если вы хотите в основном основывать свой код на платформе .NET, я бы настоятельно рекомендовал IronPython vs Python.NET. IronPython в значительной степени является родным .NET – поэтому он отлично работает при интеграции с другими .NET langauges.

    Python.NET хорош, если вы хотите просто интегрировать один или два компонента из .NET в стандартное приложение python.

    Существуют заметные различия при использовании IronPython, но большинство из них довольно тонкие. Python.NET использует стандартную среду исполнения CPython, поэтому эта страница Wiki является релевантным обсуждением различий между двумя реализациями. Наибольшие различия возникают в стоимости исключений – поэтому некоторые из стандартных библиотек python не работают также в IronPython из-за их реализации.

    Соглашаясь с ответами, сделанными Ридом Копси и Алексом Мартелли, я хотел бы указать еще одно различие – Глобальный переводчик (GIL). В то время как у IronPython нет ограничений GIL, CPython делает – так что для тех приложений, где GIL является узким местом, скажем, в некоторых многоядерных сценариях, IronPython имеет преимущество перед Python.NET.

    Из документации Python.NET:

    Важное примечание для встроенных приложений: Python не является свободно-потоковым и использует глобальную блокировку интерпретатора, чтобы позволить многопоточным приложениям безопасно взаимодействовать с интерпретатором Python. Гораздо больше информации об этом можно найти в документации API Python C на www.python.org сайте www.python.org .

    При встраивании Python в управляемое приложение вы должны управлять GIL так же, как и при встраивании Python в приложение C или C ++.

    Прежде чем взаимодействовать с любым из объектов или API, предоставляемых пространством имен Python.Runtime , вызывающий код должен получить блокировку глобального интерпретатора Python, вызвав метод PythonEngine.AcquireLock . Единственным исключением из этого правила является метод PythonEngine.Initialize , который можно вызвать при запуске без приобретения GIL.

    По завершении использования API-интерфейсов Python управляемый код должен вызывать соответствующий PythonEngine.ReleaseLock чтобы освободить GIL и разрешить другим потокам использовать Python.

    AcquireLock и ReleaseLock представляют собой тонкие оболочки поверх неуправляемых PyGILState_Ensure и PyGILState_Release из API Python, а документация для этих API применяется к управляемым версиям.

    Еще одна проблема – поддержка IDE. В настоящее время CPython имеет лучшую поддержку IDE, чем IronPython, поэтому это может быть фактором выбора одного из них.

    Большинство научных и числовых библиотек Python, которые полагаются на CPython C-API (numpy, scipy, matplotlib, pandas, cython и т. Д.), Работают в основном под CPython, поэтому в этом случае ваш лучший выбор – pythonnet (другие имена – Python.NET и Python для .NET). То же самое относится к связям GUI CPython, таким как WxWidgets, PyQt / PySide, GTK, Kivy и т. Д., Хотя оба pythonnet и IronPython могут использовать WPF и WinForms.

    И, наконец, IronPython пока не поддерживает Python 3.

    IronPython является «.NET-native» – поэтому будет предпочтительным, если вы хотите полностью интегрировать свой код Python с .NET на всем пути; Python.NET работает с классическим Python, поэтому он позволяет вам держать «длину руки» на Python в стороне от .NET. (Обратите внимание, что с помощью этого кода вы можете фактически использовать расширения, написанные для CPython, из вашего кода IronPython, так что это не является дискриминационным условием).

    IronPython приходит от Microsoft, поэтому я бы пошел с моей кишкой и первым использовал его, так как вы должны предположить, что он будет играть лучше с другими технологиями MSFT.

    Что касается 2016 года.

    В моей компании мы использовали IronPython, но нас не устраивали выступления (в основном использование памяти – сборщик мусора был слишком медленным), поэтому мы решили перейти на стандартный Python и интегрировать его с .Net, используя ICE Zeroce.

    1. Ironpython похож на C #, в свою очередь, он опирается на статические готовые библиотеки, в отличие от C # – динамический язык.

    2. Cpython похож на C ++, поскольку Ironpython – это динамический язык и имеет доступ к динамическим библиотекам, что в свою очередь переводит на то, что он вынужден писать все.

    3. Ironpython быстрее, чем C # в определенных областях, но не быстрее, чем Cpython, однако вы можете связать Ironpython с любым языком, таким образом, над предстоящими проблемами, но затем вы можете сделать то же самое с Cpython.

    Смешной, простой и мощный язык, независимо от того, что вы выбираете!

    Python - лучший язык программирования в мире.