JMP 18에서 Python 프로그램을 실행하면 JMP가 사라집니다.저는 JMP 18의 새로운 Python 인터페이스에 익숙해지려고 노력해 왔습니다. 제가 탐구하고 있는 질문 중 하나는 "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가 닫힙니다(rpy2 가져오기가 작동하는 것 같습니다). 아마도 이것은 https://github.com/jupyterlab/jupyterlab/issues/4817 과 같은 것과 관련이 있습니까?
Re: JMP 18에서 Python 프로그램을 실행하면 JMP가 사라집니다.나는 이것이 jupyterlab 문제 4871에서 언급된 문제의 일부일 가능성이 있다고 생각합니다. 특히 응답 중 하나에 언급되어 있습니다.
기본적으로 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을 실행하려고 하면 즉시 종료되었습니다. 또한 JMP 자체가 종료될 때까지 로드된 DLL 중 어느 것도 해제되거나 언로드되지 않습니다.
rpy2를 사용하지 않는 것이 좋습니다. 내 개인적인 선호/제안은 pyRserve를 사용하는 것입니다. pyRserve 패키지는 TCP/IP를 통해 Rserve 서버와 통신하는 Python 씬 클라이언트입니다. $SAMPLE_SCRIPTS/Python/Rserve.py에는 구성 및 사용에 대한 광범위한 설명이 있는 예제가 있습니다.
이렇게 하면 프로세스가 훨씬 더 잘 격리되며 JMP 내에 있는 Python의 주소 공간에 R을 로드하지 않아도 됩니다. Rserv를 사용하면 R 내의 충돌이나 문제가 JMP에 영향을 미치지 않습니다. 또한 Rserv 인스턴스는 어디에서나 실행될 수 있습니다. Windows 또는 macOS에서 로컬로, Windows의 WSL(Linux용 Windows 하위 시스템) 내에서, 원격 시스템(Linux, macOS, ...)에서. 원격 R 서버에는 방화벽 및 허용 포트와 같은 추가 네트워크 관리 지원이 필요할 수 있습니다. 로컬로 실행하면 문제가 되지 않습니다.
이는 JMP에 DLL을 로드할 때 발생할 수 있는 위험 중 하나입니다. Python 모듈 내에서든 자체 JSL 로드 Dll 기능에서든 상관없습니다. 로드된 DLL의 충돌이나 오류로 인해 JMP에서 복구할 수 없고 처리할 수 없는 오류가 발생할 수 있습니다 .