Skip to main content

Edits your requirements.txt by hashing them in

Project description

https://travis-ci.org/peterbe/hashin.svg?branch=master https://badge.fury.io/py/hashin.svg

Helps you write your requirements.txt with hashes so you can install with pip install --require-hashes -r ...

If you want to add a package or edit the version of one you’re currently using you have to do the following steps:

  1. Go to pypi for that package

  2. Download the .tgz file

  3. Possibly download the .whl file

  4. Run pip hash downloadedpackage-1.2.3.tgz

  5. Run pip hash downloadedpackage-1.2.3.whl

  6. Edit requirements.txt

This script does all those things. Hackishly wonderfully so.

A Word of Warning!

The whole point of hashing is that you vet the packages that you use on your laptop and that they haven’t been tampered with. Then you can confidently install them on a server.

This tool downloads from PyPI (over HTTPS) and runs pip hash on the downloaded files.

You should check that the packages that are downloaded are sane and not tampered with. The way you do that is to run hashin as normal but with the --verbose flag. When you do that it will print where it downloaded the relevant files and those files are not deleted. For example:

$ hashin --verbose bgg /tmp/reqs.txt
https://pypi.python.org/pypi/bgg/json
* Latest version for 0.22.1
* Found URL https://pypi.python.org/packages/2.7/b/bgg/bgg-0.22.1-py2-none-any.whl
*   Re-using /var/folders/1x/2hf5hbs902q54g3bgby5bzt40000gn/T/bgg-0.22.1-py2-none-any.whl
*   Hash e5172c3fda0e8a42d1797fd1ff75245c3953d7c8574089a41a219204dbaad83d
* Found URL https://pypi.python.org/packages/source/b/bgg/bgg-0.22.1.tar.gz
*   Re-using /var/folders/1x/2hf5hbs902q54g3bgby5bzt40000gn/T/bgg-0.22.1.tar.gz
*   Hash aaa53aea1cecb8a6e1288d6bfe52a51408a264a97d5c865c38b34ae16c9bff88
* Editing /tmp/reqs.txt

You might not have time to go through the lines one by one but you should be aware that the vetting process is your responsibility.

Installation

This is something you only do or ever need in a development environment. Ie. your laptop:

pip install hashin

How to use it

Suppose you want to install futures. You can either do this:

hashin futures

Which will download the latest version tarball (and wheel) and calculate their pip hash and edit your requirements.txt file.

Or you can be specific about exactly which version you want:

hashin "futures==2.1.3"

Suppose you don’t have a requirements.txt right there in the same directory you can do this:

hashin "futures==2.1.3" stuff/requirementst/prod.txt

If there’s not output. It worked. Check how it edited your requirements files.

Runnings tests

Simply run:

python setup.py test

Debugging

To avoid having to install hashin just to test it or debug a feature you can simply just run it like this:

touch /tmp/whatever.txt
python hashin.py --verbose Django /tmp/whatever.txt

History

This program is a “fork” of https://pypi.python.org/pypi/peepin peepin was a companion to the program peep https://pypi.python.org/pypi/peep/ but the functionality of peep has been put directly into pip as of version 8.

Future

If this script proves itself to work and be useful, I hope we can put it directly into pip.

Version History

0.3
  • Issue a warning for users of Python before version 2.7.9.

0.2
  • Last character a single newline. Not two.

0.1
  • First, hopefully, working version.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hashin-0.3.tar.gz (5.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

hashin-0.3-py3-none-any.whl (7.9 kB view details)

Uploaded Python 3

hashin-0.3-py2-none-any.whl (7.9 kB view details)

Uploaded Python 2

File details

Details for the file hashin-0.3.tar.gz.

File metadata

  • Download URL: hashin-0.3.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for hashin-0.3.tar.gz
Algorithm Hash digest
SHA256 f8c666b790da4327622ac492fdbcf6caa1b46a0d85fae90eada5213372fafe97
MD5 d62b3f0f65473ce726116de817ae803c
BLAKE2b-256 65128e5dd14c7450d3598abe76a5f754c26e062065d6ff167f6f1a03cb52a063

See more details on using hashes here.

File details

Details for the file hashin-0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for hashin-0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8015468f50b97cfd4fc8d81fdd99966f1959d8990cee27e24aa79976a2f4ebc1
MD5 e21c6345b32b654a368bf77e7a578cba
BLAKE2b-256 6104adbb52ea26b716e3b0edf13dbaf8457150197049cf6c4dba8bcfd6c02e61

See more details on using hashes here.

File details

Details for the file hashin-0.3-py2-none-any.whl.

File metadata

File hashes

Hashes for hashin-0.3-py2-none-any.whl
Algorithm Hash digest
SHA256 e86f8b9104df83bda4cf8d000bf21b7fde1ebf3962e67b03fea4c102970d2f95
MD5 4d332845e9dbd6fce299e844885ac540
BLAKE2b-256 129cf5a03bb1439c73373fdd299717111ef9d58edcd11a017d6bdba7c38f62b8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page