How to cache downloaded PIP packages

PythonPip

Python Problem Overview


How do you prevent PIP from re-downloading previously downloaded packages? I'm testing the install of matplotlib, an 11MB package that depends on several distro-specific packages. Everytime I run pip install matplotlib, it re-downloads matplotlib. How do I stop this?

Python Solutions


Solution 1 - Python

NOTE: Only wheels downloaded over HTTPS are cached. If you are using a custom repo over plain old HTTP, the cache is disabled.

For new Pip versions:

Newer Pip versions by default now cache downloads. See this documentation:

https://pip.pypa.io/en/stable/cli/pip_install/#caching

For old Pip versions:

Create a configuration file named ~/.pip/pip.conf, and add the following contents:

[global]
download_cache = ~/.cache/pip

In one command:

printf '[global]\ndownload_cache = ~/.cache/pip\n' >> ~/.pip/pip.conf

Solution 2 - Python

You can use a specific environment variable PIP_DOWNLOAD_CACHE and make it point to a directory where your packages will be stored. If they are to be installed again, they will be taken from this directory.

There seems to be also an additional option for PIP pip --download-cache which ought to do something similar, but I have never tried it myself. For your example, to avoid re-downloading matplotlib every time, you would do the following:

pip install --download-cache /path/to/pip/cache matplotlib

Does that answer your question?

Solution 3 - Python

You could

# download and extract package to build path
pip install --no-install matplotlib

# the build path could be found by 
pip install --help|grep Unpack\ packages\ into -A 2

# then rm pip-delete-this-directory.txt inside the build path
# this prevent pip from removing package from the build directory after install
# you could check the content of the file
rm build/pip-delete-this-directory.txt

# from now on you could install matplotlib quickly
# this uses single build directory 
# and can speed up compiling by caching intermediate objects.
pip install --no-download matplotlib

Also, you could manually download the package

pip install -d dir_for_packages matplotlib

Then install it by un-tar and python setup install later.

The pip install --download-cache works in a similar way w/ extra checking: it firstly search for the latest or specified version of the target package from web, if the search has result and there is cached package in the directory specified by download-cache, the cached package will be used instead of downloading. For example,

pip install --download-cache . pymongo

will download pymongo package to current directory:

http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fp%2Fpymongo%2Fpymongo-2.1.1.tar.gz
http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2Fp%2Fpymongo%2Fpymongo-2.1.1.tar.gz.content-type

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCerinView Question on Stackoverflow
Solution 1 - PythonFlimmView Answer on Stackoverflow
Solution 2 - PythonCharles MenguyView Answer on Stackoverflow
Solution 3 - PythonokmView Answer on Stackoverflow