Platinum Partner
python

Using Pip and Requirements.txt to Install From the Head of Github Branch

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.

 

Published at DZone with permission of {{ articles[0].authors[0].realName }}, DZone MVB. (source)

Opinions expressed by DZone contributors are their own.

{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks
Tweet

{{parent.nComments}}