Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans cet article, vous allez apprendre à utiliser des applications Python dans un hôte d’application .NET Aspire. L’exemple d’application de cet article illustre le lancement d’une application Python. L’extension Python pour .NET Aspire nécessite l’utilisation d’environnements virtuels.
Conditions préalables
Pour utiliser .NET.NET Aspire, vous avez besoin de l’installation locale suivante :
- .NET 8.0 ou .NET 9.0
- Un runtime de conteneur conforme à OCI, tel que :
- Docker Desktop ou Podman. Pour plus d’informations, consultez temps d'exécution de conteneur.
- Un environnement de développement intégré (IDE) ou un éditeur de code, par exemple :
- Visual Studio 2022 version 17.9 ou ultérieure (facultatif)
-
Visual Studio Code (facultatif)
- C# Dev Kit: Extension d’ (facultatif)
- JetBrains Rider avec .NET.NET Aspire plug-in (facultatif)
Pour plus d'informations, consultez la configuration et les outils de .NET.NET Aspire, ainsi que le SDK de .NET.NET Aspire.
En outre, vous devez installer Python sur votre ordinateur. L’exemple d’application de cet article a été créé avec Python version 3.12.4 et pip version 24.1.2. Pour vérifier vos versions Python et pip, exécutez les commandes suivantes :
python --version
pip --version
Pour télécharger Python (y compris pip
), consultez la page de téléchargement Python.
Créer un projet .NET.NET Aspire à l’aide du modèle
Pour commencer à lancer un projet Python dans .NET Aspire, utilisez le modèle de démarrage pour d'abord créer un hôte d'application .NET Aspire.
dotnet new aspire -o PythonSample
Dans la même session de terminal, modifiez les répertoires dans le projet nouvellement créé :
cd PythonSample
Une fois le modèle créé, lancez l’hôte d’application avec la commande suivante pour vous assurer que l’hôte de l’application et le .NET.NET Aspire tableau de bord s’exécutent correctement :
dotnet run --project ./PythonSample.AppHost/PythonSample.AppHost.csproj
Si le .NET.NET Aspire tableau de bord ne s’ouvre pas, ouvrez-le avec le lien dans la sortie de la console. À ce stade, le tableau de bord n’affiche aucune ressource. Arrêtez l’hôte de l’application en appuyant sur Ctrl + C dans le terminal.
Préparer une application Python
À partir de votre session de terminal précédente où vous avez créé la solution .NET Aspire, créez un répertoire pour contenir le code source Python.
mkdir hello-python
Modifiez les répertoires dans le répertoire hello-python nouvellement créé :
cd hello-python
Initialiser l’environnement virtuel Python
Pour utiliser des applications Python, elles doivent se trouver dans un environnement virtuel. Pour créer un environnement virtuel, exécutez la commande suivante :
python -m venv .venv
Pour plus d’informations sur les environnements virtuels, consultez la Python: installer des packages dans un environnement virtuel à l’aide de pip et venv.
Pour activer l’environnement virtuel, activez l’installation et l’utilisation des packages, exécutez la commande suivante :
source .venv/bin/activate
Vérifiez que pip dans l’environnement virtuel est up-to-date en exécutant la commande suivante :
python -m pip install --upgrade pip
Installer des packages Python
Installez le paquet Flask en créant un fichier requirements.txt dans le répertoire hello-python et en ajoutant la ligne suivante :
Flask==3.0.3
Ensuite, installez le package Flask en exécutant la commande suivante :
python -m pip install -r requirements.txt
Une fois Flask installé, créez un fichier nommé main.py dans le répertoire hello-python et ajoutez le code suivant :
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)
Le code précédent crée une application Flask simple qui écoute sur le port 8111 et retourne le message "Hello, World!"
lorsque le point de terminaison racine est accessible.
Mettre à jour le projet hôte d’application
Installez le package d’hébergement Python en exécutant la commande suivante :
dotnet add ../PythonSample.AppHost/PythonSample.AppHost.csproj package Aspire.Hosting.Python --version 9.0.0
Une fois le package installé, le code XML du projet doit avoir une nouvelle référence de package similaire à l’exemple suivant :
<Project Sdk="Microsoft.NET.Sdk">
<Sdk Name="Aspire.AppHost.Sdk" Version="9.2.0" />
<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="9.3.1" />
<PackageReference Include="Aspire.Hosting.Python" Version="9.3.1" />
</ItemGroup>
</Project>
Remplacez le code de l'hôte d'application Program.cs par le code suivant. Ce code ajoute le Python projet en .NET Aspire appelant l’API AddPythonApp
et en spécifiant le nom du projet, le chemin du projet et le fichier de point d’entrée :
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
Le code précédent supprime l’erreur ASPIREHOSTINGPYTHON001
de diagnostic. Cette erreur est générée, car l’API AddPythonApp
est expérimentale et peut changer dans la version ultérieure. Pour plus d’informations, consultez Erreur du compilateur ASPIREHOSTINGPYTHON001.
Exécuter l’application
Maintenant que vous avez ajouté le package d’hébergement Python, mis à jour l’hôte de l’application Program.cs fichier et créé un projet Python, vous pouvez exécuter l’hôte de l’application :
dotnet run --project ../PythonSample.AppHost/PythonSample.AppHost.csproj
Lancez le tableau de bord en cliquant sur le lien dans la sortie de la console. Le tableau de bord doit afficher le projet Python en tant que ressource.
Sélectionnez le lien Points de terminaison pour ouvrir le point de terminaison hello-python
dans un nouvel onglet de navigateur. Le navigateur doit afficher le message « Hello, World ! » :
Arrêtez l’hôte de l’application en appuyant sur Ctrl + C dans le terminal.
Ajouter la prise en charge des données de télémétrie
Pour ajouter un peu d’observabilité, ajoutez des données de télémétrie pour surveiller l’application Python dépendante. Dans le Python projet, ajoutez les packages suivants OpenTelemetry en tant que dépendance dans le fichier requirements.txt :
Flask==3.0.3
opentelemetry-distro
opentelemetry-exporter-otlp-proto-grpc
opentelemetry-instrumentation-flask
gunicorn
Ensuite, réinstallez les exigences de l’application Python dans l’environnement virtuel en exécutant la commande suivante :
python -m pip install -r requirements.txt
La commande précédente installe le OpenTelemetry package et l’exportateur OTLP , dans l’environnement virtuel. Mettez à jour l’application Python pour inclure le code OpenTelemetry, en remplaçant le code main.py existant par les éléments suivants :
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)
Mettez à jour le fichier launchSettings.json du projet hôte d’application pour inclure la ASPIRE_ALLOW_UNSECURED_TRANSPORT
variable d’environnement sous le http
profil :
{
"$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 variable ASPIRE_ALLOW_UNSECURED_TRANSPORT
est requise, car lorsque le client OpenTelemetry est exécuté localement dans Python, il rejette le certificat de développement local. Relancez l'hôte de l'application à nouveau.
dotnet run --project ../PythonSample.AppHost/PythonSample.AppHost.csproj --launch-profile http
Important
L’hôte .NET.NET Aspire de l’application doit être exécuté à l’aide de HTTP au lieu de HTTPS. La OpenTelemetry bibliothèque nécessite HTTP lors de l’exécution dans un environnement de développement local.
Une fois l’hôte de l’application en cours d’exécution, accédez au tableau de bord et sélectionnez l’onglet Journalisation structurée . Notez qu’il contient désormais des événements de journalisation.
Résumé
Bien qu’il existe plusieurs considérations qui dépassent la portée de cet article, vous avez appris à créer .NET Aspire solution qui s’intègre à Python. Vous avez également appris à utiliser l’API AddPythonApp
pour héberger des applications Python.