Using Pip and Requirements.txt to Install From the Head of Github Branch
Join the DZone community and get the full member experience.
Join For FreeProblem
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.
Published at DZone with permission of David Winterbottom, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments