I have a project for which I'd like to maintain the most recent stable version of Django 1.7 (presently at 1.7.1, but that may change).
In setup.py, I've specified the version range like this:
setup(
# ...
install_requires = ['setuptools',
'django >= 1.7, < 1.8',
],
)
In buildout.cfg, I've specified the same:
[versions]
django = >= 1.7, < 1.8
ipython = >= 2.3.1, < 3.0.0
For ipython, this works great, but unfortunately Django doesn't seem to like it:
Got Django 1.7.1.
Uninstalling ipython_section.
Installing python_section.
While:
Installing python_section.
An internal error occurred due to a bug in either zc.buildout or in a
recipe being used:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/zc/buildout/buildout.py", line 1942, in main
getattr(buildout, command)(args)
File "/usr/local/lib/python2.7/dist-packages/zc/buildout/buildout.py", line 622, in install
installed_files = self[part]._call(recipe.install)
File "/usr/local/lib/python2.7/dist-packages/zc/buildout/buildout.py", line 1366, in _call
return f()
File "/home/tk/thunderdome/eggs/zc.recipe.egg-2.0.1-py2.7.egg/zc/recipe/egg/egg.py", line 126, in install
reqs, ws = self.working_set()
File "/home/tk/thunderdome/eggs/zc.recipe.egg-2.0.1-py2.7.egg/zc/recipe/egg/egg.py", line 84, in working_set
allow_hosts=self.allow_hosts)
File "/usr/local/lib/python2.7/dist-packages/zc/buildout/easy_install.py", line 812, in install
return installer.install(specs, working_set)
File "/usr/local/lib/python2.7/dist-packages/zc/buildout/easy_install.py", line 644, in install
requirement = self._constrain(requirement)
File "/usr/local/lib/python2.7/dist-packages/zc/buildout/easy_install.py", line 603, in _constrain
requirement = _constrained_requirement(constraint, requirement)
File "/usr/local/lib/python2.7/dist-packages/zc/buildout/easy_install.py", line 1400, in _constrained_requirement
_constrained_requirement_constraint(constraint, requirement)
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2786, in parse
reqs = list(parse_requirements(s))
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2714, in parse_requirements
"version spec")
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2679, in scan_list
raise ValueError(msg, line, "at", line[p:])
ValueError: ('Expected version spec in', 'django[]>=1.7,,>=1.7,<1.8', 'at', ',>=1.7,<1.8')
Why is it failing, and how can I fix it?
A version spec with
something = <= 1234is invalid. Both an=and a<=isn't the right syntax.I'd treat the problem differently. You use your
setup.py'sinstall_requiresalready to restrict buildout a version between 1.7 and 1.8. Buildout will respect that requirement, so you don't need to duplicate it in the buildout config.What buildout's version pinning is for is exactly that: pinning to one specific version. Either you let buildout pick what it wants or you tell it to pick an exact version.
The way I use it is to add a
show-picked-versions = trueoption to the[buildout]part. Buildout will then print out a list of versions it picked. I then copy/paste that list to[versions]. That way you get a repeatable build and a nice speed improvement as buildout doesn't have to search pypi for those versions again.