為什麼 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 Terminal 中執行,結果如下:
(注意:下面僅顯示“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 的路徑設置?
蘋果系統腳本回复:為什麼 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 初始化文件的更改。
如果您需要這樣的路徑,您可以通過更新腳本中的 os.environ 將它們添加到 Python 中的 PATH 中。 這應該只更新 Python 視為環境變量的內容,而不是改變 JMP 之外的 shell 環境。