setuptools/pkg_resources отключить распространение

Я играл с модулем setuptools pkg_resources для загрузки функций плагина через точки входа. Кажется, что после того, как точка входа была загружена, конкретное распределение, используемое для получения этой точки входа, теперь "активно" (и поэтому сохраняется в pkg_resources.working_set, sys.path и несколько других мест).

Мой вопрос: есть ли стандартный способ "деактивировать" дистрибутив? Я не знаю много внутренних деталей загрузки модуля, которая происходит за кулисами, но я взломал следующую функцию, которая работает:

def deactivate(dist):
    from pkg_resources import working_set
    from sys import path, modules, path_importer_cache
    distpath = working_set.by_key.pop(dist).location
    working_set.entry_keys.pop(distpath)
    working_set.entries.remove(distpath)
    path.remove(distpath)
    for name, mod in modules.items():
        try:
            if mod.__file__.startswith(distpath):
                modules.pop(name)
        except:
            pass

Если нет стандартного способа, который я пропустил, сработает ли вышеуказанная функция, как показывает мое ограниченное тестирование? или он пропускает некоторые внутренние операции системного пути или pkg_resources, которые приведут к странным ошибкам в будущем?

Предыстория Я пытаюсь использовать точки входа и яйца, чтобы позволить динамическую загрузку различных версий модуля по усмотрению пользователя. Деактивация становится проблемой только в том случае, если вы хотите разрешить пользователю переключать версии без перезапуска основного сценария, поскольку после загрузки первой версии вы можете использовать только эту версию.

0 ответов

Другие вопросы по тегам