I'm experiencing issues integrating Python with JMP 17. Despite following the recommended steps, JMP crashes every time I run Python Init. Here are the details:
系统设置:
- JMP 版本:17
- Python 版本:3.9.13(64 位)(也尝试过 v3.13.1)
- 操作系统:Windows 10(64位)
采取的步骤:
- 安装 Python 3.9.13 并将其添加到 PATH。
- 安装所需的 Python 包:numpy、pandas、matplotlib、scipy、PyQt5。
- Set the environment variable
JMP_PYTHON_MODULE_PATH to C:\Program Files\Python39\python39.dll. - 通过命令提示符验证 Python 安装和包安装。
- 尝试运行一个简单的 JSL 脚本来初始化 Python:
// Initialize Python with the specified path
Python Init( Path( "C:\\Program Files\\Python39\\python39.dll" ) );
// Simple Python code to test initialization
python_code = "
print('Hello from Python!')
";
// Run the Python code
Python Submit(python_code);
// Close the Python session
Python Term();问题: JMP crashes and closes immediately upon running Python Init.
采取的故障排除步骤:
- 验证 Python 路径和 DLL 文件位置。
- 卸载其他 Python 版本以避免冲突。
- 重新安装 JMP 17。
- 检查 JMP 日志中的错误消息(未发现)。
尽管做出了这些努力,问题仍然存在。有其他人遇到过这个问题或对如何解决它有什么建议吗?
提前感谢您的帮助!
您有可能更新到 JMP18 吗?
此更新对于每个用户都是免费的。
除了许多重大改进之外,JMP + Python 之间的交互现在非常顺畅:)
我希望这取决于我,以便我可以升级它,但我工作的公司总是至少晚一年才收到新的软件更新。
正如其他人提到的,JMP 18 让您在 Python 方面的生活更加轻松。JMP 安装了一个私有的嵌入式 Python 3.11,可与 JMP 开箱即用。让 Python 与 JMP 14-17 一起工作可能具有挑战性,这也是 JMP 现在附带 Python 的主要原因。
首先删除环境变量。JMP_PYTHON_MODULE_PATH
其次,你运行的是 Python.org 还是 Anaconda?使用 Python.org。
第三,JMP 17 是 64 位,因此您必须使用 64 位 Python。
我能够让 Anaconda 工作,但只能通过在调试器中逐步执行 JMP 源代码来正确配置 Python Init。
此外,JMP 14-17 并非设计用于虚拟环境( venv)。
Python Connect() 和 Python Init() 函数采用多种参数来解决问题。
最简单的尝试是:
Python Init ( Use Python Version("3.9") );
您已经尝试过:
Python Init (
Path("C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\python39.dll") <BR />);
最后,“强力”方法是将 dll 的路径和完整的 Python sys.path 指定为 JSL 列表。从命令行启动 Python 并运行以下命令。
import sys
print ( sys.path )
在我的计算机上提供以下内容:
Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip', 'C:\\_me_\\panels\\AppData\\Local\\Programs\\Python\\Python39\\DLLs', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39', 'C:\\Users\\_me_\\AppData\\Roaming\\Python\\Python39\\site-packages', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\win32', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\win32\\lib', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\Pythonwin']
>>>
现在,您可以获取 Python 列表 [...] 并从中创建一个 JSL 列表,以传递给 Python Init(),如下所示。此处两者不同,因为下面的脚本是从我前段时间运行的脚本中粘贴的。我今天运行了上述 Python。如有疑问,请使用 Python 本身为其 sys.path 返回的所有内容。
Names Default To Here( 1 );
Python Init(
Path("C:\\Users\\_me__\\AppData\\Local\\Programs\\Python\\Python39\\python39.dll"),
Python Sys Path(
{
"",
"C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip",
"C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\DLLs",
"C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib",
"C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39",
"C:\\Users\\_me_\\AppData\\Roaming\\Python\\Python39\\site-packages",
"C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages"
}
)
);
Python Submit("\[
import sys
print(sys.path)
print(sys.version)
]\");
x1 = [1, 2, 3];
Python Send( x1 );
x1 = [3,2,1];
x2 = Python Get( x1 );
Show( x1, x2 );
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
Python Send( dt1 );
dt2 = Python Get( dt1 );
dt2 << New Data View;
Close( dt1 );
//Python Term();
Python Submit("\[
print(dt1)
]\");
除此之外...升级到 JMP 18。
谢谢,删除环境变量并将 sys.path 列表传递给 Python Init 就可以了。