[Distutils] patches: ez_setup.py: don't import setuptools into your current address space in order to learn its version number

Phillip J. Eby pje at telecommunity.com
Sat Oct 6 00:13:46 CEST 2007

At 03:00 PM 10/4/2007 -0600, zooko wrote:
>On Oct 3, 2007, at 5:20 PM, Phillip J. Eby wrote:
> >     del sys.modules['pkg_resources']
> >
> > after upgrading setuptools, as long as it wasn't there to start with.
>There's something about this that I don't understand.  How is
>deleting the name from sys.modules different from reloading it, which
>as you already explained [1] is not going to work?

This won't work for that either, so that's not why I'm suggesting 
deleting it.  The reason I'm suggesting it for this scenario is to 
ensure that pkg_resources initializes with clean module contents, 
which won't happen in a reload().

>I can think of two approaches that will work for python >= 2.3:
>1.  Import setuptools to get a copy of its __version__ attribute,

It's not necessary to import setuptools.  Using 
pkg_resources.require() is sufficient to do the job, and will get the 
actual version (including dev-r### tags).  The only reason ez_setup 
uses __version__ is to find a *legacy* setuptools (i.e. version 
0.0.1) -- and that is the only thing __version__ should be used for.

>import pkg_resources to use its parse_version() function, then del
>them from sys.modules.  (As above, I don't understand how deleting
>them from sys.modules and then importing them is different from
>reloading them.)

With regard to whether it's safe to do it, there is no 
difference.  If they were in sys.modules to start with, it's not safe 
to reload() or delete them.  If they *weren't* there, then it's okay 
to reload() or delete them.

>2.  Use os.system() instead of subprocess() to get the version of the
>installed setuptools, include a copy of the parse_version() function
>from pkg_resources.

It's not necessary to do that, because it doesn't help to have 
another process.  If setuptools or pkg_resources are already in 
sys.modules when a setup.py runs, it's already too late to upgrade safely.

More information about the Distutils-SIG mailing list