tell pip to install the dependencies of packages listed in a requirement file
simplifily, use:
pip install -r requirement.txt
it can install all listed in requirement file.
Any way to do this without manually re-installing the packages in a new virtualenv to get their dependencies ? This would be error-prone and I'd like to automate the process of cleaning the virtualenv from no-longer-needed old dependencies.
That's what pip-tools package is for (from https://github.com/jazzband/pip-tools):
Installation
$ pip install --upgrade pip # pip-tools needs pip==6.1 or higher (!)$ pip install pip-tools
Example usage for pip-compile
Suppose you have a Flask project, and want to pin it for production. Write the following line to a file:
# requirements.inFlask
Now, run pip-compile requirements.in:
$ pip-compile requirements.in## This file is autogenerated by pip-compile# Make changes in requirements.in, then run this to update:## pip-compile requirements.in#flask==0.10.1itsdangerous==0.24 # via flaskjinja2==2.7.3 # via flaskmarkupsafe==0.23 # via jinja2werkzeug==0.10.4 # via flask
And it will produce your requirements.txt
, with all the Flask dependencies (and all underlying dependencies) pinned. Put this file under version control as well and periodically re-run pip-compile
to update the packages.
Example usage for pip-sync
Now that you have a requirements.txt
, you can use pip-sync
to update your virtual env to reflect exactly what's in there. Note: this will install/upgrade/uninstall everything necessary to match the requirements.txt
contents.
$ pip-syncUninstalling flake8-2.4.1: Successfully uninstalled flake8-2.4.1Collecting click==4.1 Downloading click-4.1-py2.py3-none-any.whl (62kB) 100% |████████████████████████████████| 65kB 1.8MB/s Found existing installation: click 4.0 Uninstalling click-4.0: Successfully uninstalled click-4.0Successfully installed click-4.1
Given your comment to the question (where you say that executing the install for a single package works as expected), I would suggest looping over your requirement file. In bash:
#!/bin/shwhile read p; do pip install $pdone < requirements.pip
HTH!