缓存生产部署的Python要求

时间:2012-01-12 16:44:19

标签: python pip pypi

我正在构建各种基于python的项目,这些项目使用pip / buildout来安装依赖项。但我不喜欢有人删除github项目并削弱我的应用程序或网络中断的想法,这意味着我无法执行部署。

其他人如何解决这个问题?

我有各种各样的想法,但我想也许听起来最有希望的是某种缓存代理服务器。我指向pip使用这个内部代理服务器,它会缓存下载项目的副本,并在提供缓存版本之前定期检查更新(如果有网络连接)。

这样的事情是否已经存在?

使用案例

我有一个项目,我部署到Web服务器1.我添加了具有远程依赖项的新功能,当我更新到生产Web服务器时,PyPi已关闭,因此无法部署。或者当我来设置一个新的Web服务器时,依赖关系已经从github或者任何地方消失了。

我怎样才能做到这一点,无论在更广阔的世界中发生什么,我的部署/开发环境总能得到培养?

此外,在部署时,我不会在现有代码的顶部进行部署。相反,我将构建一个新的virtualenv并切换到它,以便我可以回滚,如果出现任何问题。因此,每次部署时,我都需要重建我的环境,并且需要存在依赖关系。

因此,我正在寻找一种解决方案,以防止短期网络中断到托管依赖项的服务器,以及防止被删除的项目。

3 个答案:

答案 0 :(得分:0)

您应该保留您所依赖的项目的“参考副本”。

如果有人从GitHub(以及PyPi和所有镜像以及网络上的其他所有网站)中删除项目,那么您就拥有了源代码,现在可以分发它。

答案 1 :(得分:0)

我有完全相同的要求,并且还使用buildout来管理我的部署。我尽量不在系统范围内安装任何我的包依赖项;我让buildout将所有这些鸡蛋安装到我的buildout中。这样,如果我依赖于我的项目的rev N + 1中的某个包的更新版本,并且在“上线”时间N + 1落在它的脸上,我可以回滚到N并自动获得包装依赖性N曾经合作过。

我们运行私有eggbasket服务器,并配置buildout以仅从中获取包。通过允许buildout从网络中抓取一次鸡蛋,然后复制下载的鸡蛋来初始化服务器内容。

这样,每个软件包的升级都完全受到控制,我可以确保我的代码的同一个快照的2次连续构建将构建相同的东西。当我想要全部升级时,我会让buildout再次获取最新版本,测试测试,然后将我的鸡蛋复制到eggbasket服务器进入生产模式。

答案 2 :(得分:0)

相关问题