tell pip to install the dependencies of packages listed in a requirement file tell pip to install the dependencies of packages listed in a requirement file python python

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!