IronPython をどのように使用していますか?[閉まっている]
-
06-07-2019 - |
質問
私は最新の動的言語のクーレイドを飲みたいと思っているので、Michael Foord のブログやポッドキャストの内容をすべて信じ、彼の本を購入し (そしてその一部を読みました)、組み込みの IPy ランタイムを1 年ほど前に既存の大きなアプリを作成しました (ただし、それは他の人のためのものであり、私自身は実際には使用しませんでした)。
ここで、いくつかの非常に単純なコード生成作業を行う必要があります。そこでは、いくつかの .net オブジェクト (カスタム、C# で作成されたオブジェクト) でいくつかのメソッドを呼び出し、いくつかの文字列を作成し、いくつかのファイルを書き込みます。
これを試してみると、皇帝が服を着ていないのが見えるのは自分だけだと思っている少年のような気分になります。IronPython を使用している場合は、その次の側面にどのように対処するかを知っていただければ幸いです。
- コード編集 - .NET Framework を使用していますか それなし インテリセンス?
- リファクタリング - 大量の「リファクタリング」は、言語関連の多忙な作業を回避するためのものであることはわかっています。そのため、Python が十分に軽量であれば、その必要はありません。しかし、名前の変更などのことは、品質の高いコードを反復的に開発するには不可欠であるように私には思えます。言語。
- 起動時間の短縮 - インタプリタ型言語の利点の 1 つは、コンパイル時間が短縮され、高速な対話型開発が可能になることです。残念ながら、C# アプリケーションをコンパイルして、IPy を起動するよりも早く起動できます。
- インタラクティブなハッキング - IPy コンソール/repl がこれに適しているはずですが、インタラクティブに到達したコードを取得してファイルに永続化する良い方法が見つかりませんでした - コンソールからのカット アンド ペーストはかなり簡単です惨めな。また、コンソールにはインポートした .NET アセンブリへの参照が保持されているようです。そのため、C# に関する作業も行っている場合は、コンソールを終了して再起動する必要があります。LinqPad などで C# をハックすることは、物事を試すのにはるかに速くて簡単な方法のように思えます (そして適切な Intellisense を備えています)。コンソールを使用しますか?
- デバッグ - ここでの話は何ですか?IPy チームの誰かがコマンド ラインの趣味のプロジェクトに取り組んでいることは知っていますが、私がコマンド ライン デバッガーにすぐに惹かれるわけではないということだけは言っておきます。小さな Python スクリプトのデバッガーは実際には必要ありませんが、たとえば単体テストのスクリプト作成に IPy を使用する場合は必要になります。
- 単体テスト - 動的言語がこれに最適であることはわかりますが、IDE テストランナーの統合 (Resharper など) はありますか。Foord の本にはこれに関する章があり、私はまだきちんと読んでいないことを認めますが、コマンド プロンプトからコンソール モードのテスト ランナーを駆動することが含まれているようで、これは使用から大幅に後退しているように感じられます。 TestDriven.net や Resharper などの統合テスト ランナー。
私は本当にこのことを信じたいので、何かを見逃しているという前提でまだ取り組んでいます。他の人がどのように IPy に取り組んでいるのか、特に 15 年に相当するツール開発が失われたとは感じられない方法で取り組んでいるのかどうか、ぜひ知りたいと思っています。
アップデート:(2010年7月) この質問は、公式の VS 用の IronPython ツール そして PyCharm どちらも多くの可能性を示していますが、私がこれを書いたときにはどちらも存在しませんでした。答えてくれた皆さん、ありがとう。幸せなあなたへ それなし 自動リファクタリング ツールについては、優れた自動リファクタリングを備えた IDE は決して使用しないことをお勧めします。一度試してみると、なぜ今まで検索置換で満足していたと思ったのか疑問に思うでしょうし、二度と検索置換なしで作業したくなくなるでしょう。何よりも、テキストの間違った部分を置き換えることを心配することなく、識別子の名前を即座に変更できる機能は、名前の付け方全体を変えます。
解決
do you use the .NET framework without Intellisense?
はい。私は、Emacs と IronPython のみを使用しています。「M-/」で十分です。SDK に関する情報が本当に必要な場合は、Reflector と MSDN に切り替えることがあります。
Refactoring
「リファクタリング」と言ったのは、実際には「自動リファクタリング」のことです。私はコーディング中に多くのリファクタリングを行います。自動化すればもっと良くなるかもしれません。しかし、手動のリファクタリングには問題ありません。また、より多くのテストを含める必要があります。私はリファクタリング機能を備えたIDEを広範囲に使用したことがないので、おそらくそれが理由です 私は苦しんでいません。私にとっては単純な検索と置換で十分です。
Crippling startup time
はい、これは私の主な痛みですが、私は3G RAMを搭載した4GHzクアッドコアに取り組んでいます。 359 個のテストケースを実行するのに 50 秒かかります。その半分の時間(25秒)が起動時間です!!IronPython は、大きなモジュールをインポートするときに非常に重い処理タスクを実行するようです。私は現在、この苦痛を軽減するためにテストをいくつかの部分に分割することを計画しています。
Interactive hacking - Do you use the console?
私は時々、臨時のアイデアを試したいときにコンソールを使用します。問題ありません。ただし、ほとんどの場合、私は自分の考えを単体テストに書きました。
Debugging - what's the story here?
デバッグがブレークポイントと変数検査を意味する場合。私はそのためにのみ print ステートメントを使用します。私が取り組んでいる種類のアプリケーションは、少なくとも 10 年間は存続し、保守され続ける予定です。欠陥のあるコードを処理するには、次の 3 つのことに賭けるだけです。わかりやすいコード、単体テスト、および広範なログ。
Unit testing
あなたが言及したツールには決して近づきません。Unittest.TextTestRunner を使用するだけです。起動時間がひどいこと以外に、特に不満はありません。
** 更新しました **
IPy 2.6B1 へのアップグレードが驚異的な結果で完了しました。起動時間は 25 秒から 6 秒に短縮され、全体のテスト時間は 50 秒から 16 秒に短縮されました。
すばらしい !
他のヒント
Visual Studio 2010用IronPythonツールはどうですか?
IronPythonツールは、Pythonコードエディター、ファイルベースのプロジェクトシステム、およびインタラクティブな Pythonインタープリター、すべてVisual Studio 2010内、およびすべて無料。 http://ironpython.net/tools/
このアドインはほとんどのポイントをカバーすると思います。
お役に立てば、
パトリック
IronPythonは優れたソリューションですが、WindowsのCPythonに戻ります。なぜ?
WindowsでのCPythonの経験では、Mac OS / Xと* NIXはほぼ同じです。 「バッテリー」のほぼすべてを使用できます。各環境で。 Linuxでアプリケーションを頻繁に開発し、Windowsサーバーに出荷しています。スレッド化に関するいくつかの問題は別として、問題はありませんでした。
一方、IronPythonは、.Net FrameworkのPython言語ラッパーです。私はC#よりも使用する方がずっといいと思いますが、それですべてです。私のCPythonプログラムは、かなりの手直しなしでは機能しません。 IronPythonのバッテリーは異なります。
.Netで生産的になることが目標であれば、IPyはおそらく大丈夫です。ただし、移植可能なPythonスキルを求めている場合は、それを避けます。
PyDevを使用してIronPythonコードを記述しています。私は、PyDev内から(Iron)Pythonスクリプトを実行できるように、可能な限り.NET固有のコードを分離しようとしています。 PyDevのおかげで、 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をサポートしていればよい選択ですが、残念ながらサポートしていません。
Visual StudioのPyDev、Wing、PyCharm、IronPythonツールはすべて、IronPythonの下で.NETのインテリセンスをサポートしています。 SharpDevelopにはIronPythonのインテリセンスもあると感じています。
IronPython 2.6および2.7では、起動時間が大幅に改善されました。ただし、CPythonよりもかなり低速です。
自転車修理工とロープは、Python用の人気のある自動リファクタリングツールです。私はそれらのいずれかの必要性を見つけたことがありません。
pdb(Python標準ライブラリデバッガー)はIronPythonで動作します。 Visual Studio用のPyDev、SharpDevelop、IronPythonツールはすべて、IronPythonのデバッグをサポートしています。
統合テストツールを使用しました(Wingには単体テストの適切なサポートがあります。SharpDevelopは、IronPython、PyDev、およびPyCharmのunittestおよびunittest2をサポートしています。コマンドラインからテストを実行することを好みます。 unittest2は、独自のテストコレクション/実行コードを記述する必要がなくなるため、これに最適です。
私はインタラクティブなインタプリタを実験に大いに使用しており、時折スープ付きのシェルとして使用しています。
最近、私のプロジェクトでさまざまなことのためにIronPython(および一般的にはDLR)を広範囲に使用しています。いくつかの例:
- pyスクリプトを使用して、テンプレートレンダラー(Excel、Word、html-> pdf)に渡されるコンテキスト変数を構築および変換するテンプレートに基づいたドキュメントジェネレーターを作成しました
- 特殊なルールエンジンの式エバリュエーターとして。スクリプトはデータベーステーブルの列に保存され、実行時に評価されて、適用されるルールが決定されます。
- ETLエンジンのステップとして。基本的に、Excelファイルを読み取ることができるコンポーネントがいくつかあり、Pythonスクリプトを使用してデータを変換し、NHibernateエンティティを作成してデータベースに入力します。
- C#コンポーネントの動的構成スクリプト。
- 大量のデータセットから作成する必要があるいくつかのインジケーターの計算エンジン。 Parallel拡張機能とプリコンパイル済みスクリプトを組み合わせていますが、これまでのところパフォーマンスは良好です。
そのようなもの。パスと参照がすべて設定された状態でエンジンが適切に構成されたら、基本的にはほぼすべての目的でスクリプトを使用できます。
これらのほとんどすべてがasp.net mvcアプリケーションで実行されており、これまでのところ良好です。 ScriptEngineおよびScriptScopeなどの一部のコンポーネントはスレッドセーフであるため、IoCコンテナー(例:ウィンザー)内に保持されている構成済みのエンジンをコントローラー間で共有することもできます。
エディターに関しては、ほとんどの場合EditPlusです。 VS 2010のpythonエディターは、不安定な傾向がありますが、迅速な編集は問題ありません。
IronPythonの使用は自分用の簡単なプロトタイプの作成に限定されているため、あまり説明することはできません。ただし、IronPythonに固有のIDEを探している場合、 IronPython Studio はまずまずです。 Intellisenseの機能をいくつか提供しますが、少し不安定ですが、MSDNドキュメントウィンドウをまだ閉じないでください。他の.Netプロジェクトと同様に、インタラクティブにデバッグできます。また、GUIをそのようにする場合は、Visual Studio 2008フォームデザイナもサポートします。試したことはありませんが、TestDriven.netを使用したnUnitテストの実行もサポートしています。
残念ながら、VS 2008が提供する名前変更やその他のリファクタリング機能はサポートされていないようです。
テストスクリプトを実行するための組み込み環境でIPyを使用しています。
1& 2.コードの編集やリファクタリングのサポートがあまりないのは確かです。適切なVisual Studioのサポートがあれば素晴らしいでしょう。
3番目の点を無視-解釈とコンパイルは古くからの議論です。
Havenはまだインタラクティブなハッキングをあまり行っていないので、4番目の点についてはコメントできません。
Visual Studioデバッガーを使用してIPyスクリプトをデバッグします。
単体テストIDE統合についても知りません。
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
and
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のホットスポットに似ている場合、長時間実行すると、IronPythonはシミュレーションをより速く実行できます。
注意すべきもう1つの重要な点は、ブラックジャックシミュレーションは、CPythonのGILがスピードブーストの点でまったく価値のない複数のスレッドでのスポーンに容易に役立つことです。 IronPythonを使用すると、クアッドコアで400%の完全な高速化が得られます。これは本当に素晴らしいです。
コードはPythonの難解な機能を使用していません(これは良いことです)。つまり、IronPythonで100%変更せずに実行されました。
Iron Pythonは、残念ながら専門的にではなく、個人プロジェクトのRapid Development言語として使用しています。
Pythonは、使いやすさ、簡潔さ、コードの読みやすさ、シンプルさの点で非常に優れた言語です。これのいくつかは、動的言語であるだけでなく、その基本的な構文によるものです。
私はcpythonの第一人者ではありませんが、cpythonよりもIron Pythonから多くを得ることができます。現在、cpythonのTwistedライブラリへの移植版がないことに失望しています。これは、.NETで非常に役立つので、私が快適な唯一の拡張Pythonライブラリです。
また、C#でコーディングしているときに.NET構造をテストするためだけに対話型ウィンドウを使用します。
Foordの本を買ったばかりなので、今は勉強しているだけです。 Web開発に使用したいと思っていますが、残念ながらasp.net mvcでサポートされるまで待たなければなりません。また、.netフレームワークを利用できるため、Windowsシステムのスクリプトツールとして使用する予定です
職場では、SharePointオブジェクトモデルに対してIronPythonを使用します。 PowerShellスクリプトよりも大きいが、SharePointにアーティファクトとして展開する必要のない小さなプログラムの多くに最適です。 Visual Studioがインストールされていないサーバーでのラピッドプロトタイピングに最適です。通常、選択するエディターとしてNotepad ++を使用します。