JMPJSLがMacOSのPythonos.environ['PATH']から/usr/ local / bin(およびその他のパス)を削除するのはなぜですか?発行ステートメント:
--Mac OSでは、JSLがPythonインタープリターを起動すると、os.environ['PATH']から/use / local/binおよびその他のパスが削除されます。
この問題を再現する方法:
-次のPythonコードの場合
import os
print(os.environ)
-コードがMacOSターミナルで実行された場合、結果は次のようになります。
(注:以下に示すのは「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:JMPJSLがMacOSのPythonos.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の外部のシェル環境を変更するものではありません。