2013-02-27 11 views
33

私のコードです。もしそうならセットPYTHONPATH

import sys 
sys.path.append('/mypath/scriptlib') 
import scriptlib.abc 
import scriptlib.xyz 

def foo(): 
    ... some operations 

、それだけでそのコマンドプロンプトの値であるかである:

は、私が最初のように実行取得import文の前に環境変数に「PYTHONPATHを」scriptlibディレクトリを追加することが可能な、とにかくありグローバル ?事前

+1

てみました参照してください?そのコードはうまくいくはずです。 'sysの新しい値。( '$ PYTHONPATH'変数は' sys.path'を満たすためにインタプリタを起動するときにのみ読み込まれ、環境に書き戻されません)。 – filmor

+0

はい、それは働いています – DKG

答えて

34

おかげでこれはあなたのPythonのプロセス/インスタンス(すなわち、実行中の実行可能ファイル)へのパスを追加します。パスは他のPythonプロセスでは変更されません。実行中のもう1つのPythonプログラムではパスが変更されません。プログラムを終了してもう一度実行すると、前に追加したパスはパスには含まれません。あなたは何をしていますかは、一般的に正しいです。

set.py:

import sys 
sys.path.append("/tmp/TEST") 

loop.py

import sys 
import time 
while True: 
    print sys.path 
    time.sleep(1) 

実行:python loop.py &

これはあなたのSTDOUTに接続loop.pyを、実行され、それが実行し続けますバックグラウンドでpython set.pyを実行できます。それぞれに異なる環境変数のセットがあります。 loop.pyからの出力は、set.pyloop.pyの環境を変更しないため、変更されないことに注意してください。

Pythonの輸入をインポートするに

ノート言語の残りの部分のように、動的です。静的なリンクは行われません。インポートは実行可能な行で、sys.path.append...と同じです。

+0

しかし、私は自分のコード内のパスをしたくありません。私は自分のコードをきれいで持ち運びしやすいものにしたい。 "pythonプロジェクト"という概念はありません。 (ビジュアルスタジオコードまたはAtom.ioのために言う?) – pashute

+0

はい、Pythonの "プロジェクト"に相当するのはVirtualEnvです。 VirtualEnvWrapperは使いやすいインターフェイスです。これとVisual Studioの違いは、すでにグローバルなPython環境が存在し、virtualenvが仮想レイヤーを上に置いていることです。他のツールがあるかもしれませんが、私はPythonから数年間離れています。 – Joe

5

また、文書hereにも記載されています。 Python X.X/Libから
移動し、

、そこsite.py

import sys 
sys.path.append("yourpathstring") 
をこれらの行を追加します。これは、あなたの sys.pathを変更するので、それはすべての負荷に、それはそれでその値を持つことになります。..述べ hereについて site.pyとして

このモジュールは、初期化中に自動的にインポートされます。このモジュールをインポートすると、サイト固有のパスがモジュール検索パスに追加され、いくつかの組み込み関数が追加されます。 sys.pathにいくつかのパスを追加する他の可能な方法については

あなたはそれをthese docs

+0

しかし、これは環境変数の値を手動で設定するのと同じです。私が必要とするのは、ファイルからscriptlibパスを取得し、使用する前に設定するのと同じように、ライブラリのパスを頻繁に変更することです。 – DKG

+0

いいえ、この値は初期化時に 'site.py'が自動的に読み込まれるため、' python.exe'の実行ごとに追加されます。したがって、 'import sys sys.path.append ....'は必要ありません。各ファイルに – pradyunsg

+1

私は同じpythonスクリプトの2つのコピーを持っている状況を検討してください。 1つのスクリプトがC:\ testers \ scriptlibからライブラリを取得したいとし、D:\ developer \ scriptlibから他のスクリプトを取得したいとします。その場合、どのパスを誰に割り当てるかをsite.pyがどのように決めることができますか? – DKG