Easy_install缓存下载的文件

时间:2009-02-09 19:05:40

标签: python easy-install egg python-wheel

有没有办法配置easy_install以避免在安装失败时再次下载文件?

2 个答案:

答案 0 :(得分:16)

pip(http://pypi.python.org/pypi/pip/)是easy_install工具的替代品,可以做到这一点。

只需运行easy_install pip并将环境变量PIP_DOWNLOAD_CACHE设置为您希望pip存储文件的路径。 请注意,缓存不适用于从源代码存储库(例如svn / git / hg / bzr)签出的依赖项。

然后使用pip install代替easy_install

答案 1 :(得分: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 dir每次都会获得从pypi下载的数据的缓存版本,pip尝试从pypi获取一些包。很容易得到它(不需要特别小心),但请注意,从点的角度来看,这些只是从PyPi下载的兑现数据,而不是包,所以万一你使用选项--no-index,它不行。

pip install --download填充packages dir

packages目录是放置真实包文件的地方。例如。对于我最喜欢的包plac,我会这样做:

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

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

这些包甚至用于$ pip install --no-index <something>

防止在Linux

上重复编译相同的软件包

E.g。 lxml包需要补充,下载和编译可能需要45秒到几分钟。使用滚轮格式,您可以在这里节省很多。

安装wheel工具,如果您还没有:

$ pip install wheel

lxml创建轮子(假设您已经设法在过去安装lxml - 它需要安装系统中的一些库):

$ pip wheel lxml

这会过度下载,编译,但最终导致lxml whl文件位于packgages目录。

此后

$ pip install lxml

甚至更快

$ pip install --no-index lxml

将花费一秒钟,因为它使用轮式格式化包。

从Window setup exe包

准备轮包

(注意:这甚至可以在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

  4. $ pip install --no-index lxml
    

    应该很快。

    请注意,wheel convert可以对鸡蛋格式化的包进行完全相同的转换。

    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尝试安装软件包,声明依赖于其他软件包时,此配置甚至可能有助于pip install个调用。当它将此任务委托给setup.py调用时,如果没有.pydistutils.cfg配置,它将从PyPi下载文件。

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