[Distutils] pkg_resources: failed require

Phillip J. Eby pje at telecommunity.com
Mon May 30 22:31:11 CEST 2005


At 02:58 PM 5/30/2005 -0500, Ian Bicking wrote:
>Ian Bicking wrote:
>>Hmm... I think I got it wrong, this works fine.
>>Maybe I was confusing this with a bug related to packages with spaces in 
>>their names.  In particular, WSGIUtils: 
>>http://www.owlfish.com/software/wsgiutils/downloads/WSGI%20Utils-0.5.tar.gz
>>I suspect this doesn't work because it creates an egg 
>>WSGI_Utils-0.5-py2.4.egg/, with a package name (in 
>>WSGI_Utils-0.5-py2.4.egg/EGG-INFO/PKG-INFO) of "WSGI Utils"
>
>Hmm... maybe I'm just confused about how this stuff works.  You don't 
>require a Python package name, you require the more abstract name.

Right; you require() the distribution name.  I should probably find some 
examples that clearly use the distribution name.  Maybe wxPython would be 
good, since the distribution is wxPython, but the package is wx.  So you 
"require('wxPython>=2.5')", for example.  I'll try to update the docs to 
make this clearer.  And maybe if you install in --multi-version mode or to 
an alternate directory, easy_install should spit out a couple of example 
require() spellings for you to use, maybe even copy and paste right into 
your code.  Perhaps something like:

"""
Installed WSGI_Utils-0.5-py2.4.egg

Because this distribution was installed --multi-version or --install-dir,
before you can import modules from this package in an application, you
will need to 'import pkg_resources' and then use a 'require()' call
similar to one of these examples, in order to select the desired version:

     pkg_resources.require("WSGI-Utils==0.5")  # this exact version
     pkg_resources.require("WSGI-Utils>=0.5")  # this version or higher
     pkg_resources.require("WSGI-Utils")       # latest installed version

Note also that '/your/instdir/setting' must be on sys.path at runtime for 
this to work.  (e.g. by being the application script directory, by being on 
PYTHONPATH, or by being added to sys.path by your code.)
"""

I'll look into about adding a post-install report with this information for 
multi-version and alternate-directory installs.  (That last paragraph above 
about '/your/instdir/setting' would only appear for --install-dir installs, 
and would include the actual directory name.)


>   But case insensitive.  So require("wsgi-utils") or 
> require("WSGI_Utils") works, but require('wsgiutils') doesn't.  Since 
> require('sqlobject') worked (even though the package name is SQLObject) I 
> had become confused by this.

Yeah, I really didn't want to make it possible to have 'SQLobject' and 
'sqlobject' both exist as distributions (even though I believe PyPI 
currently allows that).  It would be just too darn confusing to make a typo 
and end up with the entirely wrong product, once we have automatic package 
location via PyPI et al.



More information about the Distutils-SIG mailing list