Подтвердить что ты не робот

Как вы используете IronPython?

Я очень хочу выпить какой-нибудь современный динамический язык koolaid, поэтому я поверил всем вещам в блоге и подкастах Michael Foord, я купил его книгу (и прочитал ее), и я добавил встроенный IPy runtime к большому существующему приложению год или около того назад (хотя это было для кого-то еще, и я действительно не использовал его сам).

Теперь мне нужно сделать довольно простой материал для генерации кода, где я собираюсь вызвать несколько методов на нескольких объектах .net(пользовательские, объекты с С# -авторизованным), создать несколько строк, записать некоторые файлы и т.д..

Опыт пробуждения меня оставляет мне ощущение, как маленький мальчик, который думает, что он единственный, кто может видеть, что у Императора нет одежды. Если вы используете IronPython, я бы очень хотел узнать, как вы справляетесь со следующими его аспектами:

  • Редактирование кода. Используете ли вы платформу .NET без Intellisense?
  • Рефакторинг - я знаю, что загрузка "рефакторинга" связана с работой, связанной с языком, поэтому, если Python достаточно легкий, нам это не понадобится, но такие вещи, как переименования, кажутся мне важными для итеративного развития качества независимо от языка.
  • Время запуска Crippling - одна из вещей, которые должны быть хорошими в отношении интерпретируемых языков, - это отсутствие времени компиляции, приводящего к быстрой интерактивной разработке. К сожалению, я могу скомпилировать приложение С# и запустить его быстрее, чем запустить IPy.
  • Интерактивный взлом - консоль IPy/repl должна быть хороша для этого, но я не нашел хорошего способа взять код, в который вы интерактивно достигли, и сохранить его в файл - вырезать и вставить из консоль довольно жалкая. И консоли, похоже, содержат ссылки на сборки .NET, которые вы импортировали, поэтому вам нужно выйти из нее и перезапустить ее, если вы также работаете с С#. Взлом на С# в чем-то вроде LinqPad кажется намного более быстрым и простым способом попробовать все (и имеет надлежащую Intellisense). Вы используете консоль?
  • Отладка - какая история здесь? Я знаю, что кто-то из команды IPy работает над хобби-проектом командной строки, но позвольте сказать, что меня сразу не привлекает отладчик командной строки. Мне не нужен отладчик из небольших скриптов Python, но если бы я использовал IPy для тестирования модулей сценариев, например.
  • Модульное тестирование. Я вижу, что динамические языки могут быть хороши для этого, но есть ли интеграция с IDE-тестировщиком (например, для Resharper и т.д.). В книге Foord есть главу об этом, и я признаю, что я еще не прочитал ее правильно, но, похоже, она включает в себя запуск тестового драйвера в консольном режиме из командной строки, которая кажется огромным шагом назад от использования интегрированный тестовый бегун, такой как TestDriven.net или Resharper.

Я действительно хочу верить в этот материал, поэтому я все еще работаю над тем, что что-то пропустил. Мне бы очень хотелось узнать, как другие люди занимаются вопросами IPy, особенно если они делают это таким образом, который не чувствует, что мы только что потеряли 15-летнюю разработку инструмента.

Обновление: (июль 2010 г.) Этот вопрос выглядит довольно устаревшим, теперь, когда есть официальные IronPython Tools для VS и PyCharm, оба из которых показывают много обещаний, и ни один из них не был вокруг, когда я его написал. Спасибо всем, кто ответил. Тем из вас, кто счастлив без инструментов автоматического рефакторинга, могу ли я рекомендовать вам никогда не использовать IDE с хорошим автоматическим рефакторингом. После того, как вы это сделаете, вы задаетесь вопросом, почему вы думали, что когда-нибудь будете довольны поиском-заменой, и вам больше не захочется работать без него. Если ничего другого, возможность мгновенно переименовывать идентификаторы, не беспокоясь о замене неправильного бита текста, изменяет весь ваш подход к именованию.

4b9b3361

Ответ 1

do you use the .NET framework without Intellisense?

Да. Я использую только emacs с IronPython. "М-/" для меня достаточно. Я иногда переключаюсь на Reflector и MSDN, когда мне действительно нужна информация о SDK.

Refactoring

Фактически вы имеете в виду "Автоматический рефакторинг", когда вы сказали "Рефакторинг". Во время кодирования я делаю много рефакторинга. Это может быть лучше с некоторой автоматизацией. Но я в порядке с ручным рефакторингом. Это также заставляет меня включать больше тестов. Я никогда не использовал IDE с функцией рефакторинга, возможно, поэтому Я не страдаю. Простой поиск и замена отлично подходят для меня.

Crippling startup time

Да, это моя БОЛЬШАЯ боль, хотя я работаю на четырехъядерном ядре 3GHz с 4G Ram, для выполнения 359 тестовых случаев требуется 50 секунд. Половина этого времени (25 секунд) - время запуска! Кажется, что IronPython выполняет очень тяжелую обработку при импорте большого модуля. Теперь я планирую выплюнуть свои тесты на части, чтобы смягчить эту боль.

Interactive hacking - Do you use the console?

Я иногда использую консоль, когда хочу попробовать какую-то идею adhoc. У вас нет проблем с этим. Однако большую часть времени я писал свою мысль в блок-тест.

Debugging - what the story here?

Если отладка означает точку останова и переменную проверку. Я использую только инструкцию печати для этого материала. Вид приложения, над которым я работаю, вот-вот должен жить и поддерживать его в течение по крайней мере десятилетия. Для обработки дефектного кода я делаю ставку только на 3 вещи: понятный код, блок-тест и обширный журнал.

Unit testing

Я никогда не подхожу к любому инструменту, который вы упомянули. Просто используйте unittest.TextTestRunner. Помимо ужасного времени запуска, у меня нет других жалоб.

** ОБНОВЛЕНО **

Я только что закончил обновление до IPy 2.6B1 с феноменальным результатом. Время запуска сокращается с 25 до 6 с, а мое общее время тестирования сокращается с 50 до 16 с.

УДИВИТЕЛЬНО!

Ответ 2

Как насчет инструментов IronPython для Visual Studio 2010?

Инструменты IronPython предоставляют редактор кода Python, файловую систему проекта и интерактивную Python, все внутри Visual Studio 2010 и все бесплатно. http://ironpython.net/tools/

Я думаю, что эта надстройка будет охватывать большинство ваших вопросов.

Надеюсь, что это поможет,

Патрик

Ответ 3

IronPython - отличное решение, но я продолжаю возвращаться к CPython для Windows. Почему?

В моем опыте CPython под Windows, Mac OS/X и * NIX практически одинаковы. Я могу использовать почти все "батареи" в каждой среде. Я часто разрабатываю приложения на Linux и отправляю на серверы Windows. Несколько проблем с потоком в стороне, у меня не было проблем.

IronPython, с другой стороны, представляет собой оболочку языка Python вокруг .Net Framework. Мне гораздо удобнее использовать, чем С#, но это все. Мои программы CPython не работают без значительной переделки. Батареи для IronPython отличаются.

Если ваша цель - быть продуктивной на .Net, тогда IPy, вероятно, Ok. Однако, если вы ищете портативные навыки Python, я бы избегал этого.

Ответ 4

Я использую PyDev для написания кода IronPython. Я стараюсь как можно больше отделить .NET-код, чтобы я мог запускать скрипты (Iron) Python из PyDev. Благодаря PyDev я могу использовать Pylint, который можно найти на http://www.logilab.org/857. Последние версии PyDev могут настраивать интерпретатор даже на основе файлов или проектов. Таким образом, я могу легко переключить интерпретаторы из IronPython на CPython и наоборот. Таким образом, я вижу, что мой код переносится между реализациями Python. (Хотя я не использую, Jython 2.5 RC можно использовать и в PyDev.)

Имея совместимый с Python и IronPython 2.5 код, я могу использовать рефакторинг в PyDev, см. http://pydev.sourceforge.net/refactoring.html.

IronPython Studio будет хорошим выбором, если он поддерживает IronPython 2.x, но, к сожалению, это не так.

Ответ 5

PyDev, Wing, PyCharm и инструменты IronPython для Visual Studio поддерживают Intellisense для .NET под IronPython. У меня такое чувство, что SharpDevelop также имеет intellisense для IronPython.

Время запуска значительно улучшилось под IronPython 2.6 и снова в 2.7. Он все еще значительно медленнее, чем CPython.

Ремонт велосипеда и веревка - два популярных автоматизированных инструментария рефакторинга для Python. Я никогда не нашел нужды ни в одном из них.

pdb (стандартный отладчик библиотеки Python) работает с IronPython. PyDev, SharpDevelop и IronPython Tools для Visual Studio поддерживают отладку для IronPython.

Я использовал интегрированные средства тестирования (у Wing есть хорошая поддержка unittest. SharpDevelop поддерживает unittest и unittest2 для IronPython, PyDev и PyCharm, вероятно, также имеет хорошую интеграцию с интеграцией). Я предпочитаю запускать свои тесты из командной строки. unittest2 отлично подходит для этого, поскольку он избавляет от необходимости писать собственный тестовый сбор/запуск кода.

Я использую интерактивный интерпретатор для экспериментирования очень часто, а иногда и в качестве закрытой оболочки.

Ответ 6

В последнее время я широко использую IronPython (и DLR в целом) в своих проектах для разных целей. Некоторые примеры:

  • Я создал генератор документов на основе шаблонов, использующих скрипты py для создания и преобразования переменных контекста, передаваемых в средство визуализации шаблонов (Excel, Word, html- > pdf)
  • Как оценщик выражений для специализированного механизма правил. Сценарии сохраняются в столбце таблицы базы данных и оцениваются во время выполнения, чтобы определить, какое правило применяется.
  • Как шаги в движке ETL. В основном у меня есть некоторые компоненты, которые могут читать файлы Excel, и я использую скрипты python для преобразования данных и создания объектов NHibernate для заполнения базы данных.
  • Динамические сценарии конфигурации для компонентов С#.
  • Механизм вычисления некоторых индикаторов, которые необходимо создать из большого набора данных. Я объединяя параллельные расширения с предварительно скомпилированными скриптами, производительность пока хороша.

Такие вещи. Когда двигатель настроен правильно, с установленными путями и ссылками, вы можете в принципе использовать script для чего угодно.

Почти все эти вещи работают в приложениях asp.net mvc, и пока все хорошо. Я обнаружил, что ScriptEngine и некоторые компоненты, такие как ScriptScope, являются потокобезопасными, поэтому я могу даже поделиться сконфигурированным движком, находящимся внутри контейнера IoC (например, Windsor) между контроллерами и т.д.

Что касается редактора, то я редко использую EditPlus. Редактор python VS 2010 имеет тенденцию быть немного нестабильным, хотя быстрое редактирование не является проблемой.

Ответ 7

Мое использование IronPython ограничено созданием быстрых прототипов для себя, поэтому я не могу сказать слишком много об этом. Но если вы ищете IDE, специфичную для IronPython, IronPython Studio является проходимым. Это даст вам некоторые функциональные возможности Intellisense, хотя иногда это немного шелушится, поэтому пока не закрывайте окно документации MSDN. Это позволит вам интерактивно отлаживать, как и любой другой .Net-проект. Также он поддерживает конструктор форм Visual Studio 2008, если вы предпочитаете делать свой графический интерфейс таким образом. Я не пробовал, но может также поддерживать выполнение тестов nUnit с помощью TestDriven.net.

К сожалению, переименования и другие функции рефакторинга, предлагаемые VS 2008, кажутся неподдерживаемыми.

Ответ 8

Я использую IPy во встроенной среде для запуска тестовых скриптов.

1 и 2. Вы правы, что нет поддержки для редактирования кода или рефакторинга - правильная поддержка Visual Studio будет отличной.

Игнорирование вашей третьей точки - интерпретируемый vs скомпилированный - это вековой аргумент.

Еще не сделали много интерактивного взлома, поэтому не могу прокомментировать 4-ю точку.

Я использую отладчик Visual Studio для отладки моих сценариев IPy.

Не знаю об интеграции с IDE unit test.

Ответ 9

Я использую Iron Python, а не профессионально, к сожалению, но как язык быстрого развития для моих личных проектов.

Python - такой отличный язык для простоты использования, краткости, но читаемости кода и простоты. Некоторые из них связаны с тем, что это динамический язык, но также и его основной синтаксис.

Я, однако, не гуру cpython, и могу получить намного больше от Iron Python, чем cpython, поскольку я могу легко использовать платформу .NET, на которой я гораздо больше дома. Я разочарован тем, что в настоящее время нет порта для библиотек Twisted в cpython, единственных расширенных библиотеках Python, с которыми мне удобно, поскольку они были бы настолько полезны в .NET.

Я также использую интерактивное окно, чтобы тестировать структуры .NET, когда я кодирую на С#.

Ответ 10

Я запускаю набор симуляций для блэкджека на Python 2.6 по сравнению с IronPython 2.6 и, несмотря на всевозможные шумихи, IronPython, кажется, немного медленнее (может быть, примерно на 10%?). Код очень прост,

def highcount(hand):
  total=0
  for c in hand:
    if c[1]==11 and 11+total>21:
      total+=1
    else:
      total+=c[1]
  return total

и

def dmove():
  if ( (dhand[0][1]==11 and dhand[1][1]==10) or 
       (dhand[0][1]==10 and dhand[1][1]==11) ):
    return 21 # should return blackjack

  while 1:
    lc=lowcount(dhand)
    hc=highcount(dhand)
    if lc>21: return lc # dealer busts
    if lc>=17: return hc # stand on soft 17
    if hc>=17: return hc # stand on hard 17
    dhand.append(deck.pop()) # hit otherwise

Если оптимизация .NET VM похожа на JVM Hotspot, вполне возможно, что при более длительных запусках IronPython может быстрее запускать симуляцию.

Еще один важный момент - симуляция блэкджека легко поддается размножению на нескольких потоках, которые CPython GIL делает совершенно бесполезным с точки зрения повышения скорости. С IronPython я получаю полное 400% ускорение на квадроцикле, что действительно очень круто.

В коде не используются какие-либо эзотерические функции Python (что хорошо), что означало, что он запускал 100% немодифицированный на IronPython.

Ответ 11

Я только что купил книгу Foord, поэтому прямо сейчас я ее изучаю. Я действительно надеюсь использовать его для веб-разработки, но, к сожалению, мне нужно подождать, пока он будет поддерживаться asp.net mvc. Я также планирую использовать его в качестве инструмента для создания сценариев для систем Windows, так как я могу использовать инфраструктуру .net

Ответ 12

На работе мы используем IronPython для объектной модели SharePoint. Он идеален для множества небольших программ, которые больше, чем powershell script, но не то, что нужно развернуть как артефакт в SharePoint. Это отлично подходит для быстрого прототипирования на серверах, где Visual Studio не установлен. Обычно мы используем Notepad ++ в качестве нашего редактора.