Python 持续集成,易于安装和下载问题

Python 持续集成,易于安装和下载问题,python,continuous-integration,easy-install,Python,Continuous Integration,Easy Install,我的一些python项目是在与如下所述的设置进行持续集成的情况下进行测试的: 我目前使用easy\u install来安装项目及其依赖项和测试工具(nose、coverage) 有时,我的构建报告失败,因为由于网络问题,easy\u install无法下载依赖项:internet连接、PyPI或某个软件包下载服务器已关闭或似乎没有响应 我想通过使用包的本地缓存来防止我的构建在这种情况下失败:当我们无法下载新的依赖项时,我们将使用本地依赖项(可能时应该更新)。对我来说,首先尝试下载一个新的依赖项是

我的一些python项目是在与如下所述的设置进行持续集成的情况下进行测试的:

我目前使用
easy\u install
来安装项目及其依赖项和测试工具(nose、coverage)

有时,我的构建报告失败,因为由于网络问题,
easy\u install
无法下载依赖项:internet连接、PyPI或某个软件包下载服务器已关闭或似乎没有响应

我想通过使用包的本地缓存来防止我的构建在这种情况下失败:当我们无法下载新的依赖项时,我们将使用本地依赖项(可能时应该更新)。对我来说,首先尝试下载一个新的依赖项是很重要的,因为我想尽快得到通知,我的项目因为依赖项中的API更改而中断


我的问题是:如何设置这样一个不会因网络问题而中断的缓存?我第一次尝试使用它来解决这个问题,但据我所知,它并没有捕获所有错误。

您是否考虑过改用
pip
?如果是这样,您可以利用它对备用软件包存储库的支持:


如果您不想离开
easy\u install
,可以尝试使用
easy\u install
选项为您关心的软件包提供一组基本链接。

我同意Amber关于使用pip的看法。pip提供了至少3种支持spotty pypi访问的选项:

  • 备用包存储库标志如(
    -i
    中所述,用于索引url和
    --find_links

  • 可以使用
    PIP\u download\u cache
    指定下载缓存。下载的文件将被缓存以供以后访问

  • 我们在某一点上使用了这三种方法。很长一段时间以来,我们一直只使用3,但后来我们使用basketweaver建立了自己的pypi服务器

    easy\u install
    还支持
    --index url
    标记,该标记允许您指定另一个索引,例如现有的pypi镜像之一:

    easy_install -i http://d.pypi.python.org/simple 
    

    如果您要运行构建服务器,我真的建议为您的构建使用pypi本地缓存。如果只是这样,您就不会加载/真正增加您用于构建的包的数量,而这些包可能随时都会发生。最近有一篇关于建立pypi的非常好的博文:

    在sprint中,我最近使用了pip的一个技巧来设置我的应用程序所需的包的本地缓存:


    我最终使用了
    collective.eggproxy
    来缓存下载,但在运行
    collective.eggproxy
    后使用了启动延迟作为守护进程,以防止在
    collective.eggproxy
    完全启动之前尝试使用
    easy\u install
    时发生错误


    然而,建议使用pip的答案对我来说似乎同样有效,但由于我已经使用了
    easy\u install
    collective.eggproxy
    ,因此我更容易坚持使用它们。

    我也在研究这一点,让我们了解您的最新进展!Collective.eggproxy注意:它于2012年2月初迁移到github,因此现在尝试小补丁(通过分叉)或报告bug等应该会容易得多。是的,它很可能无法捕获所有的网络错误。事实上,
    collective.eggproxy
    工作得很好,但在尝试在
    easy\u install
    中使用服务器守护进程之前,我没有足够的时间启动它。我可以使用--find links选项,但如何保持本地缓存的更新?我还更喜欢使用真正的缓存,因为它可以加快构建速度,因为我们避免在本地下载缓存包您可以同时使用可选包存储库选项和pip的下载缓存选项来获得速度和离线冗余方面。2)pip_下载_缓存仍然需要internet连接:请参阅true,这就是我们首先使用3的原因:)使用3),我仍然不明白,当连接正常时,如何获得新的依赖关系。此外,在我看来,该捆绑包将构建在持续集成服务器上?还是我遗漏了什么?我们将捆绑包存储在git中,并在开发盒中生成。因此,持续集成环境依赖于开发人员在Git中保持捆绑包的最新状态,仅为一个项目提供一个完整的PyPI镜像对我来说似乎有些过分(需要30GB!!)。这就是为什么我只想缓存我使用的依赖项。