[Distutils] patches: ez_setup.py: don't import setuptools into your current address space in order to learn its version number
zooko
zooko at zooko.com
Tue Sep 18 23:29:25 CEST 2007
Folks:
We're gradually converting the allmydata.org tahoe project [1] and
its spin-off packages to use setuptools. One problem that comes up
is that ez_setup.py might require a newer version of setuptools than
the version of setuptools already installed.
For example, although Tahoe currently uses setuptools to manage its
dependencies on zfec, foolscap, and nevow [2], but if we execute
simplejson's ez_setup.py then it requires setuptools v0.6c7 and
refuses to proceed if an earlier version is installed.
One solution for this problem could be for the packager of simplejson
(Bob Ippolito) to use the "min_version" patch that we contributed to
ez_setup.py [3]. This is assuming that simplejson doesn't actually
*require* the latest version of setuptools, and we could successfully
install with a slightly older version, but what if a package actually
does require a newer version of setuptools than the one that is
already installed?
The following patch was created by Tahoe contributor Arno Washck and
then modified by me in order to get around such a problem. The idea
is simple enough -- reload setuptools. There may be some subtleties
that we still need to work out. This patch hasn't been tested in its
current form.
--- ez_setup.py~ 2007-09-10 12:36:30.000000000 -0600
+++ ez_setup.py 2007-09-18 15:15:23.000000000 -0600
@@ -95,13 +95,9 @@
pkg_resources.require("setuptools>="+version)
except pkg_resources.VersionConflict, e:
- # XXX could we install in a subprocess here?
- print >>sys.stderr, (
- "The required version of setuptools (>=%s) is not
available, and\n"
- "can't be installed while this script is running. Please
install\n"
- " a more recent version first.\n\n(Currently using %r)"
- ) % (version, e.args[0])
- sys.exit(2)
+ egg = download_setuptools(version, download_base, to_dir,
download_delay)
+ sys.path.insert(0, egg)
+ reload(setuptools); setuptools.bootstrap_install_from = egg
def download_setuptools(
version=DEFAULT_VERSION, download_base=DEFAULT_URL,
to_dir=os.curdir,
-------
An alternative idea figure out the version of the current install of
setuptools without importing the package. The following patch might
accomplish that. It is also not tested.
--- ez_setup.py~ 2007-09-10 12:36:30.000000000 -0600
+++ ez_setup.py 2007-09-18 15:26:50.000000000 -0600
@@ -77,31 +77,13 @@
this routine will print a message to ``sys.stderr`` and raise
SystemExit in
an attempt to abort the calling script.
"""
- try:
- import setuptools
- if setuptools.__version__ == '0.0.1':
- print >>sys.stderr, (
- "You have an obsolete version of setuptools installed.
Please\n"
- "remove it from your system entirely before rerunning
this script."
- )
- sys.exit(2)
- except ImportError:
- egg = download_setuptools(version, download_base, to_dir,
download_delay)
- sys.path.insert(0, egg)
- import setuptools; setuptools.bootstrap_install_from = egg
-
+ verstr = os.system("python -c \"import setuptools;print
setuptools.__version__\"")
import pkg_resources
- try:
- pkg_resources.require("setuptools>="+version)
- except pkg_resources.VersionConflict, e:
- # XXX could we install in a subprocess here?
- print >>sys.stderr, (
- "The required version of setuptools (>=%s) is not
available, and\n"
- "can't be installed while this script is running. Please
install\n"
- " a more recent version first.\n\n(Currently using %r)"
- ) % (version, e.args[0])
- sys.exit(2)
+ if pkg_resources.parse_version(verstr) <
pkg_resources.parse_version(version):
+ egg = download_setuptools(version, download_base, to_dir)
+ sys.path.insert(0, egg)
+ import setuptools; setuptools.bootstrap_install_from = egg
def download_setuptools(
version=DEFAULT_VERSION, download_base=DEFAULT_URL,
to_dir=os.curdir,
-------
Regards,
Zooko
[1] http://allmydata.org
[2] http://allmydata.org/trac/tahoe/browser/calcdeps.py
[3] http://mail.python.org/pipermail/distutils-sig/2007-September/
008257.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ez_setup-hack.patch
Type: application/octet-stream
Size: 886 bytes
Desc: not available
Url : http://mail.python.org/pipermail/distutils-sig/attachments/20070918/d6f64925/attachment.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ez_setup-hack2.patch
Type: application/octet-stream
Size: 1743 bytes
Desc: not available
Url : http://mail.python.org/pipermail/distutils-sig/attachments/20070918/d6f64925/attachment-0001.obj
More information about the Distutils-SIG
mailing list