JMP 18でPythonプログラムを実行するとJMPが消える私はJMP 18の新しいPythonインターフェースに慣れようとしています。私が探っている質問の1つは、「JMP環境でrモジュールを実行する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");
問題なくインストールできました。ネイティブのPython 3.8バージョンとネイティブのPython 3.11バージョンにもインストールしました。
Python コードは、Python 3.8 およびインストールされた JMP 3.11 でエラーなく実行されます。
ただし、JMP 18 で Python のコードを実行すると、3 行目が実行されるとすぐに JMP が消えてしまいます。
from rpy2.robjects.packages import importr
なぜこのようなことが起こるのか、誰か考えがあるでしょうか?
自動化とスクリプトRe: 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 が閉じてしまいます (import rpy2 は機能しているようです)。これは、https
/github.com/jupyterlab/jupyterlab/issues/4817のようなものと関連しているのでしょうか?
Re: JMP 18 で Python プログラムを実行すると JMP が消えるこれはおそらく、jupyterlab の問題 4871 内で言及されている問題の一部であると思われます。具体的には、回答の 1 つに記載されている問題です。
デフォルトでは、rpy2 は PATH で最初に見つかった R を探します。PATH 内の R が、動的にロードするときに選択された R 共有ライブラリと一致しない場合があります。
JMP は Python を共有ライブラリとしてロードするため、共有ライブラリのロード パスは JMP が想定する場所にある必要があります。JMP に組み込まれた Python は rpy2 モジュールをロードし、その共有ライブラリは対応する site-packages/ ディレクトリにあります。次に、rpy2 は R 共有ライブラリをプロセス スペースにロードしようとします。ライブラリが見つからないか、競合のためにロードに失敗した場合は、JMP が捕捉できない深い場所でプロセスが終了します。これは、Windows で Python の Conda インストールを使用しようとしたときに以前発生した問題です。Conda はデフォルトの場所を移動し、rpath を設定しなかったため、JMP は Python 自体が依存する DLL を見つけることができず、Anaconda ベースのインストールで Python を実行しようとするとすぐに終了しました。さらに、ロードされた DLL はどれも JMP 自体がシャットダウンするまで解放されず、アンロードされません。
rpy2 の使用はお勧めしません。私の個人的な好み/提案は、pyRserve を使用することです。pyRserve パッケージは、TCP/IP 経由で Rserve サーバーと通信する Python シン クライアントです。$SAMPLE_SCRIPTS/Python/Rserve.py には、構成と使用に関する詳細なコメントが記載された例があります。
これにより、プロセスがより適切に分離され、R が JMP 内の Python のアドレス空間にロードされることがなくなります。Rserv を使用すると、R 内でのクラッシュや問題は JMP に影響しません。さらに、Rserv インスタンスはどこでも実行できます。Windows または macOS のローカル、Windows の WSL (Windows Subsystem for Linux) 内、リモート マシン (Linux、macOS、...) などです。リモート R サーバーでは、ファイアウォールやポートの許可などの追加のネットワーク管理サポートが必要になる場合があります。ローカルで実行する場合、これは問題になりません。
これは、DLL を JMP にロードできるようにする際の危険性の 1 つです。Python モジュール内からでも、独自の JSL ロード DLL 機能からでも、ロードされた DLL でクラッシュまたはエラーが発生すると、JMP で回復不能な未処理のエラーが発生する可能性があります。