Problem
The python package installer pip can be used to install directly from Github, like so:
pip install git+git://github.com/tangentlabs/django-oscar.git#egg=django-oscar
This will install from the HEAD of the master branch. However, when you use
pip freeze
to export your dependencies (usually to a requirements.txt
file),
pip will fix the reference to a specific commit by including its ID within the
URL:
$ pip freeze | grep oscar
-e git://github.com/tangentlabs/django-oscar.git@d636b803d98cd1d3edd01821d4fb2a01ce215ee4#egg=django_oscar-dev
Hence running pip install -r requirements.txt
will not pick any commits after
d636b803 until requirements.txt
is updated.
This isn’t always the desired behaviour; in some circumstances, you would prefer
for pip install -r requirements.txt
to always install the latest version from
Github.
Solution
Simply delete the commit ID from URL - that is, change:
-e git://github.com/tangentlabs/django-oscar.git@d636b803d98cd1d3edd01821d4fb2a01ce215ee4#egg=django-oscar
to
-e git://github.com/tangentlabs/django-oscar.git#egg=django-oscar
This can be done by hand once you’ve used
pip freeze > requirements.txt
to create your requirements file, or by using sed:
pip freeze | sed 's/@[a-z0-9]\+//' > requirements.txt
Discussion
The text between @
and #
in the github URL specifies the commit to install
from. Rather than a commit ID, a branch or tag name can be used also. Hence:
pip install -e git://github.com/tangentlabs/django-oscar.git@0.1#egg=django-oscar
will install the 0.1
tag, while:
pip install -e git://github.com/tangentlabs/django-oscar.git@releases/0.1#egg=django-oscar
will install from the HEAD of the releases/0.1
branch.
For further information, consult the requirements file format documentation.