Warum entfernt JMP JSL /usr/local/bin (und andere Pfade) aus Python os.environ['PATH'] unter MacOS?Ausgabeerklärung:
-- Wenn JSL unter Mac OS den Python-Interpreter startet, entfernt es /use/local/bin und andere Pfade aus os.environ['PATH']
So reproduzieren Sie dieses Problem:
-- Für die folgenden Python-Codes
import os
print(os.environ)
-- Wenn die Codes in Mac OS Terminal ausgeführt werden, wären die Ergebnisse die folgenden:
(Hinweis: Unten wird nur das Element „PATH“ angezeigt. Andere irrelevante Elemente werden nicht angezeigt)
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'})-- Wenn die Codes in JSL ausgeführt werden (siehe JSL-Codes unten)
Python Init();
python_codes =
"<BR />import os
print(os.environ)
";
Python Init();
Python Submit (python_codes);
Python Term();
Die Ergebnisse werden
environ({ 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin'})Frage:
- Warum entfernt JMP/JSL diese Pfade?
- Gibt es eine Möglichkeit, JMP/JSL dazu zu bringen, die Pfadeinstellungen von der Shell zu berücksichtigen, außer die 'PATH'-Einstellungen in JSL-Python-Codes manuell zu ändern?
Mac OSSkripterstellungBetreff: Warum entfernt JMP JSL /usr/local/bin (und andere Pfade) aus Python os.environ['PATH'] unter MacOS?Python von JMP sieht dieselben Umgebungsvariablen wie JMP selbst. Die gemeinsam genutzte Bibliothek von Python wird in den Prozessraum von JMP geladen, sodass Python von JMP nur sieht, was JMP sieht. Sie können dies überprüfen, indem Sie die folgende JSL ausführen.
Pfad = Umgebungsvariable abrufen ( "WEG" );
Was Sie von JSL erhalten, und was Sie von os.environ erhalten, sollte dasselbe sein.
Die eigentliche Frage ist, warum JMP einen anderen Weg sieht als die Konsole ... Sie müssen daran denken, dass die Shell-Umgebung .login-, .profile-, .bashrc-, .zshrc-, ...-Dateien verarbeitet, bevor Sie zur Befehlszeile gelangen. Zweitens verarbeitet die GUI-Startumgebung diese Dateien nicht. Es kann die Dateien ~/.login oder ~/.profile verarbeiten, aber nach einer Änderung müssten Sie sich zuerst abmelden und wieder anmelden, damit Änderungen an den Init-Dateien der Login-Shell verarbeitet werden.
Wenn Sie solche Pfade benötigen, können Sie sie dem PATH in Python hinzufügen, indem Sie os.environ im Skript aktualisieren. Das sollte nur aktualisieren, was Python als Umgebungsvariablen sieht, und nicht die Shell-Umgebung außerhalb von JMP ändern.