Pourquoi JMP JSL supprime-t-il /usr/local/bin (et d'autres chemins) de Python os.environ['PATH'] sur MacOS ?Déclaration sur le problème :
-- Sous Mac OS, lorsque JSL lance l'interpréteur Python, il supprime /use/local/bin et d'autres chemins de os.environ['PATH']
Comment reproduire ce problème :
-- Pour les codes Python suivants
import os
print(os.environ)
-- Si les codes sont exécutés dans Mac OS Terminal, les résultats seront les suivants :
(Remarque : seul l'élément « PATH » est affiché ci-dessous. Les autres éléments non pertinents ne sont pas affichés)
environ({ 'PATH':'/usr/local/sbin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/mysql/bin:/opt/X11/bin'})-- Si les codes sont exécutés en JSL (voir les codes JSL ci-dessous)
Python Init();
python_codes =
"<BR />import os
print(os.environ)
";
Python Init();
Python Submit (python_codes);
Python Term();
Les résultats seront
environ({ 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin'})Question:
- Pourquoi JMP/JSL supprime ces chemins ?
- Existe-t-il un moyen de faire en sorte que JMP/JSL respecte les paramètres de chemin à partir du shell, autrement qu'en modifiant manuellement les paramètres « PATH » dans les codes Python JSL ?
Automatisation et scriptsmacOSPersonnalisation de masseIngénierie de la qualité et des procédésPartage et communication des résultatsRe : Pourquoi JMP JSL supprime-t-il /usr/local/bin (et d'autres chemins) de Python os.environ['PATH'] sur MacOS ?Python de JMP voit les mêmes variables d'environnement que JMP lui-même voit. La bibliothèque partagée de Python est chargée dans l'espace de processus de JMP, de sorte que Python de JMP ne verra que ce que voit JMP. Vous pouvez le vérifier en exécutant le JSL suivant.
chemin = Obtenir la variable d'environnement ( "CHEMIN" );
Ce que vous obtenez de JSL et ce que vous obtenez de os.environ devraient être les mêmes.
La vraie question est de savoir pourquoi JMP voit un chemin différent de celui de la console... Vous devez vous rappeler que l'environnement shell traite les fichiers .login, .profile, .bashrc, .zshrc, ... avant d'accéder à la ligne de commande. Deuxièmement, l'environnement de lancement de l'interface graphique ne traite pas ces fichiers. Il peut traiter les fichiers ~/.login ou ~/.profile mais après une modification, vous devrez d'abord vous déconnecter et vous reconnecter pour que les modifications apportées aux fichiers d'initialisation du shell de connexion soient traitées.
Si vous avez besoin de tels chemins, vous pouvez les ajouter au PATH dans Python en mettant à jour os.environ dans le script. Cela ne devrait mettre à jour que ce que Python considère comme les variables d'environnement, et ne pas modifier l'environnement shell en dehors de JMP.