如何快速安装蛋插件并在不重启应用的情况下加载它?

6 投票
1 回答
1223 浏览
提问于 2025-04-16 01:11

我正在创建一个应用程序,它可以下载并安装自己的插件,但我在加载插件时遇到问题,特别是在使用 easy_install 把插件解压到指定位置后。现在的工作流程是这样的:

  • 应用程序将插件下载到临时文件夹
  • 使用 setuptools.command.easy_install.main() 将插件安装到 ~/.app/plugins 文件夹(这个文件夹是通过 pth 文件在 dist-packages 中指向的)
  • 此时,~/.apps/plugins/easy-install.pth 文件会更新为新的插件路径

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

所以我的问题是,如何才能以编程的方式重新加载 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 个回答

5

经过一些对文档的浏览,我觉得你需要做的是

pkg_resources.get_distribution(name).activate()

这里的name是你刚刚安装的那个软件包的名字。

撰写回答