Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come usare Python le app in un Aspire AppHost. L'app di esempio in questo articolo illustra l'avvio di un'applicazione Python. L'estensione Python per Aspire richiede l'uso di ambienti virtuali.
Prerequisites
Per usare Aspire, è necessario quanto segue installato in locale:
-
.NET 8.0 o .NET 9.0.
- Aspire A partire dalla versione 9.4, .NET è supportata la versione 10 Preview 5 o successiva.
- Un runtime per container conforme a OCI, ad esempio:
- Docker Desktop o Podman. Per ulteriori informazioni, vedere runtime del contenitore.
- Un ambiente di sviluppo integrato (IDE) o un editor di codice, ad esempio:
- Visual Studio 2022 versione 17.9 o successiva (opzionale)
-
Visual Studio Code (facoltativo)
- C# Dev Kit: Estensione (facoltativo)
- JetBrains Rider con Aspire plugin (facoltativo)
Per altre informazioni, vedere Aspire Configurazione e strumenti e Aspire SDK.
Inoltre, è necessario installare Python nel computer. L'app di esempio in questo articolo è stata compilata con Python versione 3.12.4 e pip versione 24.1.2. Per verificare le versioni Python e pip, eseguire i comandi seguenti:
python --version
pip --version
Per scaricare Python (incluso pip), vedere la pagina di download Python.
Creare un Aspire progetto usando il modello
Per iniziare a avviare un Python progetto in Aspire, usare il modello di avvio per creare prima un Aspire host dell'applicazione:
dotnet new aspire -o PythonSample
Nella stessa sessione del terminale modificare le directory nel progetto appena creato:
cd PythonSample
Dopo aver creato il modello, avviare AppHost con il comando seguente per assicurarsi che AppHost e il Aspire dashboard vengano eseguiti correttamente:
dotnet run --project ./PythonSample.AppHost/PythonSample.AppHost.csproj
Se il Aspire Dashboard non si apre, aprirlo usando il collegamento nell'output della console. A questo punto il dashboard non mostrerà alcuna risorsa. Arrestare AppHost premendo CTRL+C nel terminale.
Prepara un'app Python
Dalla sessione del terminale precedente in cui è stata creata la soluzione Aspire creare una nuova directory per contenere il codice sorgente Python.
mkdir hello-python
Modificare le directory nella directory hello-python appena creata:
cd hello-python
Inizializza l'ambiente virtuale Python
Per lavorare con le app Python, devono trovarsi all'interno di un ambiente virtuale. Per creare un ambiente virtuale, eseguire il comando seguente:
python -m venv .venv
Per altre informazioni sugli ambienti virtuali, vedere il Python: Installare pacchetti in un ambiente virtuale usando pip e venv.
Per attivare l'ambiente virtuale, abilitare l'installazione e l'utilizzo dei pacchetti, eseguire il comando seguente:
source .venv/bin/activate
Assicurarsi che pip all'interno dell'ambiente virtuale sia aggiornato eseguendo il comando seguente:
python -m pip install --upgrade pip
Installare pacchetti Python
Installare il pacchetto Flask creando un file requirements.txt nella directory hello-python e aggiungendo la riga seguente:
Flask==3.0.3
Installare quindi il pacchetto Flask eseguendo il comando seguente:
python -m pip install -r requirements.txt
Dopo aver installato Flask, creare un nuovo file denominato
import os
import flask
app = flask.Flask(__name__)
@app.route('/', methods=['GET'])
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
port = int(os.environ.get('PORT', 8111))
app.run(host='0.0.0.0', port=port)
Il codice precedente crea una semplice app Flask che ascolta sulla porta 8111 e restituisce il messaggio "Hello, World!" quando si accede all'endpoint root.
Aggiornare il progetto AppHost
Installare il pacchetto di hosting Python eseguendo il comando seguente:
dotnet add ../PythonSample.AppHost/PythonSample.AppHost.csproj package Aspire.Hosting.Python --version 9.0.0
Dopo l'installazione del pacchetto, il codice XML del progetto deve avere un nuovo riferimento al pacchetto simile all'esempio seguente:
<Project Sdk="Microsoft.NET.Sdk">
<Sdk Name="Aspire.AppHost.Sdk" Version="9.5.2" />
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UserSecretsId>5fd92a87-fff8-4a09-9f6e-2c0d656e25ba</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Aspire.Hosting.AppHost" Version="13.0.0" />
<PackageReference Include="Aspire.Hosting.Python" Version="13.0.0" />
</ItemGroup>
</Project>
Sostituire il codice AppHost.cs con il frammento di codice seguente. Questo codice aggiunge il Python progetto a Aspire chiamando l'API AddPythonApp e specificando il nome del progetto, il percorso del progetto e il file del punto di ingresso:
using Microsoft.Extensions.Hosting;
var builder = DistributedApplication.CreateBuilder(args);
#pragma warning disable ASPIREHOSTINGPYTHON001
var pythonapp = builder.AddPythonApp("hello-python", "../hello-python", "main.py")
.WithHttpEndpoint(env: "PORT")
.WithExternalHttpEndpoints()
.WithOtlpExporter();
#pragma warning restore ASPIREHOSTINGPYTHON001
if (builder.ExecutionContext.IsRunMode && builder.Environment.IsDevelopment())
{
pythonapp.WithEnvironment("DEBUG", "True");
}
builder.Build().Run();
Important
Il codice precedente elimina l'errore ASPIREHOSTINGPYTHON001 di diagnostica. Questo errore viene generato perché l'API AddPythonApp è sperimentale e potrebbe cambiare in una versione futura. Per altre informazioni, vedere Errore del compilatore ASPIREHOSTINGPYTHON001.
Eseguire l'app
Dopo aver aggiunto il Python pacchetto di hosting, aggiornato il file AppHost.cs e creato un Python progetto, è possibile eseguire AppHost:
dotnet run --project ../PythonSample.AppHost/PythonSample.AppHost.csproj
Avviare il dashboard facendo clic sul collegamento nell'output della console. Il dashboard deve visualizzare il progetto Python come risorsa.
Seleziona il link Endpoints per aprire l'endpoint hello-python in una nuova scheda del browser. Il browser dovrebbe visualizzare il messaggio "Hello, World!":
Arrestare AppHost premendo CTRL + C nel terminale.
Aggiungere il supporto per i dati di telemetria
Per migliorare l'osservabilità, aggiungi dati di telemetria per monitorare l'app dipendente Python. Python Nel progetto aggiungere i pacchetti seguenti OpenTelemetry come dipendenza nel file requirements.txt:
Flask==3.0.3
opentelemetry-distro
opentelemetry-exporter-otlp-proto-grpc
opentelemetry-instrumentation-flask
gunicorn
Reinstallare quindi i requisiti dell'app Python nell'ambiente virtuale eseguendo il comando seguente:
python -m pip install -r requirements.txt
Il comando precedente installa il OpenTelemetry pacchetto e l'utilità di esportazione OTLP nell'ambiente virtuale. Aggiornare l'app Python per includere il codice OpenTelemetry, sostituendo il codice main.py esistente con il codice seguente:
import os
import logging
import flask
from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.instrumentation.flask import FlaskInstrumentor
app = flask.Flask(__name__)
trace.set_tracer_provider(TracerProvider())
otlpExporter = OTLPSpanExporter()
processor = BatchSpanProcessor(otlpExporter)
trace.get_tracer_provider().add_span_processor(processor)
FlaskInstrumentor().instrument_app(app)
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@app.route('/', methods=['GET'])
def hello_world():
logger.info("request received!")
return 'Hello, World!'
if __name__ == '__main__':
port = int(os.environ.get('PORT', 8111))
debug = bool(os.environ.get('DEBUG', False))
host = os.environ.get('HOST', '127.0.0.1')
app.run(port=port, debug=debug, host=host)
Aggiornare il file dilaunchSettings.json del progetto AppHost per includere la ASPIRE_ALLOW_UNSECURED_TRANSPORT variabile di ambiente nel http profilo:
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:17171;http://localhost:15209",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21171",
"ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22122"
}
},
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:15209",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19171",
"ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20208",
"ASPIRE_ALLOW_UNSECURED_TRANSPORT": "true"
}
}
}
}
La variabile ASPIRE_ALLOW_UNSECURED_TRANSPORT è necessaria perché quando si esegue localmente il client OpenTelemetry in Python rifiuta il certificato di sviluppo locale. Avviare di nuovo AppHost :
dotnet run --project ../PythonSample.AppHost/PythonSample.AppHost.csproj --launch-profile http
Important
AppHost Aspire deve essere eseguito usando HTTP anziché HTTPS. La OpenTelemetry libreria richiede HTTP durante l'esecuzione in un ambiente di sviluppo locale.
Quando AppHost è in esecuzione, passare al dashboard e selezionare la scheda Registrazione strutturata . Si noti che ora contiene eventi di registrazione.
Summary
Anche se esistono diverse considerazioni che esulano dall'ambito di questo articolo, hai imparato come sviluppare una soluzione Aspire che si integra con Python. Si è anche appreso come usare l'API AddPythonApp per ospitare app Python.
