使用 Python 将 jsl 脚本更新至 JMP 18我们有调用 python 脚本的 jsl 脚本,现在我想将其更新为 JMP 18 的新 Python 功能。
到 JMP 18 为止,我们做了类似的事情来准备 Python 连接:
// Python setup
Python Init( Debug Print Statements( "TRUE" ), Init Trace("TRUE"), Debug Print Output("TRUE") );
Python Submit(
"\[
import numpy as _JMPnp
import scipy as _JMPsp
import pandas as _JMPpd
import sqlite3 as _JMPsq
if PY_DEBUG_OUTPUT:
print("Python Imports OK")
]\"
);由于 Python Init () 现已弃用,我想知道 a) 我是否现在需要在使用 python send()、submit() 等之前初始化 python 连接。b) 如果是,我猜我应该如何使用 python connect () 来做到这一点
我目前的理论是,我需要用以下内容替换上述元素:
Python connect();
Python submit (
...blablabla...
);
但关于这一点的文档和示例有点稀少。
自动化和脚本回复:使用 Python 将 jsl 脚本更新为 JMP 18在 JMP 18 中,无需使用 Python Init() 或 Python Connect() 来“初始化”Python 环境。由于 Python 是内置的,并且随 JMP 一起安装,因此可以立即使用。这就是 Python Init() 被弃用的原因。Python Connect 仍然存在,以支持使用连接对象。
conn = Python 连接();
conn << 获取 (dt);
conn<
如果您不需要连接对象,则不需要 Python Init() 或 Python Connect()。您可以简单地执行以下操作:
Python 提交(
...我的代码在这里...
(英文):
回复:使用 Python 将 jsl 脚本更新至 JMP 18我认为我的想法错误是我需要某种初始化,因为我收到错误,说没有找到我想要的包。
但是在运行 jmputils.jpip('list') 之后,我发现我需要先安装它们(我假设像 numpy 或 pandas 这样的标准包会被预先安装)。
回复:使用 Python 将 jsl 脚本更新至 JMP 18JMP 18.0 仅附带标准 Python.org 发行版,此外还缺少一些可能与 JMP 内部运行的 Python 冲突的软件包。主要包括 tkinter 和 venv。任何外部软件包都需要用户自行安装。原因如下:JMP 附带的所有第三方库、软件包或开源组件,都必须经过内部的多重审批流程,包括我们法务部门的审核。这也意味着我们需要密切关注该软件包是否存在错误修复和安全问题。最后,由于软件包存在不兼容的情况,因此我们选择的软件包版本可能与您所需的软件包冲突。您可以选择标准库之外的软件包,并自行选择所需的软件包。
移植 JMP 14-17 Python 脚本时需要注意的其他事项。
- Python Term(); 是不必要的,因为只有当你关闭 JMP 时环境才会消失。
- Python Get Graphics(); was removed from JMP 18. This single function caused a dependency on matplotlib. And the goal is to prevent JMP from requiring any external packages for basic functionality. It is easy enough to replicate the same functionality in your own scripts. The Scripting Index example for 'Python Get Graphics();' contains a complete example of the replacement code. Simply save the figure to an image file and open the image in a JMP window.
Python Submit("\[
...
# save image to location of your choosing
plt.savefig('/tmp/get_graphics_img.png')
]\");
// plot = Python Get Graphics( png ); // DEPRECATED
plot = Open( "/tmp/get_graphics_img.png", png );
pngJMP = New Window( "Plot", Picture Box( plot ) );
Python Submit( "plt.close()" );
rc = Delete File( "/tmp/get_graphics_img.png" );
- Python Control() 曾用于设置 matplotlib 的一些选项。虽然在 18.0 版本中没有被移除,但现在它的唯一功能是向日志中打印“已弃用”警告。
- Python Is Connected(); 已被弃用,因为它始终返回 true。Python 环境始终可用。
最后需要注意的一点是:我们发现 mx = Python Get( numpy.ndarray ) 存在问题;如果 NumPy 数组的维度大于 2,虽然可以得到结果,但会丢失大于 2 的维度。此外,如果 NumPy 数组的内存布局是列主(Fortran 风格)而不是行主(C 风格),也会出现问题。这可能会导致 JMP 崩溃。此问题已得到解决,并将在 JMP 18.1 中修复。如果您在 JMP 18.0 中遇到此问题,请确保您的 NumPy 数据采用行主格式,并且仅“获取”1 维或 2 维的 ndarray。当您 Get() 一个 ndarray 时,它会尝试创建一个仅支持 1 维或 2 维的 JSL 矩阵。此错误是 JMP 18.0 特有的,因为 JMP 14-17 将数据作为双精度的临时二进制文件通过文件系统传输。但是,如果维数大于 2,14-17 可能会丢失数据。