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

来源:QQ快报
责任编辑:李志喜
字体:

可以从语言的适用性、学习的难易程度、企业主的要求几个方面考虑。从这几个角度看,学习Python都没有什么可挑剔的。 如果你想要专业的学习Python开发,更多需要的是付出

作者丨陈思

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

ng:utf-8 如果没有给出其他编码提示,Python将默认为ASCII作为标准编码 另外 完整的Python源文件应该使用单个编码。不允许嵌入不同编码的数据,并且在编译Python源代

迁移至 Python 3,用户怨声载道

语法就是这么规定的你可以尝试在百度输入法中这么设置:希望你的问题能够解决

2020 年 3 月 4 日,一位用户在 Twitter 上吐槽:

毫无疑问,Python如今是野蛮增长,增速非常快。随着人工智能的崛起,Python会更加的火爆。比尔盖茨说过,之后的几十年,人工智能会强大到足以引起人们的重视。Python将有可

他的大概意思是:“每个人都坚持要摆脱 Python 2,但这样的做法却将我们拥有的所有功能完善且有用的 Python 2 代码从资产变成负债。”

python3教程 http://www.runoob.com/python3/python3-tutorial.html

随后他又举例说:

虚火虚火 做网站,用的就那么几个公司,facebook还放弃python回到php。 做爬虫,谢谢,你看到google和百度用了? 做运维自动化,麻烦,windows的管理工具很好用好吧,linux的shell

“自 2011 年用 Python 2 编写以来,我的 milter 实现一直是完全稳定的。现在,我不得不破坏它的稳定性,因为 Python 2 没法用了。”

可能因为python是比较容易学习的语言,但是又很高级。而且python将是人工智能时代的最佳编程语言这一说法,也带动了python的发展。至于学习的话,学习思路可以到黑马去找

有同样感受的人不只是他一个,尤其是那些大公司的开发人员。

在互联网的发展长河中,很多编程语言都被淘汰了,然而,Java却一直处于广泛应用的状态,Java更加稳定。可能这就是为什么Python这么火却没有java就业好的原因吧。

2013 年, Facebook 计划将代码迁移至 Python 3 ,但是从产生这个想法到真正交付,一共花费了四年的时间,代码迁移仅仅是难题的开始,更重要的是让自己的员工使用并适应 Python 3;另有 LinkedIn 进行的“旷日持久战”,550 个代码存储库(库、应用程序和服务)要迁移、上百万行的代码要处理,还有内部用于持续集成 / 持续交付(CI/CD)框架、命令行接口以及部署和数据科学工具,这种散乱的非整体式环境用 Warsaw 的话来说“包括数百种独立的微服务和工具,外加几十个支持库。

摘抄的 python在2015年就在国外火了,现在在全世界火起来的根本的原因是AI(人工智能),这也是未来的方向,智能家居,智能未来等等,以后这绝对是重头戏,但是人工智能并不是谁

如此浩瀚的工程,花费的时间、精力都是巨大的,参与其中的人怨声载道,甚至有人将其称之为“噩梦般的工作”。然而当庞大的迁移终于完成,新的问题又出现了。

程序明显的错,你的print(key())与m=list(key())是两个不同的随机数,key()每次调用都是不同的,所以你要这样print("请输入验证码")t=key()  #得到并保存验证码prin

跨平台的分布式版本控制软件 Mercurial 就是 Python 编写的,所以对于向 Python 3 的迁移,Mercurial 也是非常的积极。在经历了同样大规模的迁移后,问题暴露了出来,负责 Mercurial 运维工作的工程师 Gregory Szorc 在博客上进行了一番吐槽:

在我个人看来,python为什么那么火的原因有很多。而你说主要有3个原因,那我就说下我 二、跨平台,扩展性。python有大量的库,优秀的框架。而且应用广泛。 三、GOOGLE公

简而言之,我将 Mercurial 和其他项目移植到 Python 3 的经验极大地破坏了我对 Python 的理解。从语言到热情的社区,我一直以来都对 Python 充满爱,但我仍在努力理解 Python 如何通过选择他们所做的过渡计划来设法给社区带来如此多的困难。

为啥企业很难招聘到合格的python程序员。 1、牛人都被大的互联网公司收了。 2、中小 3、中小企业不愿意培训程序员,希望招聘到立即可以上手干活的python程序员。 为啥不

Python 3.0 于 2008 年 12 月 3 日发布,社区花了十年的时间来接受它。这应该被普遍认为是失败的。

我真的对 Python 很不满意。移植到 Python 3 所需的工作量惊人。对于 Mercurial 而言,Python 3 引入了很多问题,但并不能解决很多问题。我们在泥泞中摸爬滚打了好几年,直到最终陷入比我们开始时更糟的状态。我敢肯定,几年后它将变得更好。但是在此之前,我们要经历 5 年以上的过渡期。官方宣称 Python 3 过渡会对项目造成破坏和干扰,这是一种太轻描淡写的说法。

问题出在哪里?

Python 3 的迁移为什么如此困难?回答这个问题之前,我们先简单了解一下它诞生的背景。

自 2008 年发布以来,Python 2.0 已经走过了十多个年头。它的最后一次重大更新 ——Python 2.7 是在 2010 年。

虽然 Python 2.x 是一个还不错的版本,但同时也带来了相当大的历史包袱,例如,它有两种整数类型;存在恼人的 Unicode 编码问题;它混淆了懒惰和渴望的功能工具;它有一个标准的库,但加载内存非常庞大;它自诩的强类型,却有偶尔令人啼笑皆非的运算结果 None

由于修复这些问题可能会破坏现有代码,而几乎所有为 2.0 编写的代码仍可在 2.7 上运行,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 类型一起使用的数据,以使文本和二进制数据之间的区别更加清晰。不幸的是,对于同时处理文本和二进制数据的代码,必须执行以下步骤以确保代码符合要求:https://docs.python.org/3/howto/pyporting.html#text-versus-binary-data

当运行的代码因运行的版本不同而表现不同时,最好检查 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。如果想避免迁移过程出现问题,可以参考一些大公司的迁移情况,这里有一些案例可供参考,希望可以帮到广大开发者:

上文提到的 Mercurial 的 Python 3 迁移:https://gregoryszorc.com/blog/2020/01/13/mercurial%27s-journey-to-and-reflections-on-python-3/

Dropbox 的 Python 3 迁移:https://dropbox.tech/application/how-we-rolled-out-one-of-the-largest-python-3-migrations-ever

点个在看少个 bug

请注意:以上内容转载自QQ快报,并不代表本网赞同其观点,版权归原作者所有,本网不承担任何责任,特此声明。

扩展阅读,根据您访问的内容系统为您准备了以下扩展内容,希望对您有帮助。

关于python3+tkinter的光标转移至其它组件问题

from tkinter import *

root = Tk()#创建三个 Label 分别添加到root窗体中

#Label是一种用来显示文字或者图片的组件

Label(root,text = 'pack1',bg = 'red').pack()

Label(root, text = 'pack2', bg = 'blue').pack()

Label(root, text = 'pack3', bg = 'green').pack()

root.mainloop()

怎么迁移安装的Python库

如果是可以通过pip安装的库,可以这样:

1. 打开cmd,输入pip freeze >requirements.txt回车后,保存这个配置文件

2. 在新主机中cmd,输入pip install requirements.txt,会将你原有的库全部自动安装的

为什么安装完python3.8.0的,检测出来的是2.6.4

最可能的问题是你是非官方下载的,你的3.8是假的(目前,非官方的下载网站下载的基本都有问题的)

建议从python官网下载安装 

声明:以上内容转载自互联网,并不代表本网赞同其观点。如有任何问题,请与不良与违法信息举报中心联系:513175919@qq.com。

www.book1234.com true http://www.book1234.com/q/20200325/20200325A0JIVR00.html report 15450
娱乐时尚
历史文化
真视界
旅游美食
精彩图文
我爱我车
母婴健康
关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
Copyright © 2004-2018 book1234.com All Rights Reserved. 布客网 版权所有
京ICP备10044368号-1 京公网安备11010802011102号