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

Azure DevOps Services

パイプラインで Python で Anaconda を設定して使用する方法について説明します。 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 バージョンが他のPATHインストール済みバージョンと競合しないように、conda は既定では使用されません。 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 環境を使用してジョブを並列で実行している場合、それらの環境間で競合が発生する可能性があります。 解決するには、引数と一意の識別子を引数の値として使用 --name します (ビルド変数との $(Build.BuildNumber) 連結など)。

Anaconda からパッケージをインストールする

次の YAML は、 という名前myEnvironmentscipy conda 環境にパッケージをインストールします。

- 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()

よく寄せられる質問

"アクセス許可が拒否されました" というエラーが表示されるのはなぜですか?

Hosted macOS では、エージェント ユーザーは Miniconda がインストールされているディレクトリの所有権を持っていません。 修正については、「 システム パスに conda を追加する」の下の「Hosted macOS」タブを参照してください。

ビルドが または conda install ステップで応答しなくなるのはconda createなぜですか?

を渡 --yesすのを忘れた場合、conda は停止し、ユーザーの操作を待機します。

環境をアクティブ化した後、Windows 上のスクリプトが停止するのはなぜですか?

Windows では、 activate は Batch スクリプトです。 アクティブ化後にスクリプトの call 実行を再開するには、 コマンドを使用する必要があります。 パイプラインでの の使用call例を参照してください。

複数のバージョンの Python でテストを実行するにはどうすればよいですか?

「Azure Pipelines で Python アプリをビルドする」を参照してください。