Python:PATH環境変数を変更するプラットフォームに依存しない方法


89

を変更する方法はありますか PATHPythonを使用してプラットフォームに依存しない方法で環境変数ますか?

似たようなものos.path.join()

回答:


170

を変更できるはずos.environです。

os.pathsepは異なるパスを区切る文字なので、これを使用して新しいパスを追加する必要があります。

os.environ["PATH"] += os.pathsep + path

または、リストに追加するパスが複数ある場合:

os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)

あなたが述べたように、os.path.joinあなたが別々の部分からそれらを構築しなければならない場合にあなたが追加しなければならない個々のパスごとに使用することもできます。


PATH環境セパレーターとは何ですか??linux- / usr / bin:/ lib: ":" windows-C:\ asdf \; C:\ Prog ...; ";"
bua 2009年

2
@bua:os.pathsep私が言及した(PATHに固有の)という意味ですか?
RedGlyph 2009年

@RedGlyphはい、申し訳ありませんが、os.pathsepは「/」と「\」だと思いました。私は主張する前にそれをチェックしませんでした;)。
bua 2009年

11
@bua:それはほとんど「落とし穴」ですos.path.sep != os.pathsep
krawyoti 2009年

@ krawyoti、bua:ああ、わかりました...よくわかりました!それは確かに簡単な間違いです:
RedGlyph 2009年

17

これos.environは実際には辞書ではないことに注意してください。これは、setenvを使用して現在のプロセスで環境変数を実際に設定する、辞書のような特別オブジェクトです。

>>> os.environ.__class__
<class os._Environ at 0x100472050>
>>> import os
>>> os.environ["HELLO"] = "WORLD"
>>> os.getenv("HELLO")
'WORLD'

これは、PATH(および他の環境変数)同じプロセスで実行されるCコードに表示れることを意味します。

(コメントにはフォーマットを含めることができないため、これを回答に入れる必要がありますが、重要なポイントだと思います。これは、「エクスポート」に相当するものがないというコメントに対するコメントです。)


6

Pythonで環境変数を変更する際に注意すべき点は、「export」シェルコマンドに相当するものがないことです。現在のプロセスに変更を挿入する方法はなく、子プロセスのみです。


+1:賢明なことにos.system、他のプロセスを起動するには、Pythonアプリケーションから、os.popenまたはのようなコマンドをsubprocess.Popen使用する必要があります。そうでなければ、それはほとんど無意味です。
RedGlyph 2009年

14
本当じゃない。
グリフ

4
Glyphのステートメントの明確化:変更現在のプロセス(Pythonプロセス)に注入されるため、これは当てはまりません。OPは、親プロセス(通常はPythonスクリプトが実行されたシェル)に変更を挿入する方法がないことを意味している可能性があります。
PonyEars 2013

4
それがOPの意味である場合、シェルにもこの機能はありません。export変数がすべてのプロセスの環境にコピーされますが、親プロセスには影響しません。
カイルストランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.