I'm creating an app that downloads and installs its own egg plugins, but I have a problem loading the egg after easy_install extracts it into place. This is how it works now:
- App downloads egg into temp folder
- Installs egg with setuptools.command.easy_install.main() into ~/.app/plugins folder (which is pointed by a pth on dist-packages)
- At this point, the ~/.apps/plugins/easy-install.pth is updated with the new egg path
The problem is that the pth is not reloaded until the python process is relaunched, which means the app has to be stopped and restarted (app is a long-running process, and plugin installation must not require a restart).
So the question is how to, either reload the pth programatically so that plugin entry-point discovery works for the new egg, or somehow have easy_install return the path it installed the egg into, so I can manually (with pkg_resources) load the new plugin?
I could create a function that tries to guess the easy_install'ed path or parse the pth on my own, but I prefer not to, if at all possible.
Python 2.6, setup开发者_开发问答tools 0.6c9
Thanks to Marius Gedminas, what I'm doing now basically is:
dist = pkg_resources.get_distribution(plugin_name)
entry = dist.get_entry_info(entry_point_name, plugin_name)
plugin = entry.load()
After some browsing of the documentation I think what you need to do is
pkg_resources.get_distribution(name).activate()
where name is the name of the package you just installed.
精彩评论