1

わかりましたので、次の状況があります。ターゲット PC で PYTHONPATH を動的に編集する必要があります。プロジェクトの構造は次のとおりです。

trunk
     bin
        start_script
     dependencies
        dependencies

start_scriptから、私ができるpythonから:

root_path = os.path.split(os.path.dirname(os.path.abspath(__file__)))[0]
dependencies_root = os.path.join(root_path, 'dependencies')
from sys import path
path.extend([root_path, dependencies_root])

これでうまくいきますが、process.Popenで新しいpythonプロセスを開始する必要があり、sys.pathへの変更はそれまでになくなっているようです。

ここでは、sh スクリプトの方がうまくいくと思っていましたが、残念ながら、私はここでは完全に初心者であり、どうすればよいかわかりません。sh スクリプトは、基本的に上記の python が行ったことを行う必要があるため、次のようになります。

[1] Get the absolute path of the directory the script is located
[2] Get the parent of that folder (say parent_path)
[3] export PYTHONPATH=$PYTHONPATH:parent_path
[4] python start_script.py

したがって、基本的に最初の 2 つの手順は、私が支援を必要としているものです。また、subprocess.Popen で開かれたサブプロセスで Python の sys.path を変更する方法がある場合は、お知らせください。

4

3 に答える 3

4

dictを使用して、start_scriptでPYTHONPATH更新すると同時に環境変数を更新することができます。sys.pathos.environ

于 2011-09-05T13:25:31.500 に答える
1

ファイルを使用し.pthます。http://docs.python.org/install/index.html#inst-search-pathを参照してください

.pthファイルは、1 行に 1 つのディレクトリ パスで構成されるファイルです。リストされたディレクトリを python パスに挿入します。

これは、シェルスクリプトを実行するよりも優れている可能性がありますが、すべての欠点があります (インストールがより複雑になる、移植性が損なわれるなど)。

于 2011-09-05T13:00:45.323 に答える
0

subprocess.Popenenvの引数を使用しないのはなぜですか?

class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

env が None でない場合、新しいプロセスの環境変数を定義するマッピングでなければなりません。これらは、デフォルトの動作である現在のプロセスの環境を継承する代わりに使用されます。

または、pythonプロセスを開始するだけの場合は、単純にmultiprocessingモジュールを使用できます。

ドキュメントの例:

from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))
    p.start()
    p.join()
于 2011-09-05T11:43:52.697 に答える