JMP scompare quando si esegue un programma Python in JMP 18Ho tentato di familiarizzare con la nuova interfaccia Python in JMP 18. Una delle domande che sto esplorando è: "È possibile scrivere un programma Python nell'ambiente JMP che esegua i moduli r. Il programma molto semplice che sto utilizzando È
# 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}")
Ho installato il pacchetto rpy2 utilizzando JSL
Python Install Packages( "rpy2");
Si è installato senza problemi. L'ho installato anche nella mia versione nativa 3.8 di Python e nella versione nativa di Python 3.11
Il codice Python viene eseguito senza errori in Python 3.8 e nella versione 3.11 installata di JMP.
Tuttavia, quando si esegue il codice in Python sotto JMP 18, non appena viene eseguita la riga 3, JMP scompare immediatamente.
from rpy2.robjects.packages import importr
Qualcuno ha qualche idea sul perché questo sta accadendo?
Automazione e scriptingRi: JMP scompare quando si esegue un programma Python in JMP 18Non sono riuscito a installare il pacchetto utilizzando
Python Install Packages( "rpy2");
O
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')
e ho dovuto passare attraverso la riga di comando. Dopo averlo installato, sto riscontrando lo stesso problema, JMP si chiuderà semplicemente quando importo rpy2.robjects (l'importazione di rpy2 sembra funzionare). Forse questo è correlato a qualcosa come qui https://github.com/jupyterlab/jupyterlab/issues/4817 ?
Ri: JMP scompare quando si esegue un programma Python in JMP 18Penso che sia probabilmente parte dei problemi menzionati nel numero 4871 di jupyterlab. Nello specifico, la menzione in una delle risposte.
Per impostazione predefinita rpy2 cercherà la prima R trovata nel PERCORSO. Ciò che può accadere è che la R nel PERCORSO non corrisponde alla libreria condivisa R raccolta durante il caricamento dinamico.
JMP carica Python come libreria condivisa, quindi qualsiasi percorso di caricamento della libreria condivisa dovrebbe trovarsi nelle posizioni previste da JMP. Il Python incorporato in JMP carica il modulo rpy2, e le sue librerie condivise si troverebbero nella directory site-packages/ corrispondente. Quindi rpy2 tenta di caricare le librerie condivise R nello spazio del processo. Se una libreria non viene trovata o non viene caricata a causa di un conflitto, il processo verrà interrotto in un punto non raggiungibile da JMP. Questo era il problema che abbiamo riscontrato molto tempo fa nel tentativo di utilizzare un'installazione Conda di Python su Windows. Conda ha spostato le posizioni predefinite e non ha impostato rpath, quindi JMP non è riuscito a trovare le DLL da cui dipendeva Python stesso e sarebbe uscito prontamente tentando di eseguire qualsiasi cosa Python con un'installazione basata su Anaconda. Inoltre, nessuna delle DLL caricate verrà rilasciata e scaricata fino alla chiusura di JMP stesso.
Non consiglio di utilizzare rpy2. La mia preferenza/suggerimento personale è utilizzare pyRserve. Il pacchetto pyRserve è un thin client Python che comunica con un server Rserve su TCP/IP. C'è un esempio in $SAMPLE_SCRIPTS/Python/Rserve.py che contiene ampi commenti sulla configurazione e sull'utilizzo.
Questo isola i processi molto meglio e non stai caricando R nello spazio degli indirizzi di Python che si trova quindi all'interno di JMP. Con Rserv, un arresto anomalo o un problema all'interno di R non avrà alcun effetto su JMP. Inoltre, la tua istanza Rserv può essere eseguita ovunque. Localmente in Windows o su macOS, all'interno di WSL (sottosistema Windows per Linux) su Windows, su un computer remoto (Linux, macOS, ...). Un server R remoto potrebbe richiedere supporto aggiuntivo per l'amministrazione di rete, ad esempio firewall e autorizzazione delle porte. Funzionando localmente, non dovrebbe essere un problema.
Questo è uno dei pericoli legati al caricamento delle DLL in JMP. Che si tratti dell'interno dei moduli Python o delle nostre funzionalità Dll di caricamento JSL. Un arresto anomalo o un errore nella DLL caricata può causare un errore irreversibile e non gestito in JMP.