views:

49

answers:

1

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, setuptools 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()
+1  A: 

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.

Marius Gedminas
Wow, didn't notice that it would search everywhere to find a distribution, great :)
lkraider