如何easy_install egg插件并加载它而无需重新启动应用程序?

时间:2010-07-12 18:15:31

标签: python setuptools egg

我正在创建一个下载并安装自己的egg插件的应用程序,但是在easy_install将其提取到位后我加载鸡蛋时遇到问题。这是它现在的工作方式:

  • App将egg下载到临时文件夹
  • 使用setuptools.command.easy_install.main()将egg安装到〜/ .app / plugins文件夹(由dist-packages上的pth指向)
  • 此时,使用新的egg路径更新〜/ .apps / plugins / easy-install.pth

问题是在重新启动python进程之前不会重新加载pth,这意味着必须停止并重新启动应用程序(app是一个长时间运行的进程,并且插件安装不需要重新启动)。

所以问题是如何以编程方式重新加载pth以便插件入口点发现适用于新蛋,或者以某种方式让easy_install返回它安装鸡蛋的路径,因此我可以手动(使用pkg_resources)加载新的插件?

我可以创建一个函数来尝试猜测easy_install的路径或者自己解析pth,但我不愿意,如果可能的话。

Python 2.6,setuptools 0.6c9


感谢Marius Gedminas,我现在所做的基本上是:

dist = pkg_resources.get_distribution(plugin_name)
entry = dist.get_entry_info(entry_point_name, plugin_name)
plugin = entry.load()

1 个答案:

答案 0 :(得分:4)

在浏览了documentation认为之后你需要做的是

pkg_resources.get_distribution(name).activate()

其中name是您刚刚安装的软件包的名称。