1

Python スクリプト内での環境モジュールのロード

上記のソリューションは、python インタラクティブ シェルと実行可能な python ファイル内で動作が異なります。インポート ステートメントが環境変数 PYTHONPATH を認識していないように見える exe.py 設定で動作させる方法を理解するのに助けが必要です。

Python シェルでは、このソリューションにより、PYTHONPATH を変更する環境モジュールをロードできます。その後、その修正された PYTHONPATH から python モジュールをインポートできます。これは優れた機能であり、実行可能な python スクリプトで実行したいこととまったく同じです。

Python スクリプト (先頭は #!/usr/bin/env python など) では、PYTHONPATH の修正まで問題なく動作します。

if 'PYTHONPATH' in os.environ: print 'PYPATH:', os.environ['PYTHONPATH']
# nothing prints

execfile('/usr/local/Modules/default/init/python.py')
module('list')
# No Modulefiles Currently Loaded.

module('load', 'my_module')
print 'loaded my_module'
# loaded my_module
module('list')
#   1) /my_module
if 'PYTHONPATH' in os.environ: print 'PYPATH:', os.environ['PYTHONPATH']
# /home/me/py/my_module

しかし、それは python.exe で動作する限りです

Python シェルで正常に動作する my_module からインポートしようとすると、トレースバック レポート 'ImportError: No Module named module_1' が発生します。

このことから、python exeでこれを実行すると、pythonは修正されたPYTHONPATHを使用していない、または「見ていない」と結論付けることができると思います(ただし、インタラクティブなpythonシェルでは表示されます)。

それは私が立ち往生するところです!何か案は?大変助かります。私が見落としていた本当に簡単な解決策があるに違いありません。それについて聞いて喜んでいます。

ありがとう & 良い一日を

マット

編集:さらに読むと、python自体がPYTHONPATHのコンテンツをsys.pathに追加することが示唆されていますが、これはインタラクティブなpythonシェルでもpython.exeを実行しても発生しません。

sys.path.insert(1,os.environ['PYTHONPATH']) を使用してexeで手動でこれを行うと、必要な機能が得られます

4

1 に答える 1

1

sys.path にパスを追加するための初期化中に pythonpath が読み取られると思います。sys.path() および PYTHONPATH の問題の例を参照してください。

したがって、更新する必要がある変数は実際には sys.path のみです。Python が既に初期化されている場合、os.environ['PYTHONPATH'] を更新するには遅すぎます。

于 2015-02-13T08:19:05.710 に答える