Easy_install 缓存下载文件

19

有没有一种方法可以配置easy_install,避免在安装失败时需要重新下载文件?

2个回答

17
更新13年后:在2021年1月,Python中删除了easy_install。Python包管理器是pip,它会缓存已下载的软件包。

pip (http://pypi.python.org/pypi/pip/)是easy_install工具的即插即用替代品,并可以实现相同功能。

只需运行easy_install pip并设置环境变量PIP_DOWNLOAD_CACHE到你想要存储文件的路径。 请注意,缓存无法处理从源代码库(如svn/git/hg/bzr)检出的依赖项。

然后使用pip install代替easy_install


7
需要注意的一点是pip无法安装二进制文件(_.egg文件_)。这在Windows平台上非常重要。 - Nanda Kishore

13

这是使用pip的解决方案,可管理二进制软件包的安装并可在Linux和Windows上使用。根据要求,它将下载自PyPi的数据限制到最小,并且作为额外奖励,在Linux上,它允许将通常需要编译的程序包重复安装速度缩短到几分之一秒。

设置需要几个步骤,但我认为值得这样做。

创建pip配置文件

创建pip配置文件(在Linux上:~ /.pip / pip.conf,在Windows上% HOME%\ pip \ pip.ini)

我的配置文件内容如下:

[global]
download-cache = /home/javl/.pip/cache
find-links = /home/javl/.pip/packages

[install]
use-wheel = yes

[wheel]
wheel-dir = /home/javl/.pip/packages

自动填充cache目录

cache目录将会缓存从pypi下载的数据,每次pip尝试从pypi获取某个包时都会这样做。它很容易就能被填充(不需要特别关注),但请注意,从pip的角度来看,这些只是从PyPi下载的缓存数据,而不是包,因此如果您使用了--no-index选项,则无法正常工作。

pip download用于填充packages目录

packages目录是放置真实包文件的地方。例如,对于我最喜欢的包plac,我会执行以下操作:

$ pip download --dest ~/.pip/packages plac

然后 plac 包文件将出现在该目录中。您甚至可以使用 -r requirements.txt 文件一次性为多个包执行此操作。

即使使用了 $ pip install --no-index <something>,这些软件包仍然会被使用。

在Linux上防止重复编译相同的软件包

例如,lxml 软件包需要编译,下载和编译可能需要 45 秒到几分钟不等的时间。 使用 wheel 格式,可以节省大量空间。

如果尚未安装,请安装 wheel 工具:

$ pip install wheel

lxml 创建轮子(假设您以前已经成功安装了 lxml - 它需要在系统中安装一些库):

$ pip wheel lxml

这里涵盖了下载、编译的过程,最终结果是在packages目录下生成了lxml的whl文件。

从那以后

$ pip install lxml

甚至更快

$ pip install --no-index lxml

使用 wheel 格式的包,只需几分之一秒即可完成。

从 Windows 安装程序包准备 wheel 格式的包

(注意:即使在 Linux 机器上也可以准备,无需编译,只需要将 exe 文件重新打包为 whl 格式。)

  1. 从 PyPI 下载要安装的 exe 格式的包,例如:

    $ wget https://pypi.python.org/packages/2.7/l/lxml/lxml-3.2.3.win32-py2.7.exe#md5=14ab978b7f0a3382719b65a1ca938d33 $ dir lxml-3.2.3.win32-py2.7.exe

  2. 将其转换为 whl 包:

    $ wheel convert lxml-3.2.3.win32-py2.7.exe $ dir lxml-3.2.3.win32-py2.7.exe lxml-3.2.3-cp27-none-win32.whl

  3. 测试它:

    $ pip install lxml

或者

$ pip install --no-index lxml

将非常迅速。

请注意,wheel convert可以完全对Egg格式的软件包进行相同的转换。

easy_installsetup.py install重用您的packages目录

easy_install$ python setup.py install似乎没有提供下载缓存的功能,但允许使用我们在packages目录中拥有的包。

要这样做,请编辑这两个工具的配置文件:

在Linux上:$HOME/.pydistutils.cfg

在Windows上:%HOME%\pydistutils.cfg

在我的情况下,我在这里有一个/home/javl/.pydistutils.cfg

[easy_install]
find_links = /home/javl/.pip/packages

即使在pip尝试安装一个声称依赖于其他软件包的软件包时,这个配置也可能有所帮助。因为它将此任务委托给setup.py调用,没有.pydistutils.cfg配置文件,pip会从PyPI下载该文件。

不幸的是,在这种情况下不支持wheel格式(据我所知)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接