새 추가 기능 사용자를 위해 Python Init 경로 및 sys 경로 문을 구성하는 방법은 무엇입니까?안녕 모두,
Application Builder를 사용하여 Python 통합으로 애플리케이션을 개발하고 있습니다. 다른 사용자와 공유할 수 있도록 이것을 추가 기능으로 컴파일할 계획이지만 모든 사용자에 대해 Python 초기화를 올바르게 설정하는 방법이 필요합니다.
내가 응용 프로그램을 실행하는 방식은 나에게만 적합합니다(사용자 EstelleS1 및 내 환경, JMPPython환경) :
appNS:PythonPathText = "C:\Users\EstelleS1\AppData\Local\Programs\Python\Python37\JMPPythonEnvironment\Scripts\python37.dll";
appNS:PythonSysPathText = {"",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\Scripts\\python37.zip",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\DLLs",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\lib",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\lib\\site-packages"};
Python Init(
Path( PythonPathText ),
Python Sys Path( PythonSysPathText )
);(appNS는 내 애플리케이션 네임스페이스를 나타냄)
다른 사용자는 많은 관리자 권한을 갖게 되므로 새 사용자가 앱 시작 관리자에서 버튼을 클릭하여 Python 경로 및 sys 경로 문자열이 포함된 텍스트 파일을 업로드하면 애플리케이션이 해당 파일을 가져오는 워크플로를 설정할 생각이었습니다. 파일을 만들고 새 폴더에 복사본을 저장합니다(여기서 $DESKTOP은 모든 사용자 컴퓨터에서 액세스할 수 있는 위치여야 함).
PythonPathButtonPress=Function({this},
// This function is called when the button is pressed
name = this << Get Button Name;
pickPythonPathFile = Pick File("Please select Python Path text file");
pickPythonSysPathFile = Pick File("Please select Python Sys Path text file");
PythonPathFile = Load Text File( pickPythonPathFile );
PythonSysPathFile = Load Text File( pickPythonSysPathFile );
PythonConfigFolder = ( "$DESKTOP/JMPPython Config/" );
NEWPythonPathFile = (PythonConfigFolder || "PythonPath.txt" );
NEWPythonSysPathFile = (PythonConfigFolder || "PythonSysPath.txt" );
PythonConfigDir = Create Directory( PythonConfigFolder );
Save Text File( NEWPythonPathFile, PythonPathFile );
Save Text File( NEWPythonSysPathFile, PythonSysPathFile );
);따라서 이 작업을 처음 수행한 후에는 사용자가 Python을 다시 구성하기 위해 버튼을 클릭할 필요가 없습니다. 그런 다음 추가 기능의 Python 통합 부분을 실행하면 응용 프로그램은 액세스 가능한 폴더 위치($DESKTOP 또는 더 나은 위치)에서 이러한 복사된 파일을 열기 위해 자동으로 검색합니다.
PythonPathFile = Convert File Path( "$DESKTOP\JMPPython Config\PythonPath.txt", search );
PythonSysPathFile = Convert File Path( "$DESKTOP\JMPPython Config\PythonSysPath.txt", search );
Try( appNS:PythonPathText = Load Text File( PythonPathFile ), New Window("Python Initialization Error", << Modal, Text Box("Need to configure Python first!") ); Throw() );
Try( appNS:PythonSysPathText = Load Text File( PythonSysPathFile ), New Window("Python Initialization Error", << Modal, Text Box("Need to configure Python first!") ); Throw() );
Python Init(
Path( PythonPathText ),
Python Sys Path( PythonSysPathText )
);그러나 이것은 효과가 없었습니다. "지정된 모듈을 찾을 수 없습니다. 'Python Init' , Python Init/*###*/(Path( PythonPathText ), Python Sys Path( PythonSysPathText ))의 액세스 또는 평가에서" 오류가 발생했습니다. 이 오류의 원인이나 해결 방법을 정확히 모르겠습니다.
누구든지 이 문제에 대한 통찰력이나 더 나은 해결책을 줄 수 있다면 감사하겠습니다.
스크립팅Re: 새 추가 기능 사용자를 위해 Python Init 경로 및 sys 경로 문을 구성하는 방법은 무엇입니까?아니, 불행히도. Term()은 일부 전역 변수를 쉬게 하고 새로 시작한 것처럼 환경을 정리하려고 시도합니다. 기술적인 문제는 Python 공유 라이브러리를 언로드하고 로드할 수 있는 모든 공유 라이브러리가 실행 불가능하다는 것입니다. 따라서 Python을 잘못 초기화했거나 다른 버전의 Python을 초기화하려면 JMP를 다시 시작해야 합니다.
Re: 새 추가 기능 사용자를 위해 Python Init 경로 및 sys 경로 문을 구성하는 방법은 무엇입니까?사실 저는 이것을 수행하는 다른 방법을 알아 냈습니다.
PythonSysPathFile = Convert File Path( "$DESKTOP\JMPPython Config\PythonSysPath.txt", search );
PythonSysPathText = Load Text File( PythonSysPathFile );
PythonSysPathList = {""};
NListItems = NItems(Eval List(Words(PythonSysPathText, "\!N"))) + 1;
For( i = 1, i < NListItems, i++,
string = Word(i, PythonSysPathText, "\!N");
Insert Into(PythonSysPathList, string)
);
Python Init(
Path( PythonPathText ),
Python Sys Path( PythonSysPathList )
);
version = Python Get Version();
Show( version );
그리고 sys 경로 목록이 올바르게 채워지고 Python이 시작됩니다... 하지만 이제 내 가상 환경이 보이지 않습니다!...
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------
편집: Python Term()이 내가 생각한 대로 작동하지 않는다고 생각합니다. 스크립트를 처음 실행할 때 파이썬을 올바르게 시작한 다음 나중에 초기화 코드를 엉망으로 만들면 첫 번째 올바른 초기화를 기반으로 계속 잘 실행되고 그 반대의 경우도 마찬가지입니다. 이 초기화 코드가 작동하는지 실제로 확인하려면 JMP를 완전히 종료하고 다시 열어야 했습니다. 여기에 게시한 질문을 해결하는 동안 시도한 첫 번째 잘못된 초기화 시도를 사용하는 데 멈췄습니다.
Python Term()이 초기화된 Python 환경에서 실제로 닫히지 않습니까?
Re: 새 추가 기능 사용자를 위해 Python Init 경로 및 sys 경로 문을 구성하는 방법은 무엇입니까?답장을 보내 주셔서 감사합니다! 그런 문제가 있었는데... 나는 따옴표없이 (그리고 빈 줄없이) 텍스트 파일의 dll에 대한 파일 디렉토리 경로를 가짐으로써 제대로 작동하는 파이썬 경로를 얻었다 고 생각합니다.
이제 일부 파이썬 코드가 실행되지만 여전히 문제가 있으며 파이썬 sys 경로 인수에서 비롯된 것일 수 있다고 생각합니다. 텍스트 파일을 로드하기 위해 일부 이스케이프 문자를 사용해야 할 수도 있지만 아직 잘 이해하지 못하고 있습니다... 몇 가지 테스트를 시도했지만 적절한 솔루션에 도달하지 못했습니다.
이것이 내 텍스트 파일에 내 sys 경로를 갖는 올바른 방법입니까?
-------------------------------------------------- -------------------------------------------------- --------------------
{"",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\Scripts\\python37.zip",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\DLLs",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\lib",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment",
"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\lib\\site-packages"}
-------------------------------------------------- -------------------------------------------------- --------------------
JMP에서 로드하고 Show()를 사용하면 로그가 다음과 같이 출력됩니다.
PythonSysPathText = "{\!"\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\Scripts\\python37.zip\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\DLLs\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\lib\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\!",
\!"C:\\Users\\EstelleS1\\AppData\\Local\\Programs\\Python\\Python37\\JMPPythonEnvironment\\lib\\site-packages\!"}";이 올바른지? 그렇다면 Python Init에 다른 문제가 있는 것입니다.
Re: 새 추가 기능 사용자를 위해 Python Init 경로 및 sys 경로 문을 구성하는 방법은 무엇입니까?더보기...