Dela via


Köra pipelines med Anaconda-miljöer

Azure DevOps Services

Lär dig hur du konfigurerar och använder Anaconda med Python i din pipeline. Anaconda är en Python-distribution för datavetenskap och maskininlärning.

Kom igång

Följ de här anvisningarna för att konfigurera en pipeline för en Python-exempelapp med Anaconda-miljön.

  1. Logga in på din Azure DevOps-organisation och gå till projektet.

  2. I projektet navigerar du till sidan Pipelines . Välj sedan åtgärden för att skapa en ny pipeline.

  3. Gå igenom stegen i guiden genom att först välja GitHub som plats för källkoden.

  4. Du kan omdirigeras till GitHub för att logga in. I så fall anger du dina GitHub-autentiseringsuppgifter.

  5. När listan med lagringsplatser visas väljer du din Anaconda-exempellagringsplats.

  6. Azure Pipelines analyserar koden på lagringsplatsen och identifierar en befintlig azure-pipelines.yml fil.

  7. Markera Kör.

  8. En ny körning startas. Vänta tills körningen har slutförts.

Dricks

Om du vill göra ändringar i YAML-filen enligt beskrivningen i det här avsnittet väljer du pipelinen på sidan Pipelines och sedan Redigera azure-pipelines.yml filen.

Lägga till conda i systemsökvägen

värdbaserade agenter utelämnas PATH conda som standard för att förhindra att python-versionen står i konflikt med andra installerade versioner. Agentkommandot task.prependpath gör det tillgängligt för alla efterföljande steg.

- bash: echo "##vso[task.prependpath]$CONDA/bin"
  displayName: Add conda to PATH

Skapa en miljö

Från kommandoradsargument

Kommandot conda create skapar en miljö med de argument som du skickar den till.

- bash: conda create --yes --quiet --name myEnvironment
  displayName: Create Anaconda environment

Från YAML

Du kan checka in en environment.yml fil till lagringsplatsen som definierar konfigurationen för en Anaconda-miljö.

- script: conda env create --quiet --file environment.yml
  displayName: Create Anaconda environment

Kommentar

Om du använder en lokalt installerad agent och inte tar bort miljön i slutet får du ett fel i nästa version eftersom miljön redan finns. Lös problemet genom att --force använda argumentet : conda env create --quiet --force --file environment.yml.

Kommentar

Om du använder lokalt installerade agenter som delar lagring och kör jobb parallellt med samma Anaconda-miljöer kan det uppstå konflikter mellan dessa miljöer. Lös problemet genom att --name använda argumentet och en unik identifierare som argumentvärde, till exempel en sammanlänkning med $(Build.BuildNumber) byggvariabeln.

Installera paket från Anaconda

Följande YAML installerar scipy paketet i conda-miljön med namnet myEnvironment.

- bash: |
    source activate myEnvironment
    conda install --yes --quiet --name myEnvironment scipy
  displayName: Install Anaconda packages

Köra pipelinesteg i en Anaconda-miljö

Kommentar

Varje byggsteg körs i sin egen process. När du aktiverar en Anaconda-miljö kommer den att redigera PATH och göra andra ändringar i den aktuella processen. Därför måste en Anaconda-miljö aktiveras separat för varje steg.

- bash: |
    source activate myEnvironment
    python -m pytest --junitxml=junit/unit-test.xml
  displayName: pytest

- task: PublishTestResults@2
  inputs:
    testResultsFiles: 'junit/*.xml'
  condition: succeededOrFailed()

Vanliga frågor och svar

Varför får jag felmeddelandet "Behörighet nekad"?

På värdbaserad macOS har agentanvändaren inte ägarskap för katalogen där Miniconda är installerat. En korrigering finns på fliken "Värdbaserad macOS" under Lägg till conda i systemsökvägen.

Varför slutar mitt bygge att svara i ett conda create eller conda install ett steg?

Om du glömmer att skicka --yeskommer conda att stoppa och vänta på användarinteraktion.

Varför stoppas mitt skript i Windows när det har aktiverat miljön?

I Windows activate är ett Batch-skript. Du måste använda call kommandot för att fortsätta köra skriptet efter aktivering. Se exempel på användning call i en pipeline.

Hur kan jag köra mina tester med flera versioner av Python?

Se Skapa Python-appar i Azure Pipelines.