【问题标题】:Easy_install cache downloaded filesEasy_install 缓存下载的文件
【发布时间】:2010-10-06 11:27:55
【问题描述】:

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

【问题讨论】:

    标签: python easy-install egg python-wheel


    【解决方案1】:

    13 年后更新easy_install 已于 2021 年 1 月从 Python 中删除。python 包管理器是 pip,它会缓存下载的包。

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

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

    然后用pip install代替easy_install

    【讨论】:

    • 需要注意的是pip cant install binaries(_.egg files_)。这在 Windows 平台上至关重要。
    【解决方案2】:

    这是我使用 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工具,如果你还没有的话:

    $ pip install wheel
    

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

    $ pip wheel lxml
    

    这会下载、编译,但最终导致 lxml whl 文件位于 packages 目录中。

    从那时起

    $ pip install lxml
    

    甚至更快

    $ pip install --no-index lxml
    

    将花费几分之一秒,因为它使用车轮格式的包。

    从Window setup exe包中准备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 $目录 lxml-3.2.3.win32-py2.7.exe

    2. 将其转换为whl

      $ 轮转 lxml-3.2.3.win32-py2.7.exe $目录 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 可以对鸡蛋格式的包进行完全相同的转换。

    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 下载文件。

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

    【讨论】:

      猜你喜欢
      • 2012-07-31
      • 2012-12-24
      • 2021-04-30
      • 2013-05-30
      • 1970-01-01
      • 2011-06-12
      • 2014-01-09
      • 2017-10-19
      • 2017-05-03
      相关资源
      最近更新 更多