Opened at 2011-04-01T05:47:50Z
Closed at 2012-01-17T15:42:55Z
#1387 closed defect (wontfix)
version parser refuses to recognize foolscap's "in between releases" versions
Reported by: | zooko | Owned by: | somebody |
---|---|---|---|
Priority: | major | Milestone: | undecided |
Component: | packaging | Version: | 1.8.2 |
Keywords: | packaging setuptools foolscap | Cc: | |
Launchpad Bug: |
Description
If you install foolscap from its source, it will have a version number like 0.6.1+. If you then run Tahoe-LAFS, it will exit at startup with:
Traceback (most recent call last): File "/Users/zooko/playground/tahoe-lafs/pristine/support/bin/tahoe", line 9, in <module> load_entry_point('allmydata-tahoe==1.8.2-r5006', 'console_scripts', 'tahoe')() File "/Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/setuptools-0.6c16dev3.egg/pkg_resources.py", line 318, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/setuptools-0.6c16dev3.egg/pkg_resources.py", line 2245, in load_entry_point return ep.load() File "/Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/setuptools-0.6c16dev3.egg/pkg_resources.py", line 1978, in load entry = __import__(self.module_name, globals(),globals(), ['__name__']) File "/Users/zooko/playground/tahoe-lafs/pristine/src/allmydata/__init__.py", line 375, in <module> check_all_requirements() File "/Users/zooko/playground/tahoe-lafs/pristine/src/allmydata/__init__.py", line 373, in check_all_requirements raise PackagingError(get_error_string(errors, debug=True)) allmydata.PackagingError: TypeError: expected string or buffer For debugging purposes, the PYTHONPATH was '/Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages:/usr/local/lib/python2.6/site-packages:/Users/zooko/lib/python2.6/site-packages' install_requires was ['setuptools >= 0.6c6', 'zfec >= 1.1.0', 'simplejson >= 1.4', 'zope.interface', 'Twisted >= 2.4.0', 'foolscap[secure_connections] >= 0.6.1', 'Nevow >= 0.6.0', 'pycrypto == 2.0.1, == 2.1.0, >= 2.3', 'pyasn1 >= 0.0.8a', 'mock', 'pycryptopp >= 0.5.20'] sys.path after importing pkg_resources was /Users/zooko/playground/tahoe-lafs/pristine/support/bin: /Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/setuptools_darcs-1.2.12.egg: /Users/zooko/playground/tahoe-lafs/pristine/src: /Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/mock-0.6.0-py2.6.egg: /Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/pyasn1-0.0.13b-py2.6.egg: /Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/pycrypto-2.3-py2.6-macosx-10.6-universal.egg: /Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/Nevow-0.10.0-py2.6.egg: /Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/simplejson-2.1.3-py2.6-macosx-10.6-universal.egg: /Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/zfec-1.4.10-py2.6-macosx-10.6-universal.egg: /Library/Python/2.6/site-packages/foolscap-0.6.1_-py2.6.egg: /Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages/setuptools-0.6c16dev3.egg: /Library/Python/2.6/site-packages/argparse-1.1-py2.6.egg: /Library/Python/2.6/site-packages/pexpect-2.4-py2.6.egg: /Library/Python/2.6/site-packages/zbase32-1.1.3-py2.6.egg: /Library/Python/2.6/site-packages/docutils-0.7-py2.6.egg: /Library/Python/2.6/site-packages/setuptools_darcs-1.2.11-py2.6.egg: /Library/Python/2.6/site-packages/pycryptopp-0.5.29-py2.6-macosx-10.6-universal.egg: /Library/Python/2.6/site-packages/Twisted-10.2.0-py2.6-macosx-10.6-universal.egg: /Library/Python/2.6/site-packages/pyutil-1.8.4-py2.6.egg: /Library/Python/2.6/site-packages/coverage-3.4-py2.6-macosx-10.6-universal.egg: /Library/Python/2.6/site-packages/setuptools-0.6c11-py2.6.egg: /Library/Python/2.6/site-packages/txAWS-0.0.1-py2.6.egg: /Library/Python/2.6/site-packages/Epsilon-0.6.0-py2.6.egg: /Users/zooko/playground/tahoe-lafs/pristine/support/lib/python2.6/site-packages: /usr/local/lib/python2.6/site-packages: /Users/zooko/lib/python2.6/site-packages: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages: /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old: /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload: /Library/Python/2.6/site-packages: /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC: /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/wx-2.8-mac-unicode: /Users/zooko/lib/python2.6/site-packages
Part of the problem is that verlib (the nascent Python standard for version numbers) doesn't like 0.6.1+:
python -i verlib.py >>> NormalizedVersion('0.6.1+') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/zooko/playground/tahoe-lafs/fileutil/tp/tarek-distutilsversion-22a8cdc67ac8/verlib.py", line 86, in __init__ self._parse(s, error_on_huge_major_num) File "/Users/zooko/playground/tahoe-lafs/fileutil/tp/tarek-distutilsversion-22a8cdc67ac8/verlib.py", line 97, in _parse raise IrrationalVersionError(s) __main__.IrrationalVersionError: 0.6.1+
Ways to improve this:
- We could extend the copy of verlib that we bundle in Tahoe-LAFS to accept 0.6.1+ and let it sort higher than 0.6.1 and lower than 0.6.2. How should 0.6.1+ compare to 0.6.1.1?
- Brian (the maintainer of foolscap) could change it to use the Python-nascent-standard notation. I think the closest analogue to 0.6.1+ would be 0.6.1.post0:
>>> NormalizedVersion('0.6.1.post0') NormalizedVersion('0.6.1.post0.f')
Then we could just not worry about the fact that foolscap 0.6.1+ is incompatible with Tahoe-LAFS, and instead quickly make foolscap trunk describe itself as 0.6.1.post0. (I'll open a separate ticket saying that Tahoe-LAFS should more nicely deal with unparseable version numbers among its dependencies.)
- We could switch back from using verlib as version number parser to using pkg_resources, which handles foolscap's version numbers in a way that has always worked for Tahoe-LAFS's purposes. I don't know if doing that would run afoul of #1258 or if we could separate the version-number-parsing from the sys.path-manipulation.
Change History (2)
comment:1 Changed at 2011-04-01T05:51:05Z by zooko
comment:2 Changed at 2012-01-17T15:42:55Z by zooko
- Resolution set to wontfix
- Status changed from new to closed
Foolscap no longer uses irrational version numbers -- http://foolscap.lothar.com/trac/ticket/175 -- so we don't need to deal with it.
I opened #1388 (nicer reporting of unparseable version numbers in deps).