回到未来-Python 2、Python 3 与十多年的迁移原代码

回到未来-Python 2、Python 3 与十多年的迁移

41分钟 ·
播放数7
·
评论数0

一门以容易开始著称的语言,为什么会主动发布一个不能让大量旧代码原样运行的新版本?本期《原代码》从一行可运行的 .py 文件出发,回到 Python 的发明与第一次公开分发,沿着文本与字节的断裂future 的迁移工作台、包维护者的双版本负担,以及 Dropbox 和 OpenStack 的工程路径,追踪这场迁移怎样被拆成许多可以执行的中间状态。

从两个解释器之间的兼容桥,到包、发行版、工具链和企业系统依次撤走旧路径:所谓“回到未来”,不是让过去在某一天同时消失,而是让越来越多的人终于不必再携带它。

你可在官方网站 yuandaima.xyz 中查看本期逐字稿、证据引用关系和证据快照。

时间轴

00:00 一行代码,拨回 1989

04:01 核心团队为什么选择 break

07:29 普通开发者怎样过河

12:31 包维护者站在桥中间

17:57 一个产品与一张依赖图

23:54 妥协不是一个动作

29:04 生态怎样改变默认选项

32:39 三种兼容预算

37:20 回到现在与未来

本期资料

- [Guido van Rossum:Foreword for Programming Python](www.python.org)

- [PEP 3000:Python 3000](peps.python.org)

- [What's New In Python 3.0](docs.python.org)

- [Brett Cannon:Why Python 3 exists](snarky.ca)

- [PEP 373:Python 2.7 Release Schedule](peps.python.org)

- [PEP 414:Explicit Unicode Literal for Python 3.3](peps.python.org)

- [PEP 466:Network Security Enhancements for Python 2.7.x](peps.python.org)

- [Python.org:Sunsetting Python 2](www.python.org)

- [PEP 602:Annual Release Cycle for Python](peps.python.org)

源码与工程记录

- [Python-Future:引入 futurize --stage1 / --stage2 的 commit](github.com)

- [Python-Future:两阶段迁移文档 commit](github.com)

- [Python-Future v0.11 Quick-start](raw.githubusercontent.com)

- [Django:Experimental Python 3 support](www.djangoproject.com)

- [Dropbox:How we rolled out one of the largest Python 3 migrations ever](dropbox.tech)

- [Dropbox:Incrementally migrating over one million lines of code from Python 2 to Python 3](dropbox.tech)

- [OpenStack:Python 3 Sprint at PyCon 2014](wiki.openstack.org)

- [OpenStack:Python 2 Deprecation Timeline](governance.openstack.org)

- [OpenStack:Drop Python 2.7 Support](governance.openstack.org)

- [pip 21.0 release notes](pip.pypa.io)

访谈与历史演讲来源

本版音频没有剪入第三方访谈或演讲片段;声音由 11 章旁白、原创片头《等待机器》和原创片尾《加速与混乱》组成。以下载体仅作为资料参考,未进入本版音频:

- [Guido van Rossum:Python 3000,Google TechTalk,2006](www.youtube.com)

- [Python 3 Panel,PyCon Australia,2011](www.youtube.com)

- [Python 3 Adoption and Barriers,Montreal-Python,2014](www.youtube.com)

- [Dropbox:Incrementally Migrating Over One Million Lines of Code from Python 2 to Python 3,PyCon 2019](www.youtube.com)

说明与延伸阅读

- Python 3.5 不是本期认定的唯一生态转折点。2015 至 2016 年的包索引分析只能说明活跃库的 Python 3 供给在改善,不能把整个迁移归结为一个解释器版本。

- Python 2.7 的支持期限从 2015 年延到 2020 年,为不能立即迁移的用户和供应商留下了时间;现有材料不足以证明“延期本身导致拖延”。

- 2020 年标记的是 CPython 上游支持和许多共同期限的重要边界,不是所有 Python 2 系统同时消失的日期。pip、Linux 发行版、商业托管环境和嵌入式产品按各自节奏退出或保留旧运行时。

- Dropbox 的双解释器、统一源码和灰度发布只说明其桌面客户端的迁移路径;OpenStack 的依赖、CI 与治理顺序只说明其受技术委员会治理的项目。两者都不是所有企业迁移的通用模板。

- 本期把 strunicodebytes 作为技术显微镜,用来观察迁移成本怎样从语法进入数据边界;这不表示 Python 3 的全部不兼容变化都来自文本模型。

- “Python 3 成为默认路径”在这里指 CPython 上游、主流工具链与多数活跃项目完成方向切换,不表示每个遗留系统都已支付完迁移成本。