Distribute (which was a well-maintained fork of setuptools) is now renamed back to setuptools. So setuptools 0.7 (and now 0.8) is out. And distribute is deprecated.
But since distribute had to pretend it was really setuptools, all sorts of hacks needed to be used. And now all those hacks have to be worked around again. => problems.
I now run into buildout problems. Running bootstrap can fail:
$ python bootstrap.py
Traceback (most recent call last):
File "/home/vagrant/tools/bin/python", line 66, in <module>
exec(compile(__file__f.read(), __file__, "exec"))
File "bootstrap.py", line 154, in <module>
ws.require(requirement)
File ".../distribute-0.6.34-py2.7.egg/pkg_resources.py", line 696, in require
needed = self.resolve(parse_requirements(requirements))
File ".../eggs/distribute-0.6.34-py2.7.egg/pkg_resources.py", line 598, in resolve
raise VersionConflict(dist,req) # XXX put more info here
pkg_resources.VersionConflict: (setuptools 0.6c11
(/usr/lib/python2.7/dist-packages), Requirement.parse('setuptools>=0.7'))
Solution is apparently to download a fresh bootstrap: http://downloads.buildout.org/2/bootstrap.py
For me, that didn’t help as a global setuptools/distribute installation was in the way.
Apparently I really need to update my local setuptools installation. Hey, there’s a new new temporary distribute that installs the actual 0.8 setuptools for you:
$ sudo pip install -U distribute
Password:
Downloading/unpacking distribute from
https://pypi.python.org/packages/source/d/distribute/distribute-0.7.3.zip#md5=c6c59594a7b180af57af8a0cc0cf5b4a
Downloading distribute-0.7.3.zip (145Kb): 145Kb downloaded
Running setup.py egg_info for package distribute
Downloading/unpacking setuptools>=0.7 (from distribute)
Downloading setuptools-0.8.tar.gz (756Kb): 756Kb downloaded
Running setup.py egg_info for package setuptools
Installing collected packages: distribute, setuptools
Found existing installation: distribute 0.6.28
Uninstalling distribute:
Successfully uninstalled distribute
Running setup.py install for distribute
Found existing installation: distribute 0.6.28
Exception:
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 104, in main
status = self.run(options, args)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/commands/install.py", line 250, in run
requirement_set.install(install_options, global_options)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/req.py", line 1129, in install
requirement.uninstall(auto_confirm=True)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/req.py", line 477, in uninstall
config.readfp(FakeFile(dist.get_metadata_lines('entry_points.txt')))
File "build/bdist.macosx-10.8-intel/egg/pkg_resources.py", line 1213, in get_metadata_lines
File "build/bdist.macosx-10.8-intel/egg/pkg_resources.py", line 1205, in get_metadata
File "build/bdist.macosx-10.8-intel/egg/pkg_resources.py", line 1270, in _get
IOError: zipimport: can not open file /Library/Python/2.7/site-packages/distribute-0.6.28-py2.7.egg
Storing complete log in /Users/reinout/Library/Logs/pip.log
Oh what?? That was on OSX. Let’s try again:
...
ImportError: Entry point ('console_scripts', 'easy_install') not found
Oh hell, my entire installation got mutilated.
I saw that too on one of my ubuntu boxes:
$ sudo easy_install -U distribute
Traceback (most recent call last):
File "/usr/local/bin/easy_install", line 9, in <module>
load_entry_point('distribute', 'console_scripts', 'easy_install')()
File "/usr/local/lib/python2.7/dist-packages/setuptools-0.8-py2.7.egg/pkg_resources.py", line 378, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/local/lib/python2.7/dist-packages/setuptools-0.8-py2.7.egg/pkg_resources.py", line 2565, in load_entry_point
raise ImportError("Entry point %r not found" % ((group,name),))
ImportError: Entry point ('console_scripts', 'easy_install') not found
Normally I’d take that as a message that a previously-patched-and-thus-empty setuptools installation is now used. But…
What worked:
$ wget https://bitbucket.org/pypa/setuptools/raw/0.8/ez_setup.py
$ sudo /usr/bin/python ez_setup.py
This gives you a nice fresh globally installed setuptools 0.8.
Somehow some of my buildouts had a development egg link to a
setuptools or distribute version. For that I had to remove the
contents of the develop-eggs/
directory in my buildout.
I use a recipe (syseggrecipe) that makes it easier to use globally installed packages. Especially handy for numpy/scipy and geographical libraries.
It works by adding development egg links to those packages it finds. And, of course, one of those directories with one of those packages also contained an older version of setuptools:
$ python bootstrap.py
Setting socket time out to 1 seconds.
$ bin/buildout
Setting socket time out to 1 seconds.
While:
Installing.
Checking for upgrades.
Error: There is a version conflict.
We already have: setuptools 0.6c11
but zc.buildout 2.2.0 requires 'setuptools>=0.7
The solution here:
$ sudo rm -rf /usr/lib/python2.7/dist-packages/setuptools*
Zap setuptools and distribute in any global locations that can interfere.
Install setuptools 0.8 with the ez_setup method that I also showed as ‘solution 3’ above.
Use the latest buildout bootstrap (‘solution 1’).
My name is Reinout van Rees and I program in Python, I live in the Netherlands, I cycle recumbent bikes and I have a model railway.
Most of my website content is in my weblog. You can keep up to date by subscribing to the automatic feeds (for instance with Google reader):