Listing modules from all installed packages
Julien Phalip
jphalip at gmail.com
Sun Jun 9 00:30:48 EDT 2013
Hi,
I'm trying to write a function that programmatically obtains and returns the exact location of all first-level modules for all installed packages.
For example, if the packages named 'django' and 'django-debug-toolbar' are installed, I'd like this function to return something like:
>>> installed_modules()
/Users/my_user/.virtualenvs/my_venv/lib/python2.6/site-packages/django
/Users/my_user/.virtualenvs/my_venv/src/debug_toolbar
That is, this function needs to consider all installed packages, including those that have been installed in "edit" mode (i.e. in the src/ folder). Note also that the main module for the 'django-debug-toolbar' is in fact named 'debug_toolbar'.
So far the closest I've been to retrieving the list of first-level modules is as follows:
import os
import pkg_resources
import setuptools
pkgs = set()
for dist in pkg_resources.working_set:
if os.path.isdir(dist.location):
for pkg in setuptools.find_packages(dist.location):
if '.' not in pkg:
pkgs.add(pkg)
The idea is then to loop through that list of modules, import them and get their exact locations by fetching their __file__ attribute values.
However, this feels very hackish and I don't think it's actually quite correct either. I'm sure there must be a better way. If possible I'd also like to avoid having to use setuptools.
Do you have any tips on how to achieve this?
Many thanks!
Julien
More information about the Python-list
mailing list