MacOS 上の Python os.environ['PATH'] から JMP JSL が /usr/local/bin (およびその他のパス) を削除するのはなぜですか?問題ステートメント:
-- Mac OSでは、JSLがPythonインタープリターを起動すると、os.environ['PATH']から/use/local/binなどのパスが削除されます。
この問題を再現する方法:
-- 次のPythonコードの場合
import os
print(os.environ)
-- コードを Mac OS ターミナルで実行すると、結果は次のようになります。
(注: 以下には「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 がシェルからのパス設定を尊重するようにする方法はありますか?
自動化とスクリプトmacOS大量カスタマイズ品質およびプロセスエンジニアリング結果の共有と伝達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の外部のシェル環境を変更するものではありません。