I'm experiencing issues integrating Python with JMP 17. Despite following the recommended steps, JMP crashes every time I run Python Init. Here are the details:
시스템 설정:
- JMP 버전: 17
- Python 버전: 3.9.13(64비트)(v3.13.1도 시도했습니다)
- OS : Windows 10 (64비트)
취해진 단계:
- Python 3.9.13을 설치하고 PATH에 추가했습니다.
- 필요한 Python 패키지를 설치했습니다: numpy, pandas, matplotlib, scipy, PyQt5.
- Set the environment variable
JMP_PYTHON_MODULE_PATH to C:\Program Files\Python39\python39.dll. - 명령 프롬프트를 통해 Python 설치와 패키지 설치를 검증했습니다.
- Python을 초기화하기 위해 간단한 JSL 스크립트를 실행해 보았습니다.
// Initialize Python with the specified path
Python Init( Path( "C:\\Program Files\\Python39\\python39.dll" ) );
// Simple Python code to test initialization
python_code = "
print('Hello from Python!')
";
// Run the Python code
Python Submit(python_code);
// Close the Python session
Python Term();문제: JMP crashes and closes immediately upon running Python Init.
문제 해결 단계 수행:
- Python 경로와 DLL 파일 위치를 확인했습니다.
- 충돌을 피하기 위해 다른 Python 버전을 제거했습니다.
- JMP 17을 다시 설치했습니다.
- 오류 메시지가 있는지 JMP 로그를 확인했습니다(없음).
이러한 노력에도 불구하고 문제는 지속됩니다. 다른 사람도 이 문제를 겪었거나 해결 방법에 대한 제안이 있습니까?
귀하의 도움에 미리 감사드립니다!
JMP18로 업데이트할 수 있을까요?
모든 사용자에게 업데이트가 무료로 제공됩니다.
많은 훌륭한 개선 사항 외에도 JMP + Python이 이제 매력적으로 상호 작용합니다 
제가 직접 업그레이드할 수 있었으면 좋겠지만, 제가 일하는 회사에서는 항상 새로운 소프트웨어 업데이트가 최소한 1년은 늦게 나옵니다.
저는 JMP 지원팀에 직접 연락하여 문제 해결 티켓을 제출하겠습니다.
지원@jmp.com
다른 사람들이 언급했듯이, JMP 18은 Python과 관련하여 여러분의 삶을 훨씬 더 쉽게 만들어줍니다. JMP는 JMP와 함께 바로 작동하는 개인 임베디드 Python 3.11을 설치합니다. Python을 JMP 14-17에서 작동시키는 것은 어려울 수 있으며, JMP가 이제 Python과 함께 제공되는 주된 이유입니다.
먼저 환경 변수를 제거합니다. JMP_PYTHON_MODULE_PATH
둘째, Python.org 또는 Anaconda를 실행하고 있습니까? Python.org를 사용하세요.
셋째, JMP 17은 64비트이므로 64비트 Python을 사용해야 합니다.
Anaconda를 작동시킬 수 있었지만, 디버거에서 JMP 소스 코드를 단계별로 실행하여 Python Init을 올바르게 구성해야만 가능했습니다.
또한 JMP 14-17은 가상 환경( venv)에서 작동하도록 설계되지 않았습니다.
Python Connect()와 Python Init() 함수는 문제를 해결할 수 있는 다양한 매개변수를 사용합니다.
가장 간단하게 시도해 볼 수 있는 것은 다음과 같습니다.
Python Init ( Use Python Version("3.9") );
이미 다음을 시도했습니다.
Python Init (
Path("C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\python39.dll") <BR />);
마지막으로, '무차별 대입' 방법은 dll 경로와 전체 Python sys.path를 JSL 목록으로 지정하는 것입니다. 명령줄에서 Python을 시작하고 다음을 실행합니다.
import sys
print ( sys.path )
내 기계에 다음을 제공합니다.
Python 3.9.2 (tags/v3.9.2:1a79785, Feb 19 2021, 13:44:55) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip', 'C:\\_me_\\panels\\AppData\\Local\\Programs\\Python\\Python39\\DLLs', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39', 'C:\\Users\\_me_\\AppData\\Roaming\\Python\\Python39\\site-packages', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\win32', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\win32\\lib', 'C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\Pythonwin']
>>>
이제 Python 리스트 [ ... ]를 가져와서 아래에 표시된 것처럼 Python Init()에 전달할 JSL 리스트를 만들 수 있습니다. 여기서 두 가지가 다릅니다. 아래 스크립트는 얼마 전에 실행한 스크립트에서 붙여넣은 것입니다. 오늘 위의 Python을 실행했습니다. 의심스러우면 Python 자체가 sys.path에 반환하는 모든 것을 사용합니다.
Names Default To Here( 1 );
Python Init(
Path("C:\\Users\\_me__\\AppData\\Local\\Programs\\Python\\Python39\\python39.dll"),
Python Sys Path(
{
"",
"C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip",
"C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\DLLs",
"C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib",
"C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39",
"C:\\Users\\_me_\\AppData\\Roaming\\Python\\Python39\\site-packages",
"C:\\Users\\_me_\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages"
}
)
);
Python Submit("\[
import sys
print(sys.path)
print(sys.version)
]\");
x1 = [1, 2, 3];
Python Send( x1 );
x1 = [3,2,1];
x2 = Python Get( x1 );
Show( x1, x2 );
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
Python Send( dt1 );
dt2 = Python Get( dt1 );
dt2 << New Data View;
Close( dt1 );
//Python Term();
Python Submit("\[
print(dt1)
]\");
그 이상은 JMP 18로 업그레이드하세요.
감사합니다. env 변수를 제거하고 sys.path 목록을 Python Init에 전달하니 작동했습니다.