Python 3 的环境下如何正确地使用 Fabric

I’m TualatriX / 2018-05-21 15:14

注:标题中「Fabric」指的是 Fabric( http://www.fabfile.org ),一个 Python 社区常用的远程/本地自动化执行工具。

讲 Fabric 之前,先讲讲我的 Python 开发环境。

  • 很久以前,那会还在用 Python 2,Fabric 也是 Python 2 环境下的,当时我基于 Fabric 写一些部署和自动化脚本,很方便,也没有什么问题;
  • 去年,我把我的生产环境都升级至了 Python 3,当时发现了 Fabric 不支持 Python 3,它是一个 Python 2 Only 的工具。当时搞了一个最简便的方式继续使用 Fabric——在 virtualenv 环境内跑我的 Python 3 环境,在 virtualenv 环境外,继续用 Python 2 执行 Fabric 脚本。两者继续相安无事。

然而最近,麻烦来了…我不一小心,通过 homebrew 把 Fabric 升级了,升级到了 Fabric 2,一个好消息是,它支持 Python 2 & Python 3 了,一个坏消息是,它是重写的版本,不再兼容 1.x 版本的 fabfile,这意味着我得重写我的部署脚本们。

由于我暂时不想花那么多时间去基于 Fabric 2 的新规范去重写我的 fabfile,但又想要项目能尽快运行起来,咋办?我想到用 homebrew 安装旧版本的 Fabric,发现不方便。似乎只有一招,就是继续用 Python 2 安装 fabric 1.x 版本然后运行的方式了。

就在我决定用这招时,我发现了一个能运行在 Python 3 上的 Fabric 1.x 的 fork:

All Fabircs

PyPI 上有三个 Fabric 相关的包,这里我总结一下:

  • Fabric,当前版本号 2.0.1,也就是目前最新的,官方的 Fabric 2.0.1,兼容 Python 2 & Python 3,但不兼容 Fabric 1.x 的 fabfile;
  • fabric2,当前版本是 2.0.1,和前面的 Fabric 实际上是一样的。为啥要提供这么一个包?为了平滑迁移,也就是说,当你为了让 1.x 和 2.x 共存时,可以继续用 Fabric 的包安装旧的版本,然后用 Fabric2 的包作为新版本。
  • Fabric3,当前版本是 1.14.post1,是一个基于原来的 Fabric 1.x 的 fork,兼容 Python 2 & Python 3,兼容 Fabric 1.x 的 fabfile。

你可能被上面的总结绕晕了…没事,Python 社区就是这样,Python 2 和 Python 3 估计还要共存两年呢。

总之,如果你想向我一样,继续用 Fabric 1.x 的 fabfile(暂时不想改),又因为项目已经是 Python 3,那么现在在 virtualenv 环境中,统一安装 fabric3 这个包就可以了。

同时,可以再安装一个 fabric2,然后慢慢地把 fabfile 迁移至新的格式。但这是后话了。

希望没有 Python 2 的世界早日到来!


本站架设于 Linode 东京机房

tualatrix?d=yIl2AUoC8zA

Shared via Inoreader