Anaconda 環境でパイプラインを実行する
Azure DevOps Services
パイプラインで Anaconda と Python を設定して使用する方法について説明します。 Anaconda は、データ サイエンスと機械学習のための Python ディストリビューションです。
はじめに
以下の手順のようにして、Anaconda 環境でのサンプル Python アプリ用にパイプラインを設定します。
Azure DevOps 組織にサインインし、プロジェクトに移動します。
プロジェクト内で、 [パイプライン] ページに移動します。 次に、新しいパイプラインを作成するためのアクションを選択します。
最初に、ソース コードの場所として GitHub を選択し、ウィザードの手順を実行します。
サインインするために GitHub にリダイレクトされる場合があります。 その場合は、GitHub の資格情報を入力します。
リポジトリの一覧が表示されたら、Anaconda サンプル リポジトリを選びます。
Azure Pipelines は、リポジトリ内のコードを分析して、既存の
azure-pipelines.yml
ファイルを検出します。[実行] を選択します。
新しい実行が開始されます。 実行が終了するまで待ちます。
ヒント
このトピックで説明するように YAML ファイルを変更するには、[パイプライン] ページでパイプラインを選んでから、azure-pipelines.yml
ファイルを編集します。
システム パスに Conda を追加する
ホステッド エージェントでは、Python のバージョンがインストールされている他のバージョンと競合しないように、Conda は既定で PATH
から除外されています。 task.prependpath
エージェント コマンドを使うと、後続のすべてのステップでそれを使用できるようになります。
- bash: echo "##vso[task.prependpath]$CONDA/bin"
displayName: Add conda to PATH
環境の作成
コマンド ライン引数から
conda create
コマンドは、ユーザーが渡した引数を使って環境を作成します。
- bash: conda create --yes --quiet --name myEnvironment
displayName: Create Anaconda environment
YAML から
Anaconda 環境の構成を定義する environment.yml
ファイルを、リポジトリにチェックインできます。
- script: conda env create --quiet --file environment.yml
displayName: Create Anaconda environment
注意
セルフホステッド エージェントを使っていて、最後に環境を削除しない場合は、環境が既に存在するため、次のビルドでエラーが発生します。 解決するには、--force
引数を使います: conda env create --quiet --force --file environment.yml
。
注意
ストレージを共有するセルフホステッド エージェントを使い、同じ Anaconda 環境を使ってジョブを並列で実行している場合は、それらの環境間で競合が発生する可能性があります。
これを解決するには、$(Build.BuildNumber)
ビルド変数との連結のように、--name
引数を使い、引数の値として一意識別子を指定します。
Anaconda からパッケージをインストールする
次の YAML は、myEnvironment
という名前の Conda 環境に scipy
パッケージをインストールします。
- bash: |
source activate myEnvironment
conda install --yes --quiet --name myEnvironment scipy
displayName: Install Anaconda packages
Anaconda 環境でパイプラインのステップを実行する
注意
各ビルド ステップは独自のプロセスで実行されます。
Anaconda 環境をアクティブにすると、PATH
が編集され、その現在のプロセスに対して他の変更が行われます。
したがって、Anaconda 環境はステップごとに個別にアクティブにする必要があります。
- bash: |
source activate myEnvironment
python -m pytest --junitxml=junit/unit-test.xml
displayName: pytest
- task: PublishTestResults@2
inputs:
testResultsFiles: 'junit/*.xml'
condition: succeededOrFailed()
よく寄せられる質問
"アクセス許可が拒否されました" というエラーが表示されるのはなぜですか?
ホステッド macOS では、エージェント ユーザーは Miniconda がインストールされているディレクトリの所有権を持っていません。 修正については、「システム パスに Conda を追加する」の「ホステッド macOS」タブを参照してください。
conda create
または conda install
ステップでビルドの応答が停止するのはなぜですか?
--yes
を渡すのを忘れた場合、Conda は停止し、ユーザーの操作を待ちます。
Windows 上のスクリプトが環境をアクティブにした後で停止するのはなぜですか?
Windows では、activate
はバッチ スクリプトです。 アクティブ化の後で、call
コマンドを使ってスクリプトの実行を再開する必要があります。
パイプラインでの call
の使用例を参照してください。
Python の複数のバージョンでテストを実行するにはどうすればよいですか?
Azure Pipelines での Python アプリのビルドに関する記事をご覧ください。