為什麼 JMP JSL 從 MacOS 上的 Python os.environ['PATH'] 中刪除 /usr/local/bin(和其他路徑)?問題聲明:
-- 在 Mac OS 上,當 JSL 啟動 Python 解釋器時,它會從 os.environ['PATH'] 中刪除 /use/local/bin 等路徑
如何重現此問題:
-- 對於以下Python程式碼
import os
print(os.environ)
-- 如果在 Mac OS 終端機中執行程式碼,結果將如下:
(註:下面僅顯示了'PATH'項,其他無關項未顯示)
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'})-- 如果程式碼在 JSL 中執行(請參閱下面的 JSL 程式碼)
Python Init();
python_codes =
"<BR />import os
print(os.environ)
";
Python Init();
Python Submit (python_codes);
Python Term();
結果將是
environ({ 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin'})問題:
- 為什麼 JMP/JSL 刪除這些路徑?
- 除了手動修改 JSL Python 程式碼中的「PATH」設定之外,是否有辦法讓 JMP/JSL 遵循 shell 中的路徑設定?
自動化和腳本編寫macOS大規模客製化品質和工藝工程分享和交流成果回复:為什麼 JMP JSL 從 MacOS 上的 Python os.environ['PATH'] 中刪除 /usr/local/bin(和其他路徑)?JMP 的 Python 看到的環境變量與 JMP 本身看到的相同。 Python 的共享庫在 JMP 的進程空間內加載,因此 JMP 的 Python 只會看到 JMP 看到的內容。 您可以通過運行以下 JSL 來驗證這一點。
路徑 =獲取環境變量( “小路” );
你從 JSL 得到的,和你從 os.environ 得到的應該是一樣的。
真正的問題是為什麼 JMP 看到的路徑與控制台不同...... 在進入命令行之前,您必須記住 shell 環境進程 .login、.profile、.bashrc、.zshrc 等文件。 其次,GUI 啟動環境不處理這些文件。 它可能會處理 ~/.login 或 ~/.profile 文件,但在更改後,您必須先註銷並重新登錄才能處理對登錄 shell init 文件的更改。
如果您需要這樣的路徑,您可以通過更新腳本中的 os.environ 將它們添加到 Python 中的 PATH 中。 這應該只會更新 Python 視為環境變量的內容,而不會改變 JMP 之外的 shell 環境。