Personalizzare Python per Azure Pipelines
È possibile usare Azure Pipelines per compilare le app Python senza dover configurare alcuna infrastruttura personalizzata. Gli strumenti comunemente usati per compilare, testare ed eseguire app Python, ad esempio pip, vengono preinstallati negli agenti ospitati da Microsoft in Azure Pipelines.
Per creare la prima pipeline con Python, vedere la guida introduttiva a Python.
Usare una versione specifica di Python
Per usare una versione specifica di Python nella pipeline, aggiungere l'attività Usa versione Python ad azure-pipelines.yml. Questo frammento di codice imposta la pipeline per l'uso di Python 3.11:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.11'
Usare più versioni di Python
Per eseguire una pipeline con più versioni di Python, ad esempio per testare un pacchetto su tali versioni, definire un con una job
matrix
delle versioni di Python. Impostare quindi l'attività UsePythonVersion
per fare riferimento alla matrix
variabile.
jobs:
- job: 'Test'
pool:
vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-latest'
strategy:
matrix:
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
È possibile aggiungere attività da eseguire usando ogni versione di Python nella matrice.
Eseguire script Python
Per eseguire script Python nel repository, usare un script
elemento e specificare un nome file. Ad esempio:
- script: python src/example.py
È anche possibile eseguire script Python inline con l'attività Script Python:
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
Per parametrizzare l'esecuzione dello script, usare l'attività PythonScript
con arguments
i valori per passare argomenti al processo in esecuzione. È possibile usare sys.argv
o la libreria più sofisticata argparse
per analizzare gli argomenti.
- task: PythonScript@0
inputs:
scriptSource: inline
script: |
import sys
print ('Executing script file is:', str(sys.argv[0]))
print ('The arguments are:', str(sys.argv))
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--world", help="Provide the name of the world to greet.")
args = parser.parse_args()
print ('Hello ', args.world)
arguments: --world Venus
Installare le dipendenze
È possibile usare gli script per installare pacchetti PyPI specifici con pip
. Ad esempio, questo YAML installa o aggiorna pip
e i setuptools
pacchetti e wheel
.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Requisiti di installazione
Dopo l'aggiornamento pip
e gli amici, un passaggio successivo tipico consiste nell'installare le dipendenze da requirements.txt:
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Esecuzione dei test
Usare gli script per installare ed eseguire vari test nella pipeline.
Eseguire test lint con flake8
Per installare o aggiornare flake8
e usarlo per eseguire test lint, usare questo YAML:
- script: |
python -m pip install flake8
flake8 .
displayName: 'Run lint tests'
Eseguire il test con pytest e raccogliere le metriche di copertura con pytest-cov
Usare questo YAML per installare pytest
e pytest-cov
, eseguire test, risultati dei test di output in formato JUnit e risultati del code coverage di output in formato XML Cobertura:
- script: |
pip install pytest pytest-azurepipelines
pip install pytest-cov
pytest --doctest-modules --junitxml=junit/test-results.xml --cov=. --cov-report=xml
displayName: 'pytest'
Eseguire test con Tox
Azure Pipelines può eseguire processi di test Tox paralleli per suddividere il lavoro. In un computer di sviluppo è necessario eseguire gli ambienti di test in serie. Questo esempio usa tox -e py
per eseguire qualsiasi versione di Python sia attiva per il processo corrente.
- job:
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'
steps:
- task: UsePythonVersion@0
displayName: 'Use Python $(python.version)'
inputs:
versionSpec: '$(python.version)'
- script: pip install tox
displayName: 'Install Tox'
- script: tox -e py
displayName: 'Run Tox'
Pubblicare i risultati dei test
Aggiungere l'attività Pubblica risultati test per pubblicare i risultati del test JUnit o xUnit nel server:
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for Python $(python.version)'
Pubblicare i risultati del code coverage
Aggiungere l'attività Pubblica risultati code coverage per pubblicare i risultati del code coverage nel server. È possibile visualizzare le metriche di copertura nel riepilogo della compilazione e scaricare i report HTML per un'ulteriore analisi.
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
Creare un pacchetto e recapitare il codice
Per eseguire l'autenticazione con twine
, usare l'attività Twine Authenticate per archiviare le credenziali di autenticazione nella PYPIRC_PATH
variabile di ambiente.
- task: TwineAuthenticate@0
inputs:
artifactFeed: '<Azure Artifacts feed name>'
pythonUploadServiceConnection: '<twine service connection from external organization>'
Aggiungere quindi uno script personalizzato che usa twine
per pubblicare i pacchetti.
- script: |
twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>
È anche possibile usare Azure Pipelines per creare un'immagine per l'app Python ed eseguirne il push in un registro contenitori.
Estensioni correlate
- Plug-in Azure DevOps per PyCharm (IntelliJ) (Microsoft)
- Python in Visual Studio Code (Microsoft)
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per