Search code examples
pythonpippython-venvrequirements.txt

Does `pip install -U pip -r requirements.txt` upgrade pip before installing the requirements?


It seems to be common practice to set up a Python virtual environment using some variant of the following:

python -m venv venv && source ./venv/bin/activate
python -m pip install -U pip -r requirements.txt

What I hope the above command does is:

  1. Upgrade pip first
  2. Run the installation of the packages in requirements.txt

However, what actually seems to happen is:

  1. Collects all packages, including newest version of pip
  2. Installs them all together
    • The original/outdated version of pip is what actually runs the installs
    • And the new version of pip is not used until after this command

Question(s)

  1. Is it possible to have pip upgrade itself and then install a requirements file, in one command?
    • Would this infer any particular benefits?
  2. Should I switch to the following?
python -m venv venv && source ./venv/bin/activate
python -m pip install -U pip
python -m pip install -r requirements.txt
  1. What is the optimal method to install requirements files?
    • I see people sometimes installing/upgrading wheel and setuptools as well

Solution

  • The answers to your questions are:

    1. No. pip doesn't currently treat itself as a special dependency, so it doesn't know to install then execute itself, which is what it would need to do to overcome the problems you observed.
    2. Updating pip in a separate step is indeed the recommended way to proceed.

    You may from time to time see pip issue a message advising that a newer version is available. This happens a lot if you create them from a python with an outdated pip.