为什么 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 中的路径设置吗?
自动化和脚本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 环境。