使用 Python 將 jsl 腳本更新到 JMP 18我們有 jsl 腳本呼叫 python 腳本,我現在想要更新這些腳本以獲得 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 環境不需要 Python Init() 和 Python Connect()。這就是 Python Init() 被棄用的原因。 Python Connect 仍然存在以支援連接物件的使用。
conn = Python 連接();
conn << 取得( dt );
conn << 提交("\[ ... python 代碼 ... ]\");
如果不需要連接對象,則不需要 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 可能會遺失資料。