Mat*_*kin 137 pip virtualenv
我在不同的virtualenv环境中安装了很多相同的软件包.有没有办法可以下载一次包然后从本地缓存中安装pip?
这会减少下载带宽和时间.
Mat*_*kin 122
根据Pip文档:
从v6.0开始,pip提供了一个默认缓存,其功能类似于Web浏览器.虽然默认情况下缓存处于启用状态,并且默认情况下设计正确,但您可以禁用缓存并始终使用该
--no-cache-dir选项访问PyPI .
因此,更新的答案是,如果您想要下载缓存,只需使用其默认值的pip.
来自点子新闻,版本0.1.4:
添加了对环境变量$ PIP_DOWNLOAD_CACHE的支持,该变量将缓存包下载,因此将来的安装不需要大量下载.仍然需要网络访问,但使用它时只会避免一些下载.
为了利用这一点,我在以下内容中添加了以下内容~/.bash_profile:
export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
Run Code Online (Sandbox Code Playgroud)
或者,如果你在Mac上:
export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads
Run Code Online (Sandbox Code Playgroud)
PIP_DOWNLOAD_CACHE目录中.例如,我现在有很多Django包.virtualenvs在飞机上创建新的答案,但它仍然很棒.K Z*_*K Z 51
在我看来,这pip2pi是一个更优雅,更可靠的解决方案.
来自文档:
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
Run Code Online (Sandbox Code Playgroud)要从以前的目录构建包索引:
$ 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
Run Code Online (Sandbox Code Playgroud)要从您在步骤2中构建的索引进行安装,您只需使用:
pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
Run Code Online (Sandbox Code Playgroud)您甚至可以将自己的索引镜像到远程主机pip2pi.
Fli*_*imm 31
较新的Pip版本现在默认缓存下载.请参阅此文档:
https://pip.pypa.io/en/stable/reference/pip_install/#caching
创建一个名为的配置文件~/.pip/pip.conf,并添加以下内容:
[global]
download_cache = ~/.cache/pip
Run Code Online (Sandbox Code Playgroud)
在OS X上,选择更好的路径是~/Library/Caches/pip因为它遵循其他OS X程序使用的约定.
sla*_*acy 28
PIP_DOWNLOAD_CACHE有一些严重的问题.最重要的是,它将下载的主机名编码到缓存中,因此使用镜像变得不可能.
管理pip下载缓存的更好方法是将"下载包"步骤与"安装包"步骤分开.下载的文件通常称为"sdist文件"(源代码分发),我将它们存储在$ SDIST_CACHE目录中.
这两个步骤最终成为:
pip install --no-install --use-mirrors -I --download=$SDIST_CACHE <package name>
Run Code Online (Sandbox Code Playgroud)
这将下载该包并将其放在$ SDIST_CACHE指向的目录中.它不会安装包.然后你运行:
pip install --find-links=file://$SDIST_CACHE --no-index --index-url=file:///dev/null <package name>
Run Code Online (Sandbox Code Playgroud)
将软件包安装到虚拟环境中.理想情况下,$ SDIST_CACHE将在您的源代码管理下提交.部署到生产时,您将只运行第二个pip命令来安装软件包而不下载它们.
Jac*_*ing 13
从6.0版开始,pip现在进行自己的缓存:
- 不推荐使用DEPRECATION
pip install --download-cache和pip wheel --download-cache命令行标志,并删除了功能.由于pip现在自动配置并使用它的内部HTTP缓存,它取代--download-cache现有的选项已经不起作用,但仍然会被接受,直到它们在pip v8.0中删除.有关详细信息,请参阅https://pip.pypa.io/en/latest/reference/pip_install.html#caching
来自以上链接的更多信息:
从v6.0开始,pip提供了一个默认缓存,其功能类似于Web浏览器.虽然默认情况下缓存处于启用状态,并且默认情况下设计正确,但您可以禁用缓存并始终使用该
--no-cache-dir选项访问PyPI .
pip wheel是一个很好的选择,可以通过预编译包的额外功能来实现您的需求.来自官方文档:
为需求(及其所有依赖项)构建轮子:
$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage
现在您的/tmp/wheelhouse目录已预先编译了所有依赖项,因此您可以将该文件夹复制到另一台服务器并使用以下命令安装所有内容:
$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage
请注意,并非所有软件包都可以跨机器完全移植.某些软件包将专门为您正在使用的Python版本,操作系统分发和/或硬件体系结构而构建.这将在文件名中指定,例如-cp27-none-linux_x86_6464位Linux上的CPython 2.7等.
仅使用 pip (我的版本是 1.2.1),您还可以像这样构建本地存储库:
if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>; then
pip install --download-directory="$PIP_SDIST_INDEX" <package>
pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>
fi
Run Code Online (Sandbox Code Playgroud)
在第一次调用 pip 时,(仅)在本地存储库中查找需求文件中的包,然后从那里安装。如果失败,pip 从其通常位置(例如 PyPI)检索包并将其下载到PIP_SDIST_INDEX(但不安装任何内容!)。“重复”第一个调用以从本地索引正确安装软件包。
(--download-cache创建一个本地文件名,它是完整的(转义的)URL,pip 不能将其用作索引--find-links。 --download-cache如果找到,将使用缓存文件。我们可以将此选项添加到 pip 的第二次调用中,但由于索引已经起到了一种缓存的作用,它不一定会带来很多。例如,如果你的索引被清空,它会有所帮助。)
| 归档时间: |
|
| 查看次数: |
47550 次 |
| 最近记录: |