Answer a question

In one of my testing scripts in Python I use this pattern several times:

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

Is there a more concise way to temporarily modify the search path?

Answers

You could use a simple context manager:

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

Then to import a module you can do:

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

On exit from the body of the with statement sys.path will be restored to the original state. If you only use the module within that block you might also want to delete its reference from sys.modules:

del sys.modules['mymodule']
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐