7

その場で os.sys.path を変更する必要がある一連のスクリプトがあります。次に、スクリプトはサブプロセスを開始します。理想的には、サブプロセスは呼び出し元と同じ os.sys.path を持ちます。サブプロセススクリプトを変更する必要があるため、引数として渡すことは避けたいと思います。

動作し、すべてのニーズを満たすコードがあります。これを行うためのより良い方法があるかどうか、およびこのアプローチに落とし穴があるかどうかを知りたいです。

主なプロセス

import os
import sys
import subprocess

#append a dir thats not on the sys path
sys.path.append('C:/pytest2/')

#convert the sys.path into env variable format
pypath = ''
for d in sys.path:
    pypath = pypath + d + ';'

#create a temp copy of the env variables
myenv = os.environ.copy()

#set PYTHONPATH to match this scripts sys.path
myenv['PYTHONPATH'] = pypath

#setup a python command to echo the sys.path
command = 'python C:/pytest/test_subprocess.py'

#launch the subprocess with the custom env
p = subprocess.Popen(command, env=myenv)

C:/pytest/test_subprocess.py

import sys
print 'sys path'
print sys.path

メイン プロセスを実行すると、このコンソール出力が表示されます

ここに画像の説明を入力

ご覧のとおり、C:/pytest2/ は test_subprocess.py の os.sys.path にあります。

編集 os.sys を sys に変更

4

1 に答える 1

-3

PYTHONPATH 環境変数は、sys.path. Python 自体 (およびsiteモジュール) は、さまざまなソースからモジュール検索パスを初期化します。PYTHONPATH 環境変数を介して 1 つのディレクトリを追加するだけです。さらに良いのは、既に検索されている通常の site-packages ディレクトリにインストールすることです。そうすれば、環境で特別なことをする必要はありません。

于 2012-09-25T23:46:38.357 に答える