print '\n'.join([re.findall("from '(.*)'",str(v))[0] for k,v in
sys.modules.items() if str(v).find('from')>-1])
> Date: Sat, 8 Jun 2013 21:30:48 -0700
> Subject: Listing modules from all installed packages
> From: [email protected]
> To: [email protected]
>
> 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
> --
> http://mail.python.org/mailman/listinfo/python-list
--
http://mail.python.org/mailman/listinfo/python-list