Carlos Nepomuceno於 2013年6月9日星期日UTC+8下午1時23分15秒寫道: > 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: jph...@gmail.com > > To: pytho...@python.org > > > > 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
Please use a dictionary to store a tree first. Then it is trivial to walk through all nodes of the tree. -- http://mail.python.org/mailman/listinfo/python-list