I install a lot of the same packages in different virtualenv environments. Is there a way that I can download a package once and then have pip install from a local cache?
This would reduce download bandwidth and time.
Install the downloaded package into a local directory : python get-pip.py --user This will install pip to your local directory (. local/bin) . Now you may navigate to this directory (cd . local/bin) and then use pip or better set your $PATH variable this directory to use pip anywhere : PATH=$PATH:~/.
It depends on the OS. I believe it is in ~\AppData\Local\pip\cache on Windows. A cache is not always human-readable, as in this case.
According to the Pip documentation:
Starting with v6.0, pip provides an on by default cache which functions similarly to that of a web browser. While the cache is on by default and is designed do the right thing by default you can disable the cache and always access PyPI by utilizing the
--no-cache-dir
option.
Therefore, the updated answer is to just use pip with its defaults if you want a download cache.
From the pip news, version 0.1.4:
Added support for an environmental variable $PIP_DOWNLOAD_CACHE which will cache package downloads, so future installations won’t require large downloads. Network access is still required, but just some downloads will be avoided when using this.
To take advantage of this, I've added the following to my ~/.bash_profile
:
export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
or, if you are on a Mac:
export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads
PIP_DOWNLOAD_CACHE
directory. For instance, I now have quite a few Django packages. virtualenvs
on the airplane, but it's still great.In my opinion, pip2pi
is a much more elegant and reliable solution for this problem.
From the docs:
pip2pi builds a PyPI-compatible package repository from pip requirements
pip2pi
allows you to create your own PyPI index by using two simple commands:
To mirror a package and all of its requirements, use pip2tgz
:
$ cd /tmp/; mkdir package/
$ pip2tgz packages/ httpie==0.2
...
$ ls packages/
Pygments-1.5.tar.gz
httpie-0.2.0.tar.gz
requests-0.14.0.tar.gz
To build a package index from the previous directory:
$ ls packages/
bar-0.8.tar.gz
baz-0.3.tar.gz
foo-1.2.tar.gz
$ dir2pi packages/
$ find packages/
/httpie-0.2.0.tar.gz
/Pygments-1.5.tar.gz
/requests-0.14.0.tar.gz
/simple
/simple/httpie
/simple/httpie/httpie-0.2.0.tar.gz
/simple/Pygments
/simple/Pygments/Pygments-1.5.tar.gz
/simple/requests
/simple/requests/requests-0.14.0.tar.gz
To install from the index you built in step 2., you can simply use:
pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
You can even mirror your own index to a remote host with pip2pi
.
Newer Pip versions now cache downloads by default. See this documentation:
https://pip.pypa.io/en/stable/topics/caching/
Create a configuration file named ~/.pip/pip.conf
, and add the following contents:
[global]
download_cache = ~/.cache/pip
On OS X, a better path to choose would be ~/Library/Caches/pip
since it follows the convention other OS X programs use.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With