从 Python 2 切换到 Python 3:你需要知道什么

Python 2 将在短短几周内到达其生命周期终点。 在迁移到 Python 3 之前,你需要了解这些。
221 位读者喜欢这篇文章。
A sunrise

Opensource.com

Python 2.7 将于 2020 年 1 月 1 日正式停止支持。 在此日期之后,计划进行一次最终错误修复,然后就结束了。

这个生命周期结束 (EOL) 对你意味着什么? 如果你运行 Python 2,则需要迁移。

谁决定停止支持 Python 2?

2012 年,维护 Python 编程语言的团队审查了他们的选择。 有两个越来越不同的代码库,Python 2 和 Python 3。两者都很流行,但是较新的版本没有被广泛采用。

除了 Python 3 通过完全重做 Unicode 支持来改变底层数据处理方式带来的中断之外,主要版本更改允许一次性发生非向后兼容的更改。 此决定记录在2006 年。 为了缓解中断,Python 2 继续得到维护,并反向移植了一些功能。 为了进一步帮助社区过渡,EOL 日期从2015 年延长至 2020 年,又增加了五年。

维护不同的代码库是该团队知道必须解决的麻烦。 最终,一项决定被宣布

“我们是志愿者,负责制作和维护 Python 编程语言。 我们已经决定,2020 年 1 月 1 日将是我们停止支持 Python 2 的日子。这意味着在那天之后,即使有人发现其中的安全问题,我们也不会再对其进行改进。 你应该尽快升级到 Python 3。”

核心 CPython 开发人员兼 Python 指导委员会现任成员 Nick Coghlan他的博客中添加了更多信息。 并且 PEP 404Barry Warsaw(也是 Python 指导委员会的成员)撰写,详细说明了为什么永远不会出现 Python 2.8。

是否还有人支持 Python 2?

来自提供商和供应商对 Python 2 的支持会有所不同。 Google Cloud 已经宣布它计划如何继续支持 Python 2。 红帽也宣布了 Red Hat Enterprise Linux (RHEL) 的计划,AWS 宣布了 AWS 命令行界面和 SDK次要版本更新要求

你还可以阅读 Stack Overflow 博客文章“为什么迁移到 Python 3 如此缓慢?”,作者 Vicki Boykis 在其中确定了 Python 3 采用缓慢的三个原因。

使用 Python 3 的理由

无论是否持续支持,尽快迁移到 Python 3 都是一个非常好的主意。 Python 3 将继续得到支持,并且它具有 Python 2 所没有的一些非常棒的功能。

最近发布的 Python 3.8 包括 功能,例如 海象运算符仅位置参数自文档化 f-strings。 早期版本的 Python 3 引入了 功能,例如 asynciof-strings类型提示pathlib,仅举几例。

下载次数最多的前 360 个软件包已经迁移到 Python 3。 你可以使用 caniusepython3 软件包检查你的 requirements.txt 文件,以查看你依赖的任何软件包是否尚未迁移。

将 Python 2 移植到 Python 3 的资源

有许多资源可用于简化你迁移到 Python 3 的过程。 例如,《将 Python 2 移植到 Python 3 指南》列出了一系列工具和技巧,以帮助你实现单源 Python 2/3 兼容性。 Python3statement.org 上也有一些有用的提示。

Dustin IngramChris WilcoxCloud Next '19 上发表了演讲,详细介绍了过渡到 Python 3 的一些动机和迁移模式。 Trey HunnerPyCon 2018 上发表了演讲,介绍了 Python 3 的最有用的功能,以鼓励你迁移以便可以利用它们。

加入我们!

2020 年 1 月 1 日距离现在只有几周了。 如果你需要每天提醒你还有多久(并且你使用 Twitter),请关注 Python 2 停止支持倒计时 Twitter 机器人。

接下来要阅读什么
标签
User profile image.
多年来,Katie 担任过许多不同的角色。 她以前是多种语言的软件开发人员、多个操作系统的系统管理员,以及许多不同主题的演讲者。 当她不改变世界时,她喜欢做饭、制作挂毯,并观察各种应用程序堆栈处理表情符号的效果如何。

5 条评论

我正在尝试弄清楚的一件事是 datetime 在 Python 3 中的工作方式。 我有一个脚本在 Python2 中包含以下内容

today = date.today()
d = today.strftime("%A, %B %d, %Y")

d 的结果是今天的日期,格式为星期几、月份、日期和年份。
这在 Python3 中不起作用,但是在搜索后,我仍然无法弄清楚如何在 Python3 中执行此操作。

对于 Scribus 的用户,Scribus 的 svn 版本现在需要 Python3。

以下代码似乎可以在 Python 3.6 中运行

$ python3
Python 3.6.8 (default, Oct 7 2019, 12:59:55)
[GCC 8.3.0] on linux
键入“help”、“copyright”、“credits”或“license”以获取更多信息。
>>> import datetime
>>> today = datetime.date.today()
>>> today.strftime("%A, %B %d, %Y")
'Wednesday, November 20, 2019'
>>>

回复 作者 Greg P

太棒了! 谢谢你

知识共享许可协议本作品根据知识共享署名 - 相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.