Python을 사용하여 jsl 스크립트를 JMP 18로 업데이트JMP 18의 새로운 Python 기능을 위해 업데이트하고 싶은 Python 스크립트를 호출하는 jsl 스크립트가 있습니다.
JMP 18까지는 Python 연결을 준비하기 위해 다음과 같은 작업을 수행했습니다.
// Python setup
Python Init( Debug Print Statements( "TRUE" ), Init Trace("TRUE"), Debug Print Output("TRUE") );
Python Submit(
"\[
import numpy as _JMPnp
import scipy as _JMPsp
import pandas as _JMPpd
import sqlite3 as _JMPsq
if PY_DEBUG_OUTPUT:
print("Python Imports OK")
]\"
);Python Init()는 이제 더 이상 사용되지 않으므로 a) python send(), submit(), ....를 사용하기 전에 Python 연결을 초기화해야 하는지 궁금합니다. b) 그렇다면 어떻게 해야 할까요? python connect()를 사용하는 것 같아요.
내 현재 이론은 위의 요소를 다음으로 대체해야 한다는 것입니다.
Python connect();
Python submit (
...blablabla...
);
그러나 이에 대한 문서와 예제는 약간 부족합니다.
자동화 및 스크립팅Re: Python을 사용하여 jsl 스크립트를 JMP 18로 업데이트JMP 18에서는 Python 환경을 '초기화'하는 데 Python Init()나 Python Connect()가 필요하지 않습니다. Python은 JMP에 내장되어 설치되므로 즉시 사용할 수 있습니다. 이것이 Python Init()이 더 이상 사용되지 않는 이유입니다. Python Connect는 연결 개체 사용을 지원하기 위해 여전히 존재합니다.
conn = 파이썬 연결();
conn << Get( dt );
conn << Submit("\[ ... 파이썬 코드 ... ]\");
연결 개체가 필요하지 않으면 Python Init() 또는 Python Connect()가 필요하지 않습니다. 당신은 간단히 할 수 있습니다 :
Python 제출(
... 내 코드는 여기에 있습니다 ...
);
Re: Python을 사용하여 JMP 18로 jsl 스크립트 업데이트제가 생각한 오류는 원하는 패키지를 찾을 수 없다는 오류가 발생했기 때문에 어떤 종류의 초기화가 필요하다고 생각한 것 같습니다.
하지만 jmputils.jpip('list')를 실행한 후, 먼저 해당 패키지를 설치해야 한다는 것을 알았습니다(numpy나 pandas와 같은 표준 패키지는 미리 설치되어 있을 것이라고 가정했습니다).
Re: Python을 사용하여 JMP 18로 jsl 스크립트 업데이트JMP 18.0은 JMP 내에서 실행되는 Python과 충돌을 일으킬 수 있는 몇 가지 패키지를 제외하고 표준 Python.org 배포판에만 포함되어 있습니다. 주로 tkinter와 venv가 여기에 해당합니다. 외부 패키지는 사용자가 직접 설치해야 합니다. 몇 가지 이유가 있습니다. JMP에서 제공하는 모든 타사 라이브러리, 패키지 또는 오픈 소스 구성 요소는 법무 부서의 검토를 포함한 여러 내부 승인 절차를 거쳐야 합니다. 또한 해당 패키지의 버그 수정 및 보안 문제도 모니터링해야 합니다. 마지막으로, 패키지 간 비호환성이 존재하기 때문에 패키지 버전을 선택하면 필요한 패키지와 충돌할 수 있습니다. 표준 라이브러리에 포함된 패키지 외에 필요한 패키지를 선택할 수 있는 권한은 사용자에게 있습니다.
JMP 14-17 Python 스크립트를 이식할 때 주의해야 할 다른 사항.
- JMP를 종료할 때만 환경이 사라지므로 Python Term();은 필요하지 않습니다.
- Python Get Graphics(); was removed from JMP 18. This single function caused a dependency on matplotlib. And the goal is to prevent JMP from requiring any external packages for basic functionality. It is easy enough to replicate the same functionality in your own scripts. The Scripting Index example for 'Python Get Graphics();' contains a complete example of the replacement code. Simply save the figure to an image file and open the image in a JMP window.
Python Submit("\[
...
# save image to location of your choosing
plt.savefig('/tmp/get_graphics_img.png')
]\");
// plot = Python Get Graphics( png ); // DEPRECATED
plot = Open( "/tmp/get_graphics_img.png", png );
pngJMP = New Window( "Plot", Picture Box( plot ) );
Python Submit( "plt.close()" );
rc = Delete File( "/tmp/get_graphics_img.png" );
- Python Control()은 matplotlib의 일부 옵션을 설정하는 데 사용되었습니다. 18.0에서 제거되지는 않았지만, 이제 이 함수의 유일한 기능은 로그에 '더 이상 사용되지 않음' 경고를 출력하는 것입니다.
- Python Is Connected()는 항상 true를 반환하므로 더 이상 사용되지 않습니다. Python 환경은 항상 사용 가능합니다.
마지막으로 주의해야 할 문제가 하나 있습니다. mx = Python Get(numpy.ndarray);에서 문제가 발견되었습니다. NumPy 배열이 2차원보다 크면 결과를 얻지만 2보다 큰 차원이 손실됩니다. NumPy 배열의 메모리 레이아웃이 Row-Major(C 스타일)가 아닌 Column-Major(Fortran 스타일)인 경우에도 문제가 있었습니다. 이로 인해 JMP가 충돌할 수 있습니다. 이 문제는 해결되었습니다. 수정 사항은 JMP 18.1에 포함될 예정입니다. JMP 18.0에서 이 문제가 발생하는 경우 NumPy 데이터가 Row-Major 형식인지 확인하고 1차원 또는 2차원 ndarray만 'Get'하십시오. ndarray를 Get()하면 1차원 또는 2차원만 지원하는 JSL Matrix를 만들려고 합니다. 이 버그는 JMP 18.0에만 해당되는데, JMP 14-17은 파일 시스템을 통해 데이터를 임시 이진 파일인 double로 전송했기 때문입니다. 하지만 차원 수가 2보다 크면 14-17에서 데이터가 손실될 수 있습니다.