Как временно изменить sys.path в Python?
В одном из моих тестовых скриптов в Python я использую этот шаблон несколько раз:
sys.path.insert(0, "somedir")
mod = __import__(mymod)
sys.path.pop(0)
Есть ли более краткий способ временного изменения пути поиска?
Ответы
Ответ 1
Вы можете использовать простой контекстный менеджер:
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):
sys.path.remove(self.path)
Затем для импорта модуля вы можете:
with add_path("/path/to/dir"):
mod = __import__("mymodule")
При выходе из тела оператора with
sys.path
будет восстановлено исходное состояние. Если вы используете только модуль внутри этого блока, вы также можете удалить его ссылку из sys.modules
:
del sys.modules["mymodule"]
Ответ 2
Добавление значения в sys.path
только временно изменяет его, т.е. только для этого сеанса.
Постоянные изменения производятся путем изменения PYTHONPATH
и каталога установки по умолчанию.
Итак, если по-временному вы предназначались только для текущего сеанса, тогда ваш подход в порядке, но вы можете удалить часть pop
, если somedir
не скрывает какие-либо важные модули, которые, как ожидается, будут найдены в PYTHONPATH
, текущий каталог или каталог установки по умолчанию.
http://docs.python.org/2/tutorial/modules.html#the-module-search-path