Visual Studio の Python プロジェクト

Python アプリケーションは通常、フォルダーとファイルのみを使用して定義されます。 この構造は、アプリケーションが成長し、自動生成されたファイルや Web アプリケーション用の JavaScript などが含まれるようになると、複雑になる可能性があります。 Visual Studio プロジェクトは、複雑さを管理するのに役立ちます。 このプロジェクト (.pyproj ファイル) によって、自分のプロジェクトに関連付けられているすべてのソースとコンテンツ ファイルが識別されます。 これには、各ファイルのビルド情報が含まれており、ソース管理システムと統合するための情報が保持され、アプリケーションを論理コンポーネントに編成するのに役立ちます。

Python プロジェクトを開いた Visual Studio のソリューション エクスプローラーのスクリーンショット。

プロジェクトは常に Visual Studio ソリューション内で管理されます。 ソリューションには、拡張モジュールを実装する C++ プロジェクトを参照する Python プロジェクトなど、相互に参照する可能性のある任意の数のプロジェクトを含めることができます。 この関係を利用して、Visual Studio では Python プロジェクトのデバッグが開始されると、必要に応じて C++ プロジェクトが自動的に構築されます。 詳しくは、Visual Studio のソリューションおよびプロジェクトに関するページを参照してください。

Visual Studio には、数種類のアプリケーション構造をすばやく作成するためのさまざまな Python プロジェクト テンプレートが用意されています。 既存のフォルダー ツリーからプロジェクトを作成するテンプレートを選択することも、クリーンな空のプロジェクトを作成することもできます。 使用可能なテンプレートのリストについては、「プロジェクト テンプレート」セクションの表を参照してください。

Python プロジェクトを操作するためのヒント

Visual Studio で Python コードを実行するためにプロジェクトを使用する必要はありませんが、そうすることには利点があります。 作業を開始するときに、プロジェクトと Python の操作に関する次の考慮事項を確認してください。

  • Visual Studio 2019 以降では、Visual Studio のプロジェクトとソリューションのファイルを作成しなくても、Python コードが含まれるフォルダーを開いてコードを実行できます。

    この方法のガイド付き手順については、「クイック スタート: フォルダー内の Python コードを開いて実行する」の記事を参照してください。

  • Visual Studio で Python コードを実行するためにプロジェクトは必要ありません。 Visual Studio のすべてのバージョンが Python コードで適切に動作します。

    Python ファイルを単独で開くと、オートコンプリート、IntelliSense、デバッグ機能にすぐにアクセスできます。 ただし、プロジェクトなしでコードを操作することには、次のような潜在的な欠点がいくつかあります。

    • コードでは常に既定のグローバル環境が使用されるため、コードが別の環境用である場合は、間違った入力候補またはエラーが表示される可能性があります。
    • Visual Studio は、1 つのファイルが開かれたフォルダー内のすべてのファイルとパッケージを分析します。 このプロセスはかなりの CPU 時間を消費する可能性があります。
  • 既存のコードから Visual Studio プロジェクトを作成できます。 この方法は、「既存のファイルからプロジェクトを作成する」セクションで説明されています。

基本的なプロジェクト タスク: ファイル、環境、スタートアップ

Python コードでプロジェクトを使用する場合は、ファイルの追加、スタートアップ ファイルの割り当て、Python インタープリター環境の設定など、基本的なタスクを完了します。

アプリケーションを開発するときは、通常、さまざまな種類の新しいファイルをプロジェクトに追加する必要があります。 ファイルを追加するのは簡単です。 プロジェクトを右クリックし、[追加]>[既存の項目] の順に選び、追加するファイルの種類を参照して見つけます。 [追加]>[新しい項目] オプションを選ぶと、新しいファイルの作成に使用できる項目テンプレートを表示するダイアログが開きます。 オプションには、空の Python ファイル、Python クラス、単体テスト、Web アプリケーションに関連するさまざまなファイルが含まれます。 テスト プロジェクトでテンプレート オプションを調べて、ご利用のバージョンの Visual Studio で利用できる内容を確認できます。 詳細については、項目テンプレートのリファレンスを参照してください。

Python の各プロジェクトには、1 つのスタートアップ ファイルが割り当てられており、ソリューション エクスプローラーではこれは太字で示されています。 スタートアップ ファイルは、デバッグを開始するとき (F5 キーを押すか、[デバッグ]>[デバッグの開始] を選ぶ)、またはインタラクティブ ウィンドウでプロジェクトを実行するときに実行されます。 このウィンドウを開くには、キーボード ショートカットの Shift + Alt + F5 キーを押すか、[デバッグ]>[Python Interactive でプロジェクトを実行] を選びます。 スタートアップ ファイルを変更するには、使用するファイルを右クリックし、[スタートアップ項目として設定] (以前のバージョンの Visual Studio の場合は [スタートアップ ファイルとして設定]) を選びます。

選択したスタートアップ ファイルをプロジェクトから削除し、代替ファイルを選択しない場合、Visual Studio はプロジェクトを開始するためにどの Python ファイルを使用すればよいかを認識できません。 この場合、Visual Studio 2017 バージョン 15.6 以降ではエラーが表示されます。 以前のバージョンでは、Python インタープリターが実行されている状態で出力ウィンドウを開くか、出力ウィンドウが開いてすぐに閉じます。 このような動作が発生する場合は、スタートアップ ファイルが割り当てられていることを確認します。

ヒント

出力ウィンドウを開いたままにするには、プロジェクトを右クリックし、[プロパティ] 選びます。 ダイアログで [デバッグ] タブを選び、[インタープリター引数] フィールドに -i フラグを追加します。 この引数を指定すると、プログラムの完了後にインタープリターが対話モードになります。 ウィンドウは、キーボード ショートカット Ctrl+E+Enter キーを使用するなどして閉じるまで、開いたままになります。

新しいプロジェクトは常に既定のグローバル Python 環境と関連付けられます。 プロジェクトを別の環境 (仮想環境を含む) に関連付けるには、プロジェクト内の [Python 環境] ノードを右クリックします。 [環境の追加] を選び、必要な環境を選びます。 ツール バーの環境ドロップダウン コントロールを使用して、環境を選択したり、別の環境をプロジェクトに追加したりすることもできます。

Visual Studio の Python ツール バーの [環境の追加] コマンドを示すスクリーンショット。

アクティブな環境を変更するには、次の図に示すように、ソリューション エクスプローラーで目的の環境を右クリックし、[環境のアクティブ化] を選びます。 詳細については、プロジェクト用の環境の選択に関するページを参照してください。

Visual Studio で Python プロジェクトの環境をアクティブ化する方法を示すスクリーンショット。

プロジェクト テンプレート

Visual Studio では、ゼロからまたは既存のコードから Python プロジェクトを設定するさまざまな方法が用意されています。 テンプレートを使用するには、[ファイル]>[新規]>[プロジェクト] の順に選ぶか、ソリューション エクスプローラーでソリューションを右クリックして [追加]>[新しいプロジェクト] を選びます。 [新しいプロジェクト] ダイアログで、Python 固有のテンプレートを表示するには、Python を検索するか、[言語]>[Python] ノードを選択します。

Visual Studio で使用可能な Python テンプレートが含まれる新しいプロジェクト ダイアログを示すスクリーンショット。

Visual Studio バージョン 2022 では、次のテンプレートを使用できます。

Template 説明
既存の Python コードから フォルダー構造に存在する既存の Python コードから Visual Studio プロジェクトを作成します。
Python アプリケーション 単一の空のソース ファイルを使用して、新しい Python アプリケーションの基本的なプロジェクト構造を提供します。 既定では、プロジェクトは既定のグローバル環境のコンソール インタープリターで実行されます。 別の環境を割り当てることもできます。
Web プロジェクト Bottle、Django、Flask などのさまざまなフレームワークに基づく Web アプリ用のプロジェクトです。
バックグラウンド アプリケーション (IoT) デバイス上でバックグラウンド サービスとして実行する Python プロジェクトの配置をサポートします。 詳細については、Windows IoT デベロッパー センターを参照してください。
Python 拡張機能モジュール このテンプレートは、Visual Studio 2017 以降の Python ワークロードで Python ネイティブ開発ツールをインストールする場合、Visual C++ の下に表示されます (インストールに関するページを参照)。 このテンプレートは、「Python 用 C++ 拡張機能の作成」で説明されている構造と同様に、C++ 拡張 DLL のコア構造を提供します。

Visual Studio バージョン 2019 では、次のテンプレートを使用できます。 バージョン 2019 で使用できるすべてのテンプレートが、以前のバージョンの Visual Studio で使用できるわけではありません。

Template 説明
既存の Python コードから フォルダー構造に存在する既存の Python コードから Visual Studio プロジェクトを作成します。
Python アプリケーション 単一の空のソース ファイルを使用して、新しい Python アプリケーションの基本的なプロジェクト構造を提供します。 既定では、プロジェクトは既定のグローバル環境のコンソール インタープリターで実行されます。 別の環境を割り当てることもできます。
Web プロジェクト Bottle、Django、Flask などのさまざまなフレームワークに基づく Web アプリ用のプロジェクトです。
バックグラウンド アプリケーション (IoT) デバイス上でバックグラウンド サービスとして実行する Python プロジェクトの配置をサポートします。 詳細については、Windows IoT デベロッパー センターを参照してください。
Python 拡張機能モジュール このテンプレートは、Visual Studio 2017 以降の Python ワークロードで Python ネイティブ開発ツールをインストールする場合、Visual C++ の下に表示されます (インストールに関するページを参照)。 このテンプレートは、「Python 用 C++ 拡張機能の作成」で説明されている構造と同様に、C++ 拡張 DLL のコア構造を提供します。
IronPython アプリケーション IronPython を既定で使用し、.NET 言語との .NET の相互運用と混合モードのデバッグを有効にします。 このテンプレートは Python アプリケーション テンプレートに似ています。
IronPython WPF アプリケーション IronPython を使用して、プロジェクト構造にアプリケーション ユーザー インターフェイス用の Windows Presentation Foundation XAML ファイルを提供します。 Visual Studio は XAML UI デザイナーを提供し、コードビハインドを Python で記述でき、アプリケーションはコンソールを表示しないで実行します。
IronPython Silverlight Web ページ Silverlight を使用してブラウザーで実行される IronPython プロジェクトを作成します。 アプリケーションの Python コードは、スクリプトとして Web ページに含まれます。 定型スクリプト タグは JavaScript コードをプルダウンして、Silverlight 内で実行されている IronPython を初期化し、そこから Python コードが DOM と対話できるようになります。
IronPython Windows フォーム アプリケーション IronPython と、Windows フォームでコードを使用して作成された UI を使用してプロジェクト構造を構築します。 アプリケーションはコンソールを表示しないで実行します。

Note

Python はインタープリター言語であるため、Visual Studio の Python プロジェクトでは、C# などの他のコンパイル済み言語プロジェクトと同様にスタンドアロンの実行可能ファイルは生成されません。 詳細については、質問と回答のセクションをご覧ください。

既存のファイルからプロジェクトを作成する

以下の手順に従って、既存のファイルからプロジェクトを作成します。

重要

以下のプロセスでは、元のソース ファイルが移動またはコピーされることはありません。 ファイルのコピーで作業する場合は、まずフォルダーを複製してからプロジェクトを作成します。

  1. Visual Studio を起動して、[ファイル]>[新規]>[プロジェクト] の順に選択します。

  2. [新しいプロジェクトの作成] ダイアログ内で、python を検索し、既存の Python コードからテンプレートを選択して、[次へ] を選択します。

  3. [新しいプロジェクトの構成] ダイアログ内で、プロジェクトの [名前][場所] を入力し、プロジェクトを含めるソリューションを選択して、[作成] を選択します。

  4. 既存の Python コードから新しいプロジェクトを作成ウィザードで、既存のコードへのフォルダー パスを設定し、ファイルの種類のフィルターを設定し、プロジェクトで必要な検索パスをすべて指定した後、[次へ] を選びます。 検索パスが不明な場合は、このフィールドは空白のままにします。

    フォルダー パス、ファイル タイプ フィルター、検索パスを選択するなど、既存のコードからプロジェクトを新規作成する様子を示すスクリーンショット。

  5. 次のページで、プロジェクトのスタートアップ ファイルを選びます。 Visual Studio により、既定のグローバル Python インタープリターとバージョンが選択されます。 環境はドロップダウン メニューを使用して変更できます。 準備ができたら、 [次へ] を選択します。

    Note

    このダイアログに表示されるのは、ルート フォルダー内のファイルのみです。 必要なファイルがサブフォルダーにある場合は、スタートアップ ファイルを空白のままにします。 スタートアップ ファイルは、手順で説明するように、後からソリューション エクスプローラー内で設定できます。

    スタートアップ ファイルと Python 環境の選択などが示されている [既存のコードからの新しいプロジェクトの作成] ウィンドウのスクリーンショット。

  6. プロジェクト ファイル (ディスク上の .pyproj ファイル) を格納する場所を選択します。 必要な場合は、仮想環境の自動検出を組み込み、さまざまな Web フレームワークに対してプロジェクトをカスタマイズすることもできます。 これらのオプションがよく分からない場合は、フィールドは既定値に設定したままにします。

    [既存のコード] ウィンドウからプロジェクトを新規作成する様子を示したスクリーンショット。プロジェクト ファイルの場所やその他のオプションをここで設定する

  7. 完了 を選択します。

    Visual Studio によってプロジェクトが作成され、ソリューション エクスプローラーで開かれます。 .pyproj ファイルを別の場所に移動する場合は、ソリューション エクスプローラーでファイルを選んでから、ツール バーで [ファイル]>[名前を付けて保存] の順に選びます。 このアクションにより、プロジェクト内のファイル参照は更新されますが、コード ファイルはどれも移動されません。

  8. 別のスタートアップ ファイルを設定するには、ソリューション エクスプローラーでそのファイルを見つけて、ファイルを右クリックし、[スタートアップ ファイルとして設定] を選びます。

リンク ファイル

リンク ファイルは、プロジェクトに取り込まれますが、通常はアプリケーションのプロジェクト フォルダーの外部に存在するファイルです。 これらのファイルは、ソリューション エクスプローラーでは通常のファイルとして表示され、ショートカットがオーバーレイされたアイコン が表示されます。

リンク ファイルは、.pyproj 要素を使用して <Compile Include="..."> ファイル内で指定します。 リンク ファイルは、ディレクトリ構造の外部で相対パスを使用する場合、暗黙的になります。 ファイルでソリューション エクスプローラー内のパスが使用されている場合、リンク ファイルは明示的になります。 次の例は、明示的にリンクされたファイルを示しています。

<Compile Include="..\test2.py">
    <Link>MyProject\test2.py</Link>
</Compile>

リンク ファイルは、次の条件下では無視されます。

  • リンク ファイルに Link メタデータが含まれており、Include 属性で指定されたパスがプロジェクト ディレクトリ内に存在する。
  • リンク ファイルによってプロジェクト階層内に存在するファイルが複製される。
  • リンク ファイルに Link メタデータが含まれており、Link パスがプロジェクト階層の外部の相対パスである。
  • リンク パスがルート指定されている。

リンク ファイルの使用

既存の項目をリンクとして追加するには、ファイルを追加するプロジェクトのフォルダーを右クリックし、[追加]>[既存の項目] を選びます。 ダイアログでファイルを選び、[追加]>[リンクとして追加] を選びます。 競合するファイルがない場合、このコマンドによって選択したフォルダーにリンクが作成されます。 ただし、同じ名前の既存のファイルがある場合、またはそのファイルへのリンクがプロジェクト内に既に存在する場合は、リンクは追加されません。

プロジェクト フォルダーに既に存在するファイルにリンクしようとすると、ファイルはリンクではなく通常のファイルとして追加されます。 ファイルをリンクに変換するには、[ファイル]>[名前を付けて保存] を選び、プロジェクト階層外の場所にファイルを保存します。 Visual Studio によって、ファイルがリンクに自動的に変換されます。 同様に、[ファイル]>[名前を付けて保存] を使ってプロジェクト階層内のどこかにファイルを保存することにより、リンクをファイルに戻すことができます。

ソリューション エクスプローラーでリンク ファイルを移動すると、リンクは移動されますが、実際のファイルは影響を受けません。 同様に、リンクを削除すると、リンクだけが削除されて、ファイルには影響ありません。

リンク ファイルの名前を変更することはできません。

リファレンス

Visual Studio のプロジェクトは、プロジェクトと拡張機能への参照の追加をサポートし、参照はソリューション エクスプローラー[参照] ノードに表示されます。

Visual Studio で Python プロジェクトに拡張機能参照を追加する方法を示すスクリーンショット。

通常、拡張機能の参照は、プロジェクト間の依存関係を示し、設計時に IntelliSense するか、またはコンパイル時にリンクを提供するために使われます。 参照は、Python プロジェクトでも同様の方法で使用されますが、Python の動的な性質のため、主として設計時に強化された IntelliSense を提供するために使われます。 また、Microsoft Azure へのデプロイに使用して、他の依存関係をインストールすることもできます。

拡張機能モジュールを操作する

.pyd ファイルへの参照により、生成されるモジュールに対する IntelliSense が有効になります。 .pyd ファイルは Python インタープリターに読み込まれ、その型と関数が確認されます。 また、Visual Studio は、関数でシグネチャ ヘルプを提供するためにドキュメントの文字列の解析を試みます。

ディスクで拡張モジュールが更新された場合、Visual Studio はバックグラウンドでモジュールを再分析します。 このアクションによる実行時動作への影響はありませんが、分析が完了するまで一部の入力候補が使えなくなります。

また、そのモジュールを含むフォルダーへの検索パスの追加が必要になることもあります。

.NET プロジェクトを操作する

IronPython を使う場合は、.NET アセンブリへの参照を追加して IntelliSense を有効にすることができます。 ソリューション内の .NET プロジェクトの場合は、Python プロジェクト内の [参照] ノードを右クリックし、[参照の追加] を選びます。 ダイアログで [プロジェクト] タブを選び、目的のプロジェクトを参照します。 別にダウンロードした DLL の場合は、代わりに [参照] タブを選び、目的の DLL を参照します。

IronPython の参照は、clr.AddReference('<AssemblyName>') メソッドへの呼び出しが行われるまで使用できないため、適切な clr.AddReference メソッド呼び出しをアセンブリに追加する必要もあります。 通常、この呼び出しはコードの先頭に追加されます。 たとえば、(Visual Studio 2019 で使用できる) IronPython Windows フォーム アプリケーション プロジェクト テンプレートを使って Visual Studio で作成したコードには、ファイルの先頭に次の 2 つの呼び出しが含まれます。

import clr
clr.AddReference('System.Drawing')
clr.AddReference('System.Windows.Forms')

from System.Drawing import *
from System.Windows.Forms import *

# Other code omitted

WebPI プロジェクトを操作する

デプロイ用の Web Platform Installer (WebPI) 製品エントリへの参照を Microsoft Azure Cloud Services に追加すると、WebPI フィード経由で追加のコンポーネントをインストールできます。 既定では、表示されるフィードは Python 固有であり、Django、CPython、およびその他の主要なコンポーネントが含まれます。 次の図に示すように、独自のフィードを選ぶこともできます。 Microsoft Azure に発行すると、参照されているすべての製品がセットアップ タスクによってインストールされます。

重要

WebPI プロジェクトは、Visual Studio 2017 または Visual Studio 2019 では使用できません。

Visual Studio の Web Platform Installer (WebPI) 参照を示すスクリーンショット。