JMP JSL이 MacOS의 Python os.environ['PATH']에서 /usr/local/bin(및 기타 경로)을 제거하는 이유는 무엇입니까?문제 설명:
-- Mac OS에서 JSL이 Python 인터프리터를 시작할 때 os.environ['PATH']에서 /use/local/bin 및 기타 경로를 제거합니다.
이 문제를 재현하는 방법:
-- 다음 Python 코드의 경우
import os
print(os.environ)
-- Mac OS Terminal에서 코드를 실행하면 결과는 다음과 같습니다.
(참고: 아래에는 'PATH' 항목만 표시됩니다. 기타 관련 없는 항목은 표시되지 않음)
environ({ 'PATH':'/usr/local/sbin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/mysql/bin:/opt/X11/bin'})-- 코드가 JSL로 실행되는 경우(아래 JSL 코드 참조)
Python Init();
python_codes =
"<BR />import os
print(os.environ)
";
Python Init();
Python Submit (python_codes);
Python Term();
결과는
environ({ 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin'})문제:
- JMP/JSL이 이러한 경로를 제거하는 이유는 무엇입니까?
- JSL Python 코드에서 'PATH' 설정을 수동으로 수정하는 것 외에 JMP/JSL이 셸의 경로 설정을 따르도록 하는 방법이 있습니까?
맥 OS스크립팅Re: JMP JSL이 MacOS의 Python os.environ['PATH']에서 /usr/local/bin(및 기타 경로)을 제거하는 이유는 무엇입니까?JMP의 Python은 JMP 자체가 보는 것과 동일한 환경 변수를 봅니다. Python의 공유 라이브러리는 JMP의 프로세스 공간 내에서 로드되므로 JMP의 Python은 JMP가 보는 것만 볼 수 있습니다. 다음 JSL을 실행하여 이를 확인할 수 있습니다.
경로 = 환경 변수 가져오기 ( "길" );
JSL에서 얻는 것과 os.environ에서 얻는 것은 동일해야 합니다.
진짜 질문은 JMP가 콘솔과 다른 경로를 보는 이유입니다... 명령줄에 도달하기 전에 쉘 환경 프로세스 .login, .profile, .bashrc, .zshrc, ... 파일을 기억해야 합니다. 둘째, GUI 실행 환경은 해당 파일을 처리하지 않습니다. ~/.login 또는 ~/.profile 파일을 처리할 수 있지만 변경 후에는 먼저 로그아웃했다가 다시 로그인해야 로그인 셸 초기화 파일에 대한 변경 사항이 처리됩니다.
이러한 경로가 필요한 경우 스크립트 내에서 os.environ을 업데이트하여 Python 내의 PATH에 추가할 수 있습니다. 이는 Python이 환경 변수로 보는 것만 업데이트해야 하며 JMP 외부의 셸 환경은 변경하지 않아야 합니다.