L’API Python Constellation embarquée dans le package NuGet Constellation.PythonProxy a connu trois mises à jour depuis la dernière news sur le blog : la version 1.8.5 en Octobre 2018 avec le support des environnements virtuels, la 1.8.6 en Février 2019 avec plusieurs nouveautés dont le support de Python 3.x et pour finir la version 1.8.7 publiée début Mai 2019 avec quelques ajouts dont la substitution de configuration du Proxy Python par des settings Constellation.

Retour en détail sur les nouveautés …

Le choix de l’interpréteur Python et les environnements virtuels

Depuis la version 1.8.5 il est possible de définir la commande pour lancer les scripts Python de votre package.  Par défaut chaque script était lancé avec la commande “python” ce qui vous obligez à définir la commande “python” dans le PATH de votre système.

Désormais vous pouvez définir dans le fichier App.config de votre package Python, l’attribut “pythonCmd” pour spécifier la commande à lancer. Ci-dessous un exemple avec l’interpréteur Python 2.7 :

L’attribut “pythonCmd” peut-être également défini de manière individuelle pour chaque script. Prenez par exemple la configuration suivante :

Ci-dessus le package Python démarre trois scripts Demo.py, Demo2.py et Demo3.py de la façon suivante :

  • Demo.py sera lancé par l’interpréteur Python 3 (via la commande “python3” défini au niveau global)
  • Demo2.py sera lancé par un environnement virtuel ici nommé “venv” (défini pour le script)
  • Demo3.py sera lancé par l’interpréteur Python 2.7 installé dans “C:\Python27”

Il devient donc possible d’utiliser des interpréteurs Python spécifiques dont les environnements virtuels. Notez que si rien n’est défini, les scripts seront lancés par la commande “python”.

Le support de Python 3.x

La version 1.8.6 du Proxy Python est désormais compatible Python 2.x et Python 3.x.

Python 3.x

Il est donc maintenant possible d’écrire des packages Constellation en Python 2.x ou en Python 3.x (ou les deux en même temps, avec ou sans environnements virtuels avec l’attribut “pythonCmd” vu précédemment).

La configuration du “Proxy” par settings Constellation

Il est possible d’utiliser des settings Constellation (c’est à dire des variables de configuration que l’on peut administrer depuis la Constellation par l’API ou la Console) dans la section de configuration de votre App.config qui défini les scripts et les interpréteurs Python à utiliser.

Pour cela, au démarrage de votre package le Proxy Python remplacera les tags au format $(xxxx) où xxxx est la clé d’un setting de votre package.

Pour bien comprendre imaginez que vous souhaitez changer l’interpréteur Python à utiliser dans les settings Constellation.

Commençons par déclarer un setting dans le manisfest de votre package que nous nommerons “PythonPath” avec la valeur par défaut “python”. Dans le fichier PackageInfo.xml :

Maintenant dans la configuration de notre proxy Python définissons l’attribut “pythonCmd”, c’est à dire la commande à utiliser pour lancer nos scripts Python, par la valeur de notre setting Constellation en utilisant le tag $(PythonPath). Soit dans le fichier App.config :

Dans la Console Constellation, la valeur par défaut est donc “python” :

image

Lorsque nous démarrons le package, on peut constater dans les logs que le tag est bien remplacé par la valeur par défaut ici “python”, qui dans mon environnement est un alias vers Python 3.6.8 :

Python 3.6

Sans changer notre cas, modifions la valeur du setting “PythonPath” depuis l’interface Web de la Console Constellation en spécifiant la valeur “C:\Python27\python.exe” :

image

Redémarrons notre package et on constatera dans les logs que notre script est maintenant exécuté par l’interpréteur Python 2.7.13 :

image

Il devient alors possible de jongler entre les différentes versions des interpréteurs Python ou même les environnements virtuels depuis les settings Constellation sans devoir toucher au package lui-même.

Utilisation des settings Constellation avant le “Start” et notification de mise à jour

Depuis vos scripts Python pour récupérer la valeur d’un setting Constellation il faut utiliser la méthode GetSetting :

Jusqu’à la version 1.8.6, on ne pouvait appeller cette méthode qu’après le “Start”, mais désormais vous pouvez l’utiliser juste après l’import de la libraire Constellation, par exemple :

Vous pouvez ainsi initialiser vos scripts en ayant accès aux settings de votre package Constellation.

Autre nouveauté, l’ajout de l’évènement “OnSettingsUpdated” vous permettant d’être notifié lorsque qu’une valeur d’un setting de votre package est mis à jour dans Constellation.

Autres nouveautés

Tout d’abord les MessageCallbacks et  lesStateObjectLinks, c’est à dire les méthodes de votre code que vous déclarez pour répondre à un message ou pour suivre un StateObject sont désormais invoquées dans un thread asynchrone pour éviter de bloquer le package.

Ensuite le « Working Directory » (os.getcwd()) est maintenant le répertoire du package et non le répertoire du script Python lui-même.

Il y a eu une revue du mécanisme de ping entre le proxy .NET et la sandbox Python basé maintenant sur le temps CPU et non l’horloge système (afin d’éviter les problèmes liés au changement d’heure).

On peut également citer l’affichage de la stacktrace complète lorsqu’une exception est levée dans le dispatch d’un MessageCallback ou d’un StateObjectLink, l’ajout automatique de la section XML de configuration dans le fichier « app.config » lors de l’installation du package ou encore l’affichage des numéros de version du Proxy python et interpréteur python au démarrage des scripts.

Pour mettre à jour votre API Python, lancez simplement le gestionnaire de package NuGet !

Support de Python 3, des environnements virtuels et autres nouveautés de l’API Python
Étiqueté avec :    

Démarrez la discussion sur le forum Constellation