Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

do you use the .NET framework without Intellisense?

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

Refactoring

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

Crippling startup time

Да, это моя главная боль, хотя я работаю над четырехъядерной емкостью 3 ГГц с 4G RAM, требуется 50-е годы, чтобы запустить 359 тестовых катеров.Половина этого времени (25 с) — время запуска!!Кажется, что IronPython выполняет очень тяжелую задачу обработки при импорте большого модуля.Теперь я планирую разбить свои тесты на части, чтобы смягчить эту боль.

Interactive hacking - Do you use the console?

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

Debugging - what's the story here?

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

Unit testing

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

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

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

УДИВИТЕЛЬНЫЙ !

Другие советы

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

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

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

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

Патрик

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

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

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

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

Я использую 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, но, к сожалению, это не так.

Инструменты 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 для Visual Studio поддерживают отладку для IronPython.

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

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

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

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

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

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

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

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

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

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

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

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

Пока особо не занимался интерактивным взломом, поэтому не могу прокомментировать 4-й пункт.

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

Также не знаю об интеграции IDE для модульного тестирования.

Я запускаю набор симуляций блэкджека на Python 2.6 vs.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 аналогична оптимизации горячей точки JVM, вполне возможно, что при более длительных прогонах IronPython может запускать моделирование быстрее.

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top