【发布时间】:2011-03-14 22:42:44
【问题描述】:
我正在创建一个下载并安装其自己的 egg 插件的应用程序,但在 easy_install 将其提取到位后加载 egg 时出现问题。这就是它现在的工作方式:
- App 将 egg 下载到临时文件夹中
- 使用 setuptools.command.easy_install.main() 将 egg 安装到 ~/.app/plugins 文件夹(由 dist-packages 上的 pth 指向)
- 此时,~/.apps/plugins/easy-install.pth 更新为新的 egg 路径
问题是在python进程重新启动之前pth不会重新加载,这意味着必须停止并重新启动应用程序(应用程序是一个长时间运行的进程,并且插件安装必须不需要重新启动)。
所以问题是如何以编程方式重新加载 pth,以便插件入口点发现适用于新 egg,或者以某种方式让 easy_install 返回它安装 egg 的路径,所以我可以手动(使用 pkg_resources)加载新插件?
我可以创建一个函数来尝试猜测 easy_install 的路径或自行解析 pth,但如果可能的话,我宁愿不这样做。
Python 2.6,安装工具 0.6c9
感谢Marius Gedminas,我现在做的基本上是:
dist = pkg_resources.get_distribution(plugin_name)
entry = dist.get_entry_info(entry_point_name, plugin_name)
plugin = entry.load()
【问题讨论】:
-
我对setuptools了解不多,但是你试过
reload功能吗? docs 或 stackoverflow.com/questions/437589/… ? -
是的,我做到了,但重新加载还不够。我尝试重新加载站点模块(我认为它负责读取 pth),但它什么也没做。即使 site.addsitedir(os.path.expanduser('~/.app/plugins')) 似乎将新的鸡蛋添加到 sys.path 列表中,也不足以使其可导入(导入插件名称)或可用于 pkg_resources .
-
zc.buildout 做了类似的事情,虽然我不想尝试阅读它的源代码。你试过在 distutils-sig 邮件列表上提问吗?
标签: python setuptools egg