JMP disparaît lors de l'exécution d'un programme Python dans JMP 18J'ai essayé de me familiariser avec la nouvelle interface Python de JMP 18. L'une des questions que j'explore est la suivante : "Est-il possible d'écrire un programme Python dans l'environnement JMP qui exécute des modules r. Le programme très simple que j'utilise est
# 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}")
J'ai installé le package rpy2 en utilisant le JSL
Python Install Packages( "rpy2");
Il s'est installé sans problème. Je l'ai également installé dans ma version native 3.8 de Python et dans la version native de Python 3.11
Le code Python s'exécute sans erreur dans Python 3.8 et dans la version 3.11 installée de JMP.
Cependant, lors de l'exécution du code en Python sous JMP 18, dès que la ligne 3 est exécutée, JMP disparaît immédiatement.
from rpy2.robjects.packages import importr
Quelqu'un a-t-il une idée de la raison pour laquelle cela se produit ?
Automatisation et scriptsRe : JMP disparaît lors de l'exécution d'un programme Python dans JMP 18Je n'ai pas pu installer ce paquet en utilisant
Python Install Packages( "rpy2");
ou
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')
et j'ai dû passer par la ligne de commande. Après l'avoir installé, je suis confronté au même problème, JMP se fermera simplement lorsque j'importer rpy2.robjects (l'importation rpy2 semble fonctionner). Peut-être que cela est lié à quelque chose comme ici https://github.com/jupyterlab/jupyterlab/issues/4817 ?
Re : JMP disparaît lors de l'exécution d'un programme Python dans JMP 18Je pense que cela fait probablement partie des problèmes mentionnés dans le numéro 4871 de jupyterlab. Plus précisément, la mention dans l'une des réponses.
Par défaut, rpy2 recherchera le premier R trouvé dans le PATH. Ce qui peut arriver, c'est que le R dans le PATH ne correspond pas à la bibliothèque partagée R récupérée lors de son chargement dynamique.
JMP charge Python en tant que bibliothèque partagée, de sorte que tout chemin de chargement de bibliothèque partagée doit se trouver aux emplacements attendus par JMP. Le Python intégré dans JMP charge le module rpy2, et ses bibliothèques partagées se trouveraient dans le répertoire site-packages/ correspondant. Ensuite, rpy2 essaie de charger les bibliothèques partagées R dans l'espace de processus. Si une bibliothèque est introuvable ou ne parvient pas à se charger en raison d'un conflit, vous obtiendrez l'arrêt du processus en profondeur à un endroit que JMP ne peut pas détecter. C'est le problème que nous avons rencontré il y a longtemps en essayant d'utiliser une installation Conda de Python sur Windows. Conda a déplacé les emplacements par défaut et n'a pas défini le rpath, de sorte que JMP n'a pas pu trouver les DLL dont Python lui-même dépendait et se fermerait rapidement en essayant d'exécuter quoi que ce soit de Python avec une installation basée sur Anaconda. De plus, aucune des DLL chargées ne sera libérée et déchargée jusqu'à ce que JMP lui-même s'arrête.
Je ne recommande pas d'utiliser rpy2. Ma préférence/suggestion personnelle est d'utiliser pyRserve. Le package pyRserve est un client léger Python qui communique avec un serveur Rserve via TCP/IP. Il existe un exemple dans $SAMPLE_SCRIPTS/Python/Rserve.py qui contient de nombreux commentaires sur la configuration et l'utilisation.
Cela isole beaucoup mieux les processus et vous ne chargez pas R dans l'espace d'adressage de Python qui se trouve alors dans JMP. Avec Rserv, un crash ou un problème dans R n'aura alors aucun effet sur JMP. De plus, votre instance Rserv peut être exécutée n'importe où. Localement sous Windows ou sur macOS, au sein de WSL (Windows Subsystem for Linux) sous Windows, sur une machine distante (Linux, macOS, ... ). Un serveur R distant peut nécessiter une prise en charge supplémentaire de l'administration réseau, telle qu'un pare-feu et des ports autorisant. Fonctionnant localement, cela ne devrait pas poser de problème.
C'est l'un des dangers liés au chargement de DLL dans JMP. Que ce soit à partir des modules Python ou à partir de nos propres capacités de chargement de DLL JSL. Un crash ou une erreur dans la DLL chargée peut provoquer une erreur irrécupérable et non gérée dans JMP.