极客视点
极客时间编辑部
极客时间编辑部
113243 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/05:59
登录|注册

为什么迁移至Python 3这么难?

讲述:丁婵大小:8.21M时长:05:59
2020 年 1 月 1 日,Python 2 的生命周期正式截止,Python 核心开发人员也宣布即将不再提供该版本的安全更新,并建议用户尽快迁移至 Python 3。然而问题也在此时出现了,不论 Python 3 有多少优点,迁移的过程对于用户来说都极其痛苦,但是如果不这么做的话,又会有其他问题出现。

Python 3 的迁移为什么如此困难?

设计之初,Python 3 的预期是用户会直接转移到新版本,从而放弃使用 Python 2 。然而在一开始,人们有很多理由不采用 Python 3:最主要的原因是,它并没有与 Python 2 兼容。大多数的库希望同时在 Python 2 和 Python 3 上运行,这在一开始很难运作,并且由于缺乏支持工具,移植代码的工作十分艰难。
转折点发生在大约 2016 年左右的 Python 3.5 发行版中 ,该版本增加了矩阵乘法、引入了 asyncio、对 OrderedDict 的速度进行了提升以及实现了类型提示,这些提示为 Python 带来了一些类似于静态语言的功能。
更高版本包含更多功能,例如 Pathlib 库和 f 字符串操作。 通过这些更改,人们使用的许多库(例如用于机器学习的 scikit-learn )开始向 Python 3 迁移。
除了 Python 3 本身存在的一些技术问题,用户不愿意迁移的主要原因还有这几点。
安全问题。用户认为不进行升级会带来更大的风险,但是在大型组织或机构中,不允许员工自己升级 Python:管理员或安全团队会向他们推送更新。 在某些情况下,也不允许下载 PIP。 如果 Python 2 是安全团队同意的默认设置,那么它可能需要做出巨大的努力才能说服人们将其切换到 3,尤其是在受到严格监管(例如医疗保健或金融)和政府的环境中。
使用惯性。尽管许多版本的 Linux 中(例如 RHEL),都同时兼容 Python 2 与 Python 3,但这不是默认的选项,因此用户在 2 和 3 之间切换时,经常发现一些错误,尤其是指向系统版本的指针,例如,在 Debian 上使用 Python。

如何避免迁移出现问题?

如何迁移到 Python 3?每家公司的做法可能有所不同,所以在此之前,不如先看看官方给出的建议。
Python 软件基金会已经为需要同时运行 Python 2 和 3 的组织提供了如何实现跨代兼容性的综合指南,以下是其建议的摘要:
放弃对 Python 2.6 和更早版本的支持,因为从 Python 2.7 迁移要容易得多,并且如果必须运行 Python 2.6,请考虑使用 six library 来与 Python 3 兼容。
确保 setup.py 文件正确指定了代码库支持的 Python 版本,并且该文件至少包括 Programming Language :: Python :: 2 :: 仅作为 trove 分类器。
测试套件应至少具有 80%的代码覆盖率,即在测试过程中执行多少源代码的名称。如果不了解代码覆盖率,请使用 coverage.py 提供的工具。
阅读 Python 的“新增功能”文档和免费的“ 移植到 Python 3”手册,了解 Python 2 和 Python 3 之间的区别。
使用 Futurize Modernize 使 Python 2 代码与 Python 3 兼容,请确保阅读文档,以便解决这些无法处理的问题。
确保适应在 Python 2 和 3 之间处理整数除法的更改。例如,在 Python 2 中 9/2 = 4,而在 Python 3 中 9/2 = 4.5。如果可以在代码中使用“future import”除法和“//”运算符进行整数除法,那么代码已经与 Python 3 兼容。
Python 3 更改了可以与 str 类型一起使用的数据,以使文本和二进制数据之间的区别更加清晰。不幸的是,对于同时处理文本和二进制数据的代码,必须执行特定步骤以确保代码符合要求。
当运行的代码因运行版本不同而表现不同时,最好检查 Python 3 支持的特定功能是否能够运行,而不是检查 sys.version_info [0] 是否等于 3。
为了帮助对齐用 Python 3 编写的任何新代码并确保其兼容性,请在创建的任何新模块的顶部使用以下语句:from future import absolute_import, from future import division, 以及 from future import print_function。
使用 caniusepython3 提供的工具,检查哪些软件依赖项会阻止支持 Python 3 。
迁移代码后,请在 setup.py 文件中更新分类器,使其包含 Programming Language :: Python :: 3,以表明代码支持 Python 2 和 3。
通过使用 tox 自动化测试并将此设置与持续集成系统进行集成,以确保代码与 Python 2 和 3 保持兼容。
另外,为了将 Python 2 迁移到 Python 3 代码,NCSC 还建议使用 2to3 应用程序,该应用程序将尝试自动执行该过程。
总而言之,虽然很麻烦,但是为了保持功能的先进性,企业或个人开发者还是不得不选择迁移到 Python 3。如果想避免迁移过程出现问题,可以参考一些大公司的迁移情况,如FacebookMercurialDropbox 的 Python 3 迁移。
以上就是今天的内容,希望对你有所帮助。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • 小斧
    Python 3 也出来有一段时间啦!Python 2无法更新必然淘汰。
    1
收起评论
显示
设置
留言
1
收藏
29
沉浸
阅读
分享
手机端
快捷键
回顶部