使用缓存包将pip包安装到virtualenv的正确方法是什么?我已尝试设置--timeout=360
和--use-mirrors
,但pypi性能非常好,它会定期挂起或断开连接,从而使部署变得简单。
所以,我的计划是使用--download-cache选项预先下载所有包存档(但不安装它们),例如:
pip install --upgrade --timeout=120 --use-mirrors --no-install --download-cache /usr/local/pip/cache -r pip-requirements.txt
然后在安装到virtualenv期间指定此缓存位置,例如:
virtualenv /usr/local/myapp/.env
. /usr/local/myapp/.env/bin/activate; pip install --no-download --download-cache /usr/local/pip/cache -r pip-requirements.txt
deactivate
创建缓存非常令人沮丧,因为pip似乎不确定地将下载的包保存到缓存目录。具体来说,它拒绝缓存Django==1.4.0
,说“已满足要求”,所以我不得不使用--force-reinstall
。
使用缓存进行安装是目前我遇到的问题。运行上面的命令会给我一个错误:
Could not install requirement Django==1.4.0 (from -r pip-requirements.txt (line 1)) because source folder /usr/local/myapp/.env/build/Django does not exist (perhaps --no-download was used without first running an equivalent install with --no-install?)
Storing complete log in /home/chris/.pip/pip.log
这是什么意思?
文件:
http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2FD%2FDjango%2FDjango-1.4.tar.gz
http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2FD%2FDjango%2FDjango-1.4.tar.gz.content-type
肯定存在于缓存目录中,我使用了--no-install
选项。
我做错了什么?
答案 0 :(得分:18)
问题似乎是--download-cache
只能用于指定要下载的缓存,而不能用于安装。因此,pip
仍在查看/usr/local/myapp/.env/build/Django
而不是/usr/local/pip/cache
。你有没有尝试过移动
pip install --upgrade --timeout=120 --use-mirrors --no-install --download-cache /usr/local/pip/cache -r pip-requirements.txt
创建virtualenv
之后?我想知道这是否会有所帮助。
您可能还想尝试导出PIP_DOWNLOAD_CACHE
,看看它是否有效而不使用--download-cache
。
以下是我认为有效的方法:
pip install --no-install --use-mirrors --download=/DIRNAME PKGNAME
pip install --find-links=file:///DIRNAME --no-index --index-url=file:///dev/null PKGNAME
现在,实际上,这是我将使用的工具,而不是上述所有内容,它可以更优雅,更可靠地解决所有问题:{{3由David Wolever撰写。
来自文档:
pip2pi从pip要求构建与PyPI兼容的包存储库
pip2pi
允许您使用两个简单的命令创建自己的PyPI索引:
要镜像包及其所有要求,请使用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
从上一个目录构建包索引:
$ 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
要从步骤2中构建的索引进行安装,只需使用:
pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
奖励:您甚至可以将自己的索引镜像到pip2pi
的远程主机。