在 JMP 18 中執行 Python 程式時 JMP 消失我一直在嘗試熟悉 JMP 18 中的新 Python 介面。
# Import the necessary libraries
import numpy as np
from rpy2.robjects.packages import importr
import rpy2.robjects as ro
# Create a numpy array
data = np.array([1, 2, 3, 4, 5])
# Convert the numpy array to an R vector
r_vector = ro.FloatVector(data)
# Import the base package in R
base = importr('base')
# Calculate the mean of the vector in R
mean = base.mean(r_vector)
# Convert the mean back to a Python float
mean_py = np.array(mean)[0]
print(f"The mean of the data is {mean_py}")
我使用 JSL 安裝了 rpy2 包
Python Install Packages( "rpy2");
它安裝沒有問題。我還在我的本機 3.8 版本的 Python 和本機版本的 Python 3.11 中安裝了它
Python 程式碼在 Python 3.8 和 JMP 安裝的 3.11 中運行沒有錯誤。
然而,當在 JMP 18 下執行 Python 程式碼時,一旦運行第 3 行,JMP 就會立即消失。
from rpy2.robjects.packages import importr
有人知道為什麼會發生這種情況?
自動化和腳本編寫回覆:在 JMP 18 中執行 Python 程式時 JMP 消失我無法使用以下命令安裝該軟體包
Python Install Packages( "rpy2");
或者
import jmp
import jmputils
# update to latest version of pip and setuptools then install numpy & pandas
jmputils.jpip('install --upgrade', 'pip setuptools')
jmputils.jpip('install', 'rpy2')
我必須通過命令行。安裝後,我遇到了相同的問題,當我導入 rpy2.robjects 時,JMP 將關閉(導入 rpy2 似乎有效)。也許這與這裡的東西有關https://github.com/jupyterlab/jupyterlab/issues/4817 ?
回覆:在 JMP 18 中執行 Python 程式時 JMP 消失我認為這可能是 jupyterlab 問題 4871 中提到的問題的一部分。
預設情況下,rpy2 將尋找 PATH 中找到的第一個 R。可能發生的情況是,PATH 中的 R 與動態載入時選取的 R 共用程式庫不符。
JMP 將 Python 作為共享庫加載,因此任何共享庫加載路徑都需要位於 JMP 期望的位置。 JMP 中的嵌入式 Python 載入 rpy2 模組,其共用程式庫將位於對應的 site-packages/ 目錄中。然後 rpy2 嘗試將 R 共享庫載入到進程空間中。如果找不到庫,或者由於衝突而無法加載,您將在 JMP 無法捕獲的地方深處得到進程終止。這是我們很久以前嘗試在 Windows 上使用 Conda 安裝 Python 時遇到的問題。 Conda 移動了預設位置並且沒有設定 rpath,因此 JMP 無法找到 Python 本身依賴的 Dll,並且在嘗試使用基於 Anaconda 的安裝運行任何 Python 時會立即退出。此外,在 JMP 本身關閉之前,所有已載入的 Dll 都不會釋放和卸載。
我不建議使用 rpy2。我個人的偏好/建議是使用 pyRserve。 pyRserve 套件是一個 Python 瘦客戶端,透過 TCP/IP 與 Rserve 伺服器通訊。 $SAMPLE_SCRIPTS/Python/Rserve.py 中有一個範例,其中包含有關配置和使用的大量註解。
這可以更好地隔離進程,並且您不會將 R 載入到位於 JMP 內的 Python 位址空間中。借助 Rserv,R 中的崩潰或問題將不會對 JMP 產生影響。此外,您的 Rserv 實例可以在任何地方運作。在 Windows 本機或 macOS 上、Windows 上的 WSL(適用於 Linux 的 Windows 子系統)內、遠端電腦(Linux、macOS...)上。遠端 R 伺服器可能需要額外的網路管理支持,例如防火牆和允許連接埠。在本地運行,這應該不是問題。
這是允許在 JMP 中載入 DLL 的危險之一。無論是從 Python 模組內部還是從我們自己的 JSL 載入 Dll 功能。載入的 DLL 中的崩潰或錯誤可能會導致 JMP 中出現不可恢復且無法處理的錯誤。