Python 如何加速已缓存的pip安装?

Python 如何加速已缓存的pip安装?,python,virtualenv,pip,Python,Virtualenv,Pip,我经常需要从requirements.txt重新创建虚拟环境,我已经在使用它了。这仍然需要很多时间,我注意到以下几点: Pip在以下两行之间花费了大量时间: Downloading/unpacking SomePackage==1.4 (from -r requirements.txt (line 2)) Using download cache from $HOME/.pip_download_cache/cached_package.tar.gz 平均约20秒来决定是否使用缓存包,那么

我经常需要从
requirements.txt
重新创建虚拟环境,我已经在使用它了。这仍然需要很多时间,我注意到以下几点:

Pip在以下两行之间花费了大量时间:

Downloading/unpacking SomePackage==1.4 (from -r requirements.txt (line 2))
  Using download cache from $HOME/.pip_download_cache/cached_package.tar.gz
平均约20秒来决定是否使用缓存包,那么安装速度很快。这是很多时候,你必须安装几十个软件包(实际上足够写这个问题)

背景是什么? 他们是否对在线软件包进行了某种完整性检查

有没有办法加快速度

编辑:查看:

time pip install -v Django==1.4
我得到:

real    1m16.120s
user    0m4.312s
sys     0m1.280s
完整的输出在这里。看起来pip正在花时间寻找一个有效的下载链接,而它已经有一个有效的缓存


有没有办法先查找缓存,然后在版本匹配时停止?

在花了一些时间研究pip内部结构并分析一些软件包安装之后,我得出结论,即使有下载缓存,pip也会对每个软件包执行以下操作:

  • 转到主索引url,通常为/()
  • 跟踪每个链接以获取其他网页
  • 从所有这些页面中提取所有链接
  • 根据软件包名称和版本要求检查所有链接的有效性
  • 从有效链接中选择最新版本
现在,pip有了一个下载url,如果配置了下载缓存文件夹,则会检查该url,如果存在以url命名的本地文件,则最终决定不使用该url

我的猜测是,通过预先检查缓存,我们可以节省大量时间,但我对所有pip代码库的理解还不够透彻,无法开始所需的修改。当然,这只适用于确切的版本号要求,
=
,因为有其他限制,如
=
,我们仍然希望在web上搜索最新版本


尽管如此,我还是能够创建一个小型虚拟环境,如果合并,这将节省我们一些时间。

一个替代方案可能是避免重建VirtualEnvironment,而是创建一个主虚拟环境的副本,您可以根据需要进行更新和复制


为使用命令执行此操作提供了一些支持

我想知道这是否与问题有关#304“install-U foo重新安装foo的依赖项,即使它们已经满足了”()。这可能是完全无关的,但这是另一个奇怪的PIP问题。在这种情况下,我只是在一个干净的VirtualNV中安装新软件包,没有升级。是的,我只是想建议,既然升级代码上网检查/获取软件包,即使它真的不应该这样做,那么“使用缓存”代码中可能也有类似的功能。啊,对了,这是同样的行为。我要补充的是,需要最近安装VirtualVwrapper(即在此之后)。我的安装日期为3月,cpvirtualenv花费了大量时间,没有保留--no site packages选项。现在,它工作得很好,而且很快(几秒钟),当然,如果你手头有一个类似的virtualenv的话。使用这样的代理可以避免pip访问interwebs,而且安装速度很快!