JMP verschwindet, wenn ein Python-Programm in JMP 18 ausgeführt wirdIch habe versucht, mich mit der neuen Python-Oberfläche in JMP 18 vertraut zu machen. Eine der Fragen, die ich untersuche, ist: „Ist es möglich, in der JMP-Umgebung ein Python-Programm zu schreiben, das R-Module ausführt? Das sehr einfache Programm, das ich verwende, ist
# 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}")
Ich habe das rpy2-Paket mit dem JSL installiert
Python Install Packages( "rpy2");
Die Installation verlief problemlos. Ich habe es auch in meiner nativen Version 3.8 von Python und in der nativen Version von Python 3.11 installiert.
Der Python-Code läuft fehlerfrei in Python 3.8 und in der installierten Version 3.11 von JMP.
Wenn Sie den Code jedoch in Python unter JMP 18 ausführen, wird JMP sofort beendet, sobald Zeile 3 ausgeführt wird.
from rpy2.robjects.packages import importr
Hat jemand eine Idee, warum das passiert?
Automatisierung und SkriptingBetreff: JMP verschwindet, wenn ein Python-Programm in JMP 18 ausgeführt wirdIch konnte das Paket nicht installieren mit
Python Install Packages( "rpy2");
oder
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')
und ich musste die Befehlszeile verwenden. Nachdem ich es installiert hatte, hatte ich dasselbe Problem: JMP wird einfach geschlossen, wenn ich rpy2.robjects importiere (import rpy2 scheint zu funktionieren). Vielleicht hängt das mit etwas wie hier zusammen: https://github.com/jupyterlab/jupyterlab/issues/4817 ?
Betreff: JMP verschwindet, wenn ein Python-Programm in JMP 18 ausgeführt wirdIch denke, es ist wahrscheinlich Teil der Probleme, die im Jupyterlab-Problem 4871 erwähnt werden. Insbesondere die Erwähnung in einer der Antworten.
Standardmäßig sucht rpy2 nach dem ersten im PATH gefundenen R. Es kann vorkommen, dass das R im PATH nicht mit der beim dynamischen Laden ausgewählten gemeinsam genutzten R-Bibliothek übereinstimmt.
JMP lädt Python als gemeinsam genutzte Bibliothek, daher muss sich jeder Ladepfad für gemeinsam genutzte Bibliotheken an Orten befinden, die JMP erwartet. Das eingebettete Python in JMP lädt das rpy2-Modul, und seine gemeinsam genutzten Bibliotheken befinden sich im entsprechenden Verzeichnis site-packages/. Dann versucht rpy2, die gemeinsam genutzten R-Bibliotheken in den Prozessbereich zu laden. Wenn eine Bibliothek nicht gefunden werden kann oder das Laden aufgrund eines Konflikts fehlschlägt, wird der Prozess an einer Stelle beendet, die JMP nicht erreichen kann. Dies war das Problem, das wir vor langer Zeit hatten, als wir versuchten, eine Conda-Installation von Python unter Windows zu verwenden. Conda hat die Standardspeicherorte verschoben und den rpath nicht festgelegt, sodass JMP keine DLLs finden konnte, von denen Python selbst abhängig war, und sofort beendet wurde, wenn versucht wurde, irgendetwas von Python mit einer auf Anaconda basierenden Installation auszuführen. Außerdem wird keine der geladenen DLLs freigegeben und entladen, bis JMP selbst heruntergefahren wird.
Ich empfehle nicht, rpy2 zu verwenden. Meine persönliche Vorliebe/Empfehlung ist, pyRserve zu verwenden. Das Paket pyRserve ist ein Python-Thin-Client, der über TCP/IP mit einem Rserve-Server kommuniziert. In $SAMPLE_SCRIPTS/Python/Rserve.py gibt es ein Beispiel mit ausführlichen Kommentaren zu Konfiguration und Verwendung.
Dadurch werden Prozesse viel besser isoliert und Sie laden R nicht in den Adressraum von Python, der sich dann in JMP befindet. Mit Rserv hat ein Absturz oder ein Problem in R dann keine Auswirkungen auf JMP. Darüber hinaus kann Ihre Rserv-Instanz überall ausgeführt werden. Lokal unter Windows oder auf macOS, innerhalb von WSL (Windows Subsystem for Linux) unter Windows, auf einem Remotecomputer (Linux, macOS, ...). Ein Remote-R-Server erfordert möglicherweise zusätzliche Netzwerkverwaltungsunterstützung wie Firewalls und das Zulassen von Ports. Bei lokaler Ausführung sollte dies kein Problem sein.
Dies ist eine der Gefahren, wenn Sie das Laden von DLLs in JMP zulassen. Egal, ob dies aus Python-Modulen oder aus unseren eigenen JSL-Lade-DLL-Funktionen erfolgt. Ein Absturz oder Fehler in der geladenen DLL kann einen nicht behebbaren und nicht behandelten Fehler in JMP verursachen .