Warning: this project is under active development.
A Pipfile
is a new (and much better!) way to declare dependencies for your Python environment (e.g. deployment of a web application). It will be a full replacement for the well-pervasive requirements.txt files, currently installable with $ pip install -r
.
This is a concept project that will eventually be built into pip itself, once the API (including the form of a Pipfile itself) has been built out and finalized.
Remember, the important part here is Pipfile.lock. It allows deterministic builds. Today's requirements.txt can do this, and should, but often doesn't, when version specifiers aren't provided. This efforts will provide a much more pleasant user experience.
A Pipfile
will be superior to a requirements.txt
file in a number of ways:
- Expressive Python syntax for declaring all types of Python dependencies.
- Grouping of sub-dependency groups (e.g. a
testing
group). - Use of a single file only will be extremely encouraged.
Pipfile.lock
Note—this is an evolving work in progress:
# Note: There will be a default source, and context manager can also be used. source('https://pypi.org/', verify_ssl=True) package('requests') package('Django', '==1.6') package('pinax', git='git://github.com/pinax/pinax.git', ref='1.4', editable=True) dev_package('nose')
Note—this file is always to be generated, not modified or constructed by a user:
{ "_meta": { "Pipfile-sha256": "73d81f4fbe42d1da158c5d4435d921121a4a1013b2f0dfed95367f3c742b88c6", "sources": [ {"url": "https://pypi.org/", "verify_ssl": true}, ] }, "default": [ {"name": "requests", "version": "0.11.2", "hash": "..."}, {"name": "Django", "version": "1.6", "hash": "..."}, {"name": "pinax", "git": "git://...", "ref": "1.4", "editable": true}, ], "development": [ {"name": "nose", "version": "1.3.7", "hash": "..."}, ] }
Install packages from Pipfile
:
$ pip install -p ! Warning: Pipfile.lock (48d35f) is out of date. Updating to (73d81f). Installing packages from Pipfile.lock... # Manually update lockfile. $ pip freeze -p Pipfile Pipfile.lock (73d81f) written to disk.
Notes:
# -p accepts a path argument, which defaults to 'Pipfile'. # Pipfile.lock will be written automatically during `install -p` if it does not exist.
Ideas:
- Resursively look for `Pipfile` in parent directories (limit 4?) when ``-p`` is bare.
- pypa/pip#1795: Requirements 2.0
- Basic Concept Gist (fork of @dstufft's)
The documentation for this project will (eventually) reside at pypi.org.
If you run into bugs, you can file them in our issue tracker.
You can also join #pypa
on Freenode to ask questions or get involved.
Everyone interacting in the pipfile project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the PyPA Code of Conduct.