33

Python のテスト スクリプトの 1 つで、このパターンを数回使用します。

sys.path.insert(0, "somedir")
mod =  __import__(mymod)
sys.path.pop(0)

検索パスを一時的に変更するより簡潔な方法はありますか?

4

4 に答える 4

33

シンプルなコンテキスト マネージャーを使用できます。

import sys

class add_path():
    def __init__(self, path):
        self.path = path

    def __enter__(self):
        sys.path.insert(0, self.path)

    def __exit__(self, exc_type, exc_value, traceback):
        try:
            sys.path.remove(self.path)
        except ValueError:
            pass

次に、モジュールをインポートするには、次のようにします。

with add_path('/path/to/dir'):
    mod = __import__('mymodule')

withステートメントの本体を終了するsys.pathと、元の状態に復元されます。そのブロック内でのみモジュールを使用する場合は、その参照を から削除することもできますsys.modules

del sys.modules['mymodule']
于 2016-10-04T15:04:14.980 に答える
20

に値を追加sys.pathすると、一時的にのみ、つまりそのセッションのみが変更されます。

PYTHONPATHデフォルトのインストール ディレクトリを変更すると、恒久的な変更が行われます。

したがって、一時的に現在のセッションのみを意味する場合、アプローチは問題ありませんが、現在のディレクトリまたはデフォルトのインストールディレクトリにあると予想される重要なモジュールを隠していないpop場合は、その部分を削除できます。somedirPYTHONPATH

http://docs.python.org/2/tutorial/modules.html#the-module-search-path

于 2013-06-20T10:19:08.713 に答える