At 01:07 PM 7/13/2005 +0100, Paul Moore wrote: >I have only one egg installed in my site-packages, namely setuptools. >However, with the following script: > >import sys >import pkg_resources > >def list_packages(): > dists = [] > for p in sys.path: > for dist in pkg_resources.find_distributions(p): > dists.append((p, dist)) > > for p, dist in dists: > print p, dist.name, dist.version > >if __name__ == '__main__': > list_packages() > >I get the output: > >C:\Apps\Python24\lib\site-packages setuptools 0.5a12 >C:\Apps\Python24\Lib\site-packages\setuptools-0.5a12-py2.4.egg setuptools >0.5a12 > >How come I see setuptools twice?
You need to look at the .path attributes. What's happening is that setuptools is on sys.path directly, but it's also in a *directory* on sys.path. So, you're calling find_distributions() on site-packages, but you're also calling it directly on the egg, so you get it twice. In the future, I may separate these kinds of returns, such that there's a way to ask find_distributions() to give you only exact matches, because this will be needed for implementing the WorkingSet concept in the pkg_resources refactoring. >A complementary question - how can I detect when two Distribution >instances refer to the "same" egg. Is comparing the path attribute >sufficient? You need os.path.normcase on Windows, and os.path.normpath/os.path.realpath/etc. to be really sure. Sane path comparison is unfortunately somewhat of a black art in Python. _______________________________________________ Distutils-SIG maillist - [email protected] http://mail.python.org/mailman/listinfo/distutils-sig
