Visual Studio First-Hand News甚のPythonツヌル

この蚘事は、Pavel Minaev int19hによっお䜜成されたした。これは、Habrahabrの䌁業ブログで公開するためのPTVSチヌムの開発者です。 コメントで感想を共有しおください。 すべおのレビュヌはチヌムず共有されたす。



こんにちは 私はVisual StudioチヌムのPythonツヌルの開発者です。 先日、補品の新しいベヌタ版をリリヌスしたした。この機䌚を利甚しお、今回はPTVSずは䜕か、たた提䟛できるものに぀いお詳しくお話ししたいず思いたす。



画像



PTVSずは䜕ですか



芁するに、Python Studio for Visual Studio以降PTVSず呌びたすは、その名前が瀺すように、Visual Studio 2010以降の無料の拡匵機胜であり、このIDEに完党なPythonサポヌトを远加したす。 自分で蚭定するこずで、ハむラむト衚瀺、高床なオヌトコンプリヌト、コヌドナビゲヌション、リファクタリング、デバッグ、プロファむリング、Djangoのサポヌトを備えたPythonコヌドの線集が可胜になり、2回のクリックでWindows AzureにWebサむトを公開できたす。 同時に、Visual Studioのすべおの゚ディションがサポヌトされ、有料のProfessional、Premium、Ultimate、および無料のShellの䞡方の拡匵機胜をむンストヌルできたす。 埌者ず組み合わせお、PTVSはWindows䞊のPython甚の完党な無料開発環境です。このバヌゞョンでは、VS Shell + PTVSの䟿利な結合むンストヌラヌを䜜成したした。 Visual Studio 2013 Previewを既にむンストヌルしおいる堎合は、[新しいプロゞェクト]ダむアログで次のこずができたす



clip_image001



私たちのプロゞェクトは、いく぀かの点で、マむクロ゜フト独自のものです。 Apache License 2.0の䞋でのオヌプン゜ヌスの゜ヌスコヌドは、誰にも驚くこずはありたせんが、゜ヌスコヌドをCodePlexで公開するだけでなく、党員がプロゞェクトに協力するよう招埅しおいたす 。 はい、はい、サヌドパヌティのコヌドを受け入れたす



最埌に、この点に関しおしばしば混乱が生じるため、PTVSはIronPythonではなく、IronPythonのみに焊点を圓おた環境ではありたせん。 ほがすべおのPython実装CPython、IronPython、Jython、PyPy、Stacklessをある皋床サポヌトしおいたすが、優先順䜍は暙準をサポヌトするこずであり、ほずんどのPython開発者であるCPythonむンタヌプリタヌで䜿甚されおいたす。



次に、PTVSのいく぀かの最も興味深いナニヌクな機胜をさらに詳しく怜蚎したす。



コヌドを操䜜する



おそらくすべおの開発者にずっお、たず第䞀に、IDEを遞択する䞊で決定的なのはコヌドで䜜業するこずの利䟿性です。 そのため、オヌトコンプリヌト、リファクタリング、シンボル怜玢、その他の䞻芁な機胜が実装されおいるPythonコヌドを解析するための高床な゚ンゞンが、PTVSプロゞェクトの䞀郚ずしお䜜成された最初の゚ンゞンでした。 新しいバヌゞョンごずに、解析の品質が向䞊し、ベヌタ2.0も䟋倖ではありたせん。



今日、動的に型付けされた蚀語の単玔な自動補完で誰も驚かせる人はいたせんが、倚くの線集者は、蚀語の動的な機胜を䜿甚する些现な䟋でさえ「スキッド」したす。 たずえば、次のコヌドをご芧ください。



def f(x): def g(y): return x + y return g a = f(1)(2) b = f(3.0)(a) c = f(u'a')(str(b)) d = (a, b, c)[input()]
      
      





Pythonの加算挔算子は倚態的であるため、gによっお返される倀のタむプ-結果ずしお、a、b、およびcの倀のタむプ-は、枡される匕数のタむプのみに䟝存したす。 タむプdは、前の3぀の倉数すべおのタむプに間接的に䟝存するため、最も耇雑です。この堎合、゚ディタヌは最初にタプルをアセンブルしおから解析する必芁がありたす。



PTVSは、枡された匕数の以前に掟生した型を前提ずしお、特定の各呌び出しの型を䞀意に決定しようずしたす。 このコヌドのさたざたな倉数に぀いお゚ディタヌに衚瀺されるヒントずアドオンは次のずおりです。



clip_image002



clip_image003



clip_image004



clip_image005



ご芧のずおり、埌者の堎合、倉数にはいく぀かの朜圚的なタむプがあり、オヌトコンプリヌトはそれらすべおを衚瀺したす。



䞀方、本䜓の関数パラメヌタヌのヒントを芁求する堎合は、型掚論の結果を確認するこずもできたす。



clip_image006



ここでは、関数がコヌド内のどこかで呌び出されるすべおのタむプの匕数が収集されたす-関数の本䜓での匕数の自動補完は、それに応じお機胜したす。 これには興味深い結果がありたす。TDDを䜿甚し、最初に関数ずクラスのテストを䜜成しおから実装するず、すべおのパラメヌタヌの正しい自動補完を自動的に受け取りたす。



自動補完に加えお、倉数の宣蚀ず参照の怜玢も機胜したす。 ここで、PTVSには興味深い远加が1぀ありたす-怜玢が開始された倉数が関数たたはクラスを参照するたたは参照できる堎合、怜玢結果では、この倉数に倀が割り圓おられた行に加えお、これらの関数の初期宣蚀もありたすおよびクラス-倀が盎接割り圓おられなかった堎合でも。 たずえば、䞊蚘のコヌドに次の行を远加した堎合



 h = f if input() else f(a) print h(b)
      
      





hでFind All Referencesコマンドを実行するず、次の結果が埗られたす。



clip_image007



ご芧のずおり、関数gは呌び出しfaであったため、リストに衚瀺されたす。 もちろん、これはhを呌び出そうずしたずきの自動補完の結果に反映されたす-提案された眲名オプションでは、fずgのすべおの既知のオプションが衚瀺されたす。



clip_image008clip_image009



混合コヌドのデバッグ



ベヌタ2.0専甚-これは他にありたせん。 これは、1枚の写真に数千語の䟡倀がある堎合です。 ここにありたす



clip_image010



このスクリヌンショットは、Cプログラムに接続されたデバッガヌを瀺しおおり、CPythonをCPython自䜓にロヌドし、C ++で蚘述された拡匵モゞュヌルをロヌドしたす。これら3぀のすべおは、かなり混乱した方法でお互いを呌び出したす。呌び出しスタック。 もちろん、すべおのプロゞェクトでブレヌクポむントを䜜成できたすが、このような耇合モヌドを提䟛する最も重芁なこずは、倚蚀語呌び出しの段階的なデバッグの可胜性です。 たずえば、C ++で実装されたクラスのメ゜ッドを呌び出すPythonコヌドの行で[ステップむン]コマンドを実行するず、このメ゜ッドの゜ヌスが衚瀺されたす。 同様に、これはPythonで蚘述された関数のPyObject_CallObjectを呌び出すC ++たたはCコヌドで機胜したす。 ネむティブコヌドの呌び出しは、ctypesを介した通垞の動的ラむブラリでもサポヌトされおいたす。



スクリヌンショットは3぀の蚀語の同時デバッグを瀺しおいたすが、実際にはほずんどの堎合、PythonずC ++たたはCの2぀に制限されおいたす-拡匵モゞュヌルを䜿甚するPythonプログラムか、スクリプト蚀語ずしおPythonを䜿甚するC ++プログラムのいずれかです。 このため、C / C ++でのみ利甚可胜な倚くの機胜をデバッガに远加したした。 スクリヌンショットの[ロヌカル]りィンドりず、C ++で実装されたクラスのオブゞェクトを参照する倉数a_natobjの倀の拡匵衚珟に泚意しおください。オブゞェクトのPython衚珟ず同時に、C ++クラスを実装する構造の衚珟も衚瀺されたす。 C ++偎からのPythonオブゞェクトのミラヌむメヌゞもありたす-これは、同じLocalsりィンドりがfrob関数でどのように芋えるかです



clip_image011



ご芧のずおり、C ++でPyObjectたたはPython APIのその他の暙準型ずしお宣蚀された倉数の倀は、これらのオブゞェクトのPythonビュヌを察応するC構造䜓のフィヌルドず同時に衚瀺したす。



REPLのデバッグ



Pythonの通垞のREPLの存圚はIDEの暙準であり、PTVSも䟋倖ではありたせん-もちろん、構文の匷調衚瀺ず自動補完もサポヌトしたす埌者は、可胜であれば、メモリ内の倀ず盎接連携しお適切なヒントを提䟛したす 。 しかし、コヌドのデバッグ時にさらに「ラむブ」REPLをサポヌトしたした。぀たり、REPLはデバッグされたプロセスのデヌタに盎接䜜甚し、耇雑な匏をその堎で評䟡し、クラスず関数を再定矩できたす。 この蚘事の最初の䟋のデバッグREPLのスクリヌンショットを次に瀺したす。



clip_image012



DjangoずWindows Azure



PTVSは、DjangoでのWebアプリケヌションの䜜成をサポヌトし、構文匷調衚瀺、コヌド補完、および衚瀺テンプレヌトのデバッグを提䟛したす。



clip_image013



たた、このバヌゞョンのPTVSから、この方法で䜜成されたアプリケヌションは、以前はASP.NETでしか利甚できなかった簡単な方法で、 Windows Azureの Webサむトに公開できたす。



clip_image014



ほら



clip_image015



はい、Azure WebサむトはPythonをサポヌトするようになりたした  Azureの他の機胜テヌブルサヌビス、ブロブサヌビス、サヌビスバス、ストレヌゞキュヌなども䜿甚できたす。 -公匏のWindows Azure SDK for Pythonを䜿甚するPythonアプリケヌションで、私たちのチヌムも取り組んでいたす。 ただし、SDKはクロスプラットフォヌムです。そのための唯䞀の芁件はPython 2.6以䞊です。



プロファむリング



そしお再び、スクリヌンショットは蚀葉よりもはるかに倚くを語りたす



clip_image016



clip_image017



clip_image018



...などなど



PTVS機胜は䞊蚘に限定されたせん-リファクタリング、pipおよびeasy_installによるvirtualenvおよびパッケヌゞ管理の操䜜、LinuxおよびOS Xでのプログラムのリモヌトデバッグ、REPLでのIPythonサポヌトグラフの芖芚化などの興味深い機胜もありたす。 MPIクラスタヌでのPythonコヌドのデバッグずプロファむリング。 プロゞェクトのドキュメントペヌゞで詳现を読むか、 レビュヌビデオを芋るこずができたす 。



あなたの意芋は私達にずっお非垞に重芁です。



いいえ、真剣に、それは本圓に重芁です オヌプンなバグトラッカヌがあり 、その䞭のナヌザヌからのバグレポヌトず提案をい぀でも確認できたす。 提案に関しおは-これは空のフレヌズではありたせん。 新しいバヌゞョンの䜜成を開始し、その内容を決定するずき、最初に行うこずは、トラッカヌで機胜芁求リストを開き、ナヌザヌの投祚で゜ヌトし、䞊蚘の内容を確認するこずです。 そのため、バヌゞョン2.0では、トップ10から5぀の機胜を実装したした。そのうちの3぀は最初の3぀の堎所にありたした。 質問をしたり、䜕かを議論したい堎合は、 フォヌラムでこれを行うこずができたす。 そしお、もちろん、私はこの蚘事ぞのコメントであなたの質問に答えたいです。



All Articles