73

私のコードは次のとおりです。

import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations

ただし、scriptlibは他のディレクトリにあるため、そのディレクトリを環境変数「PYTHONPATH」に含める必要があります。

とにかく、インポートステートメントが次のように実行される前に、環境変数「PYTHONPATH」にscriptlibディレクトリを最初に追加できる方法はありますか?

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

def foo():
  ... some operations

もしそうなら、そのコマンドプロンプトの値だけですか、それともグローバルですか?

前もって感謝します

4

2 に答える 2

78

これにより、Pythonプロセス/インスタンス(つまり、実行中の実行可能ファイル)へのパスが追加されます。パスは、他のPythonプロセスでは変更されません。実行中の別の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...です。

于 2013-02-27T10:24:43.793 に答える
7

こちらのドキュメントにも記載されています。

Python X.Y/Lib(Windows)または(Linux)に移動し、そこに/usr/lib/pythonX.Yこれらの行を追加します。site.py

import sys
sys.path.append("yourpathstring")

これにより、sys.pathすべてのロードでその値が含まれるように変更されます。

ここで述べたようにsite.py

このモジュールは、初期化中に自動的にインポートされます。このモジュールをインポートすると、サイト固有のパスがモジュール検索パスに追加され、いくつかのビルトインが追加されます。

これらのドキュメントsys.pathを表示するためのパスを追加する他の可能な方法については

于 2013-02-27T10:36:07.707 に答える