Perché JMP JSL rimuove /usr/local/bin (e altri percorsi) da Python os.environ['PATH'] su MacOS?Dichiarazione di problema:
-- Su Mac OS, quando JSL avvia l'interprete Python, rimuove /use/local/bin e altri percorsi da os.environ['PATH']
Come riprodurre questo problema:
-- Per i seguenti codici Python
import os
print(os.environ)
-- Se i codici vengono eseguiti in Mac OS Terminal, i risultati sarebbero i seguenti:
(Nota: di seguito viene mostrato solo l'elemento 'PATH'. Altri elementi non rilevanti non sono mostrati)
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'})-- Se i codici vengono eseguiti in JSL (vedere i codici JSL di seguito)
Python Init();
python_codes =
"<BR />import os
print(os.environ)
";
Python Init();
Python Submit (python_codes);
Python Term();
I risultati saranno
environ({ 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin'})Domanda:
- Perché JMP/JSL rimuove questi percorsi?
- C'è un modo per fare in modo che JMP/JSL rispetti le impostazioni del percorso dalla shell, oltre a modificare manualmente le impostazioni "PATH" nei codici JSL Python?
Mac OSSceneggiaturaRi: Perché JMP JSL rimuove /usr/local/bin (e altri percorsi) da Python os.environ['PATH'] su MacOS?Python di JMP vede le stesse variabili di ambiente che vede JMP stesso. La libreria condivisa di Python viene caricata all'interno dello spazio di processo di JMP, quindi Python di JMP vedrà solo ciò che vede JMP. Puoi verificarlo eseguendo il seguente JSL.
percorso = Ottieni variabile d'ambiente ( "IL PERCORSO" );
Quello che ottieni da JSL e quello che ottieni da os.environ dovrebbero essere gli stessi.
La vera domanda è perché JMP vede un percorso diverso rispetto alla console... Devi ricordare i file dell'ambiente shell .login, .profile, .bashrc, .zshrc, ... prima di arrivare alla riga di comando. In secondo luogo, l'ambiente di avvio della GUI non elabora quei file. Potrebbe elaborare i file ~/.login o ~/.profile, ma dopo una modifica dovresti prima disconnetterti e riconnetterti per elaborare le modifiche ai file init della shell di accesso.
Se hai bisogno di tali percorsi, puoi aggiungerli al PERCORSO in Python aggiornando os.environ all'interno dello script. Ciò dovrebbe aggiornare solo ciò che Python vede come variabili di ambiente e non alterare l'ambiente della shell al di fuori di JMP.