如何在Python中临时修改sys.path?

How to temporarily modify sys.path in Python?

在我的Python测试脚本中,我多次使用此模式:

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

有没有更简洁的方法来临时修改搜索路径?


您可以使用一个简单的上下文管理器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

然后要导入模块,您可以执行以下操作:

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

with语句的主体退出时,sys.path将恢复到原始状态。 如果仅使用该块中的模块,则可能还希望从sys.modules中删除其引用:

1
del sys.modules['mymodule']


将值附加到sys.path仅会临时修改它,即仅用于该会话。

永久修改通过更改PYTHONPATH和默认安装目录来完成。

因此,如果只是暂时性地只打算用于当前会话,那么您的方法就可以了,但是如果somedir没有隐藏预期在PYTHONPATH当前目录中找到的任何重要模块,则可以删除pop部分 或默认安装目录。

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