- IronPython: что это за программа? Установка, настройка и описание
- Характеристика IronPython по сравнению с CPython
- Установка Iron P ython
- Установка Iron P ython в Linux
- Установка Iron P ython MacOS
- Установка IronPython в Windows
- Так что это за программа IronPython, для чего использовать?
- IronPython
- Содержание
- Пример: программа Hello World
- Примечания
- См. также
- Ссылки
- Смотреть что такое «IronPython» в других словарях:
- IronPython
- IronPython как движок для макросов в .NET приложениях
IronPython: что это за программа? Установка, настройка и описание
IronPython — это своего рода реплика языка программирования Python, а точнее , его реализация, которая тесно связана с .NET Framework. IronPython использует библиотеки .NET Framework и библиотеки Python. В целом это отличное дополнение к .NET, позволяющее веб-разработчикам «Питона» пользоваться возможностями .NET Framework. Это очень быстрый и выразительный способ программирования для выстраивания сценариев, тестирования и написания приложений с нуля.
Реализация IronPython происходит прямо поверх библиотек Dynamic Language Runtime (DLR), работающих поверх Common Language Infrastructure, которая , в свою очередь , отвечает за обеспеч ение динамической типизации, а также за отправку необходимых методов для используемого динамического языка.
DLR — это существенная часть .NET Framework 4.0 и Mono. Это стало возможным , уже начиная с релиза 2.4 2009 года. DLR также часто используется в качестве библиотек в наиболее « древних » реализациях CLI.
Характеристика IronPython по сравнению с CPython
Точные характеристики производительности IronPython, если сравнивать с CPython (это эталонная реализация языка программирования Python), будут зависеть от конкретного использования конкретного синтаксиса. В целом IronPython по производительности чуть хуже, чем CPython. Это доказано большим количеством тестов, сделанных с использованием скрипта PyStone.
IronPython в принципе может повысить свою производительность в программах на языке Python, которые используют потоки в несколько ядер , п отому что он сам использует JIT и не имеет Global Interpreter Lock (GIL) механизма. Этот механизм в основном используется в некоторых интерпретаторах программного языка, чтобы синхронизировать выполнение потоков. Интерпретатор, который использует GIL, всегда может выполнить только один поток за раз, даже если поток данных выполняется на многоядерном процессоре. Н екоторые популярные интерпретаторы с GIL — это CPython и Ruby MRI.
Установка Iron P ython
В целом установка Iron P ython — дело не хитрое. Будут небольшие различия в зависимости от того, какую операционную систему вы используете.
Установка Iron P ython в Linux
Установка Iron P ython в Linux довольно проста и умести тся в несколько простых шагов:
- Нужно добавить репозиторий Mono в вашу систему; для этого посетите сайт mono-project.com и выберете версию сво ей операционной системы.
- Установите Mono; это можно сделать в магазине приложений или в терминале , набрав: «$ sudo apt install mono-devel»;
- Установите Numerics; это также можно сделать через терминал: «$ sudo apt install libmono-system-numerics4.0-cil»;
- Наслаждайтесь работой, если все сделали правильно.
Установка Iron P ython MacOS
Здесь тоже все просто. Сама установка займет пару минут и всего несколько шагов:
- Перейдите на сайт mono-project.com и загрузите и установите последнюю версию Mono;
- Загрузите последнюю версию IronPython. Найдите ее через поиск, но , как правило , загрузка происходит из github.com;
- Откройте терминал и введите команду «$ which ipy»;
- Пользуйтесь и наслаждайтесь работой.
Установка IronPython в Windows
Здесь всего 2 шага отделяет вас от программирования на этом языке:
- Найдите и установите через поиск IronPython; как правило , скачать его можно с сайта github.com;
- Пользуйтесь и наслаждайтесь программированием .
Так что это за программа IronPython, для чего использовать?
Программа IronPython — это динамический язык. А как известно , динамические языки очень удобны, если необходимо, к примеру, быстро разработать приложение. Быстрая разработка — это , соответственно , быстрый результат , п оэтому современные разработчики все больше и больше отдают предпочтение именно динамическим языкам, так как они избавляют от старых методик и рутины, а значит , позволяют сосредоточит ь ся на творческой составляющей своего проекта.
Использовать или нет IronPyt h on — зависит только от вашего желания и необходимости конкретно в этом языке.
Если вам понравилась эта статья поделитесь ею с друзьями, тем самым вы помогаете нам развиваться и добавлять всё больше интересного и полезного контента!
IronPython
Python Programming Language Interpreter
IronPython — одна из основных реализаций языка Python, предназначенная для платформы Microsoft .NET или Mono. Полностью написан на C#, и является транслятором компилирующего типа.
В IronPython можно использовать типы .NET. Также можно из .NET кода использовать IronPython код, посредством хостинга IronPython системы или предварительной сборки IronPython кода.
Содержание
Пример: программа Hello World
Простейший пример использования графического инструмента GTK+ в окружении IronPython:
Примечания
См. также
Ссылки
Люди |
---|
Архитектура | Base Class Library • Common Language Infrastructure • .NET assembly • метаданные • COM Interop |
---|---|
Инфраструктура | Common Language Runtime • Common Type System • Common Intermediate Language • Virtual Execution System • Dynamic Language Runtime |
Языки Microsoft | C# • Cω • Visual Basic .NET • C++/CLI (Managed) • Visual J# • JScript .NET • Windows PowerShell • IronPython • IronRuby • F# • Spec# • Sing# |
Другие языки | A# • Boo • IronLisp • L# • Nemerle • P# • PascalABC.NET • PHP • Scala • Cobra • Delphi Prism |
Windows Foundations | Presentation • Communication • Workflow |
Компоненты | ADO.NET (Entity Framework · Data Services) · ASP.NET (AJAX · MVC · Dynamic Data) · .NET Remoting · Language Integrated Query · Windows CardSpace · Windows Forms · XAML · ClickOnce · Dynamic Language Runtime · Parallel FX Library (PLINQ · TPL) |
Реализации | DotGNU • Mono • .NET Compact Framework (Xbox 360) • .NET Micro Framework • Portable.NET • XNA Framework • Silverlight • Shared Source Common Language Infrastructure |
Сравнения | C# и Java • C# и Visual Basic .NET |
Будущие технологии | Acropolis • Jasper |
Wikimedia Foundation . 2010 .
Смотреть что такое «IronPython» в других словарях:
IronPython — Erscheinungsjahr: 2006 Entwickler: Jim Hugunin, Microsoft Aktuelle Version: 2.7.0[1] (12. März 2011) Betriebssystem … Deutsch Wikipedia
IronPython — IronPython(It Run On Net) est une implémentation du langage Python, visant .NET et Mono, créée par Jim Hugunin. La version 1.0 est sortie le 5 septembre 2006. IronPython est écrit entièrement en C#. Il est disponible comme partie de l initiative… … Wikipédia en Français
IronPython — Desarrollador(es) Jim Hugunin www.codeplex.com/IronPython Información general Paradigma multiparadigma: orientado a objeto … Wikipedia Español
IronPython — Infobox Software name = IronPython caption = developer = Jim Hugunin latest release version = 1.1.2 latest release date = August 8, 2008 latest preview version = 2.0 Beta 4 latest preview date = August 6, 2008 operating system = platform = .NET… … Wikipedia
Dynamic Language Runtime — Developer(s) Microsoft Dynamic Language Runtime Team Stable release 1.0 / April 16, 2010 Operating system Microsoft Windows, Debian, Ubuntu Platform … Wikipedia
Python — У этого термина существуют и другие значения, см. Python (значения). Python Класс языка: му … Википедия
Пайтон — Python Класс языка: функциональный, объектно ориентированный, императивный, аспектно ориентированный Тип исполнения: интерпретация байт кода, компиляция в MSIL, компиляция в байт код Java Появился в: 1990 г … Википедия
Visual Basic .NET — Paradigm(s) Structured, imperative, object oriented and declarative Appeared in 2001 Designed by Micro … Wikipedia
SharpDevelop — Bildschirmfoto der Version 2.0 Basisdaten Entwickler IC#Code Aktuelle Version … Deutsch Wikipedia
Dynamic Language Runtime — La DLR est une surcouche facilitant l implémentation et l interopérabilité des langages dynamiques. La DLR permet de supporter plusieurs langages. Cette technologie est utilisé par Microsoft pour la plateforme .NET et Sun pour son langage java.… … Wikipédia en Français
IronPython
Сегодня поговорим об интересном проекте IronPython. Описание звучит так: «IronPython — это реализация языка программирования Python с открытым исходным кодом, которая тесно интегрирована с .NET Framework. IronPython может использовать библиотеки .NET Framework и Python, а другие языки .NET могут также легко использовать код Python».
Для начала установим все необходимое. Для работы с данным проектом нам понадобиться Visual Studio(я использую 2019, .Net Framework необходим не ниже 4.5, .Net Core 2.0 или 2.1). Установить можно через менеджер Nuget Install-Package IronPython Install-Package IronPython.StdLib. Текущая, на момент написания статьи, версия – 2.7.10.
Для начала создадим приложение Windows Forms и добавим туда все, что требуется:
В этот раз не будем пытаться решать сложных проблем, придумаем что-нибудь простое и одновременно показывающее взаимодействие Python и C#. Пусть нам необходимо сложить 2 числа (и мы по каким-то причинам не хотим делать эту операцию обыкновенным способом «в столбик» или с помощью калькулятора). Для этого добавим на нашу форму 3 TextBox-а, пару Label-ов и один Button. Должно получиться примерно так:
В первые два текстовых поля мы будем вводить наши значения, а в третьем пусть отображается наш результат.
Определим две переменные:
Стоит отметить, что все, что будет взаимодействовать с IronPython, должно быть “public”.
Существует несколько методов для работы со скриптами в Ironpython:
Мне больше всего нравится способ ExecuteFile(), его и будем использовать. Для этого в метод инициализации формы добавим следующее:
Для того, чтобы выполнить какой-нибудь скрипт, добавим в код метода обработки кнопки следующий код:
В указанном выше коде выполняется построчно следующее:
- Исполняется файл по указанному адресу, в котором определена функция
- Функция из Python определяется в C#
- Вычисляется значение функции с учетом введенных значений
- В текстовое поле, предполагавшееся для ответа, записывается результат арифметической операциилибо ошибка, которая возникла при выполнении.
Ну и сам Python-файл с функцией содержит код:
Проверим, как работает наш «вычислитель»:
Верно! У нас получилось написать простейшее приложение с применением этой технологии. Кажется, мы решили «детскую» задачку – написали простейший калькулятор, который умеет только складывать два числа. Но разве не с простых «детских» задач начинается изучение чего-то нового?! Лично для себя я вижу неплохую возможность в изучении с использованием уже знакомых мне инструментов. С помощью IronPython можно не только интерпретировать некоторый код, но и проводить некоторые параллели при изучении Python. К примеру, код на C#:
Будет эквивалентен следующему коду на IronPython:
Есть некоторое сходство, верно?!
Если в течение какого-то продолжительного времени вы писали .Net приложения традиционным способом (запись, компиляция, тестирование, исправление, перекомпиляция, повторное тестирование, все сначала) и по каким-то причинам столкнулись с необходимостью работы со скриптами (даже необязательно для анализа данных), то IronPython может стать своеобразным «мостом» для перехода к написанию скриптов Python и подарит возможность взглянуть на некоторые вещи под иным углом.
IronPython как движок для макросов в .NET приложениях
Подозреваю, многие из вас задумывались — как можно в .NET приложение добавить поддержку макросов — чтобы можно было расширять возможности программы без ее перекомпиляции и предоставить сторонним разработчикам возможность легко и просто получить доступ к API вашего приложения? В статье рассмотрено, как в качестве основы для выполнения макросов использовать IronPython — реализацию языка Python на платформе .NET.
Для начала, следует определится — что мы будем иметь в виду под словом «макрос» — это скрипт, который без перекомпиляции проекта позволял бы получить доступ к определенному API. Т.е. вытаскивать значения с формы, модифицировать их — и все это в режиме run-time, без модификации приложения.
Первым вариантом, который приходит на ум будет создание собственного интерпретатора для простенького скрипт-языка. Вторым — будет динамическая компиляция какого-нибудь .NET языка (того же C#) — с динамической же подгрузкой сборок и выполнением через Reflection. И третий — использование интерпретируемых .NET языков (DLR) — IronPython или IronRuby.
Создавать свой язык + интерпретор к нему с возможностью .NET interoperability — задача нетривиальная, оставим ее для энтузиастов.
Динамическая компиляция — слишком громоздко и тащит за собой использование Reflection. Однако, этот метод не лишен преимуществ — написанный макрос компилируется единожды и в дальшейшем может использоватся многократно — в виде полноценной .NET сборки. Итак — финалист — метод номер три — использование существующих DLR языков. В качестве такого языка выбираем IronPython (примите это как факт :). Текущая версия IPy — 2.0, взять можно на codeplex.com/IronPython
Перейдем непосредствено к кодированию.
Для начала, рассмотрим интерфейс тестового приложения «Notepad».
В меню «Сервис» и разместим пункт «Макросы». Для примера рассмотрим простейший вариант формирования списка макросов — в каталоге с программой создадим папку «Macroses» файлы из этой папки станут пунктами меню.
private void Main_Load( object sender, EventArgs e)
<
MacrosToolStripMenuItem itm = null ;
string [] files = Directory .GetFiles( @».\Macroses» );
foreach ( string file in files)
<
itm = new MacrosToolStripMenuItem(Path.GetFileNameWithoutExtension(file)) < MacrosFileName = file >;
itm.Click += new EventHandler(macroToolStripMenuItem_Click);
макросыToolStripMenuItem.DropDownItems.Add(itm);
>
>
internal class MacrosToolStripMenuItem : ToolStripMenuItem
<
public MacrosToolStripMenuItem( string FileName) : base (FileName) < >
public string MacrosFileName < get ; set ; >
>
* This source code was highlighted with Source Code Highlighter .
MacrosToolStripMenuItem — класс-наследник от ToolStripMenuItem отличающийся только свойством MacrosFileName
Для начала, создадим макрос, который просмотрит текст в textBox’е и найдет все e-mail адреса вида «vpupkin@mail.ru». В папке Macroses создаем файл SaveEmail.py, запускаем приложение — и смотрим, что в меню Макросы появился пункт SaveEmail.
Теперь собственно ключевой момент — выполнение IPy скрипта и доступ его к интерфейсу. Добавляем к проекту ссылку на сборку IronPython.dll. И создаем класс MacroRunner — выполняющий скрипт.
public class MacroRunner
<
public static Form CurrentForm;
public string FileName
public void Execute()
<
// собственно среда выполнения Python-скрипта
IronPython.Hosting.PythonEngine pyEngine = new IronPython.Hosting.PythonEngine();
// важный момент — к среде выполнения подключаем текушую выполняемую сборку, т.к.
// в ней собственно и объявлена форма, к которой необходимо получит доступ
pyEngine.LoadAssembly(System.Reflection. Assembly .GetExecutingAssembly());
try
<
pyEngine.ExecuteFile(FileName);
>
catch (Exception exc)
<
MessageBox.Show(exc.Message);
>
>
>
* This source code was highlighted with Source Code Highlighter .
Ключевой момент — подключение к выполняющей среде IPy текущей сборки — для доступа к форме. Когда сборка подключена, в IPy скрипте появится возможность использовать классы пространства имен Notepad. Так же, через LoadAssebmly можно добавить и другие необходимые сборки — типа System.Windows.Forms — чтобы работать с формами.
Класс готов, теперь модифицируем обработчик клика на пунктах подменю Макросы
protected void macroToolStripMenuItem_Click( object sender, EventArgs e)
<
MacrosToolStripMenuItem item = sender as MacrosToolStripMenuItem;
MacroRunner runner = new MacroRunner() < FileName = item.MacrosFileName >;
MacroRunner.CurrentForm = this ;
runner.Execute();
>
* This source code was highlighted with Source Code Highlighter .
Здесь следует отметить следующий момент — чтобы передать в IPy-скрипт форму, из которой собственно вызывается макрос — используется статическое поле CurrentForm. В скрипте форма будет доступна как Notepad.MacroRunner.CurrentForm. В идеале, скрипт, разумеется, не должен иметь полного доступа к интерфейсу формы — а должен пользоватся только предоставленным API — и ограничиваться только им. Но сейчас этим заморачиваться не будем — и просто сделаем textBox открытым (Modifier = Public). Ну и кроме текстового поля, разрешим скрипту доступ к пункту меню Сервис (Modifier = Public).
Работа с формой закончена, собираем проект и открываем файл SaveEmail.py — теперь работаем только с макросами.
Итак, первый макрос — SaveEmail.py:
text = MacroRunner.CurrentForm.textBox.Text
links = re.findall( «\w*@\w*\.\w<2,4>» , text)
file = open( «emails.txt» , «w» )
file.write( «\n» .join(links))
file.close()
* This source code was highlighted with Source Code Highlighter .
Т.к. сборка подключена к среде выполнения — то доступно пространство имен Notepad — в котором объявлены классы приложения. Как раз сейчас потребуется статический метод класса MacroRunner — чтобы получить доступ к активной форме (еще раз оговорюсь — что правильнее было бы предоставить не прямой доступ, а через класс-посредник — которые ограничит доступ определенным API). Ну а дальше все просто — получаем текст, регулярным выражением вытаскиваем email — и сохраняем их в файл в текущем каталоге.
Можно запустить приложение, ввести произвольный текст, содежащий email — и убедиться, что после того, как макрос отработал — в папке с выполняемой программой появился файл emails.txt.
Теперь еще один пример, что может сделать макрос — чуть интереснее предыдущего. Итак, создаем в папке Macroses файл UIModifier.py. Как можно догадаться по названию — макрос будет изменять элементы интерфейса приложения. Конкретно — добавит новый пункт в меню Сервис. Для того, чтобы можно было работать с элементами управления WinForms необходимо в среде выполнения IPy подключить сборку System.Windows.Forms. Это можно сделать в момент запуска скрипта из приложения — добавить еще один вызов LoadAssembly. Но мы решили — никаких перекомпиляций, пусть IronPython обходится своими силами. Ну что ж, силы есть :). Чтобы подключить сборку используется метод AddReference класса clr.
from Notepad import *
main = MacroRunner.CurrentForm
import clr
clr.AddReference( «System.Windows.Forms» )
from System.Windows.Forms import *
def pyHello(s,e):
MessageBox.Show( «Hello from IPy!» )
item = ToolStripMenuItem()
item.Name = «pybtn»
item.Text = «Python created!»
item.Click += pyHello
* This source code was highlighted with Source Code Highlighter .
Все просто — получаем текущую форму, подключаем сборку System.Windows.Forms и импортируем из пространства имен System.Windows.Forms все — пригодится.
pyHello — простенький обработчик события — при щелчке на созданном пункте меню — будет выводится сообщение.
Запускаем приложение, выполняем макрос. Смотрим пункт меню Сервис:
При щелчке на пункт меню «Python сreated!» появится стандартный MessageBox — собственно, чего и добивались.