Python 如何在不重启应用程序的情况下轻松安装并加载egg插件?

Python 如何在不重启应用程序的情况下轻松安装并加载egg插件?,python,setuptools,egg,Python,Setuptools,Egg,我正在创建一个下载并安装自己的egg插件的应用程序,但在easy_install将egg提取到位后,我在加载egg时遇到了一个问题。这就是它现在的工作原理: 应用程序下载鸡蛋到临时文件夹 使用setuptools.command.easy_install.main()将egg安装到~/.app/plugins文件夹中(该文件夹由dist软件包上的pth指向) 此时,~/.apps/plugins/easy-install.pth将更新为新的egg路径 问题在于,在重新启动python进程之前

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

  • 应用程序下载鸡蛋到临时文件夹
  • 使用setuptools.command.easy_install.main()将egg安装到~/.app/plugins文件夹中(该文件夹由dist软件包上的pth指向)
  • 此时,~/.apps/plugins/easy-install.pth将更新为新的egg路径
问题在于,在重新启动python进程之前,不会重新加载pth,这意味着必须停止并重新启动应用程序(应用程序是一个长期运行的进程,插件安装不需要重新启动)

所以问题是,如何以编程方式重新加载pth,以便插件入口点发现为新的egg工作,或者以某种方式让easy_install返回它安装egg的路径,以便我可以手动(使用pkg_资源)加载新插件

我可以创建一个函数来尝试猜测简单的安装路径或自己解析pth,但如果可能的话,我不愿意这样做

Python 2.6,setuptools 0.6c9


多亏了,我现在做的基本上是:

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

浏览了一番之后,我想你们需要做的是

pkg_resources.get_distribution(name).activate()

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

我不太了解setuptools,但您是否尝试过
重新加载
功能?或者?是的,我做了,但是重新加载是不够的。我尝试重新加载站点模块(我认为它负责读取pth),但没有任何效果。即使site.addsitedir(os.path.expanduser('~/.app/plugins')似乎将新的egg添加到sys.path列表中,也不足以使其可导入(导入插件名称)或可用于pkg_resources.zc.buildout执行类似的操作,尽管我不想尝试阅读其源代码。你试过在distutils sig邮件列表上提问吗?哇,没注意到它会到处搜索以找到发行版,太好了:)