1

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

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

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

类似的东西已经存在了吗?

用例:

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

无论更广阔的世界发生什么,我怎样才能使我的部署/开发环境始终可以启动?

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

因此,我正在寻找一种解决方案,它可以使我免受托管依赖项的服务器的短期网络中断的影响,并防止项目被删除。

4

3 回答 3

0

这就是我要找的:

http://pypi.python.org/pypi/collective.eggproxy

于 2012-01-13T13:03:18.560 回答
0

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

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

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

于 2012-01-12T18:03:50.700 回答
0

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

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

于 2012-01-12T16:59:50.150 回答