Anaconda 環境でパイプラインを実行する

Azure DevOps Services

パイプラインで Anaconda と Python を設定して使用する方法について説明します。 Anaconda は、データ サイエンスと機械学習のための Python ディストリビューションです。

はじめに

以下の手順のようにして、Anaconda 環境でのサンプル Python アプリ用にパイプラインを設定します。

  1. Azure DevOps 組織にサインインし、プロジェクトに移動します。

  2. プロジェクト内で、 [パイプライン] ページに移動します。 次に、新しいパイプラインを作成するためのアクションを選択します。

  3. 最初に、ソース コードの場所として GitHub を選択し、ウィザードの手順を実行します。

  4. サインインするために GitHub にリダイレクトされる場合があります。 その場合は、GitHub の資格情報を入力します。

  5. リポジトリの一覧が表示されたら、Anaconda サンプル リポジトリを選びます。

  6. Azure Pipelines は、リポジトリ内のコードを分析して、既存の azure-pipelines.yml ファイルを検出します。

  7. [実行] を選択します。

  8. 新しい実行が開始されます。 実行が終了するまで待ちます。

ヒント

このトピックで説明するように 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 アプリのビルドに関する記事をご覧ください。