我讨厌 Python 2 和 Python 3,但我爱 Python
我讨厌 Python 2 和 Python 3,但我爱 Python
原文:https://medium.com/hackernoon/i-hate-python-2-and-python-3-but-i-love-python-20b661100819
尽管新版本即将推出,但人们更愿意称之为“Python 3 ”,这让它听起来像是一种不同的语言。
“Python 2”和“Python 3”,我都很讨厌。我爱 Python!
我讨厌“Python 2”和“Python 3”,因为人们需要在它们之间做出选择,项目维护人员必须保持两者的兼容性,有时甚至是 2.7.x 和 3.x 的多个版本。这减慢了我最喜欢的库的开发速度。
貌似 Python 是不跨版本兼容,什么?是的,没错。Python 的一个漂亮卖点是作为一种跨平台语言,但是最近由于第三方库支持和一些其他因素,它变得不兼容跨版本。
从传统 Python 版本升级到最新版本需要改变一些语句以及如何处理str或Unicode和其他一些小东西,像2to3这样的工具在 95%的情况下都会这样做,但是问题不仅仅是你的代码,你必须处理所有的第三方库,你的第三方库开发者也有同样的问题。那是流血的伤口。
让我告诉你一个可爱的小故事。
可爱的小故事
当我想开始一个项目时,在讨论了堆栈应该是什么之后,我们决定我们需要:
- 姜戈
- Django Rest 框架
- Django 仓库
- 博托
- Mongodb
- 雷迪斯
- 一种数据库系统
- 枕头
- Python 请求
- 特维利奥
- Gevent
- 格尼科恩
- 芹菜
- 模拟的
- Python 覆盖率
- 构造
- ipdb
还有更多,所以我们的团队坚持使用 Python 2,为什么呢?仅仅是因为我们可能需要一个只与“Python 2”兼容的第三方依赖,如果我们从“Python 3”开始,这可能会导致我们失去一只眼睛或又名金钱。
除了具有“Python 3”分支的 Fabric 之外,上述所有令人惊叹的第三方库都可以很好地与最新版本的 Python 兼容。),它们都可以在 Python 的最新或遗留版本上工作,而且我们还没有遇到第三方库与“Python 3”兼容的问题。
尽管如此,我们还是使用了遗留版本,这让我很恼火,但是为了让我们的工作保持理智或者互相愚弄,我们编写了与“Python 3”兼容的代码。使用“Python 3”作为运行时代码库并没有什么特别的地方。
我们的 CI 对遗留版本和最新版本都进行了测试,我们从来不需要修改代码来与“Python 3”兼容,它就能工作。里面有魔法吗?我们只遵循 Python 推荐。
担心依赖与 Python 的旧版本和最新版本不兼容。
这是否意味着 Python 变得跨版本不兼容了?
这很可怕,我不想去想它,也许我反应过度了,也许我把这件事看得很严重或者小题大做了。
问题是,支持遗留代码只在几年内是好的,但不是十年,Python 3 在 2008 年问世,人们仍然怀疑或懒惰继续前进。
放弃 Python 遗产应该在很久以前就开始了,但是现在还不算太晚,我们需要开始并鼓励其他人放弃它并继续前进。我们阻碍了发展。
现在 Python 中有很多令人敬畏的新特性,人们选择其他语言来制作他们的下一个项目。
- 协同程序异步等待。
- 类型检查和提示。
- 静态静态分析工具。
- 统一码
- 更好的异常处理
- 字符串格式
- 字节与字符串
- 更好的多线程
- 等等…
这个清单还在继续…
用最新版本的 Python 开始你的下一个项目,鼓励和推动第三方库开发人员迁移到最新版本,如果他们不想或不能,自己动手,这是开源的!
仅选择传统版本,并且仅在由于供应商锁定或严重依赖兼容性而没有其他选择的情况下。
“Python 2”的代码不仅仅是“代码”,它是一个与旧版本“Python”一起工作的代码,一个没有更新的遗留代码,如果你写了一个 Python(作为最新版本)不能运行的代码,那个代码被破坏,那个代码不再工作。它必须更新,升级到最新版本。
我知道当前的依赖性和第三方模块是这种情况下的主要参与者,但是拥有两种独立的语言值得吗?或者这是一个好的借口吗?
这是一个两难的选择,一个令人讨厌的选择。在一个系统上有两个 Python 运行时很奇怪。用 virtualenv 来掩盖是行不通的。
PyBabel 崛起!
如果我们继续朝这个方向发展,有一天我们可能不得不使用另一种工具来编写一种具有类似 Python 的语法的语言,以产生“Python 2”和“Python 3”兼容的源代码,并在以后支持“Python 4”,人们将不再编写“Python ”,而是编写一种类似“Python”的语言,它可以编译或传输不同的 Python 实现将运行的内容。
那时候我们要考虑一种语言,可以编译成可以运行的东西:
- Python 2
- Python 3
- Python 4
- PyPy
- 皮斯顿
- Jython
- IronPython
“Python 2”和“Python 3”之间的距离可能会导致这种情况。谁知道呢,像2to3这样的东西可能只是这类工具的开始。
不要让 Python 来]跨版本不兼容。
黑客中午是黑客如何开始他们的下午。我们是 @AMI 家庭的一员。我们现在接受投稿,并乐意讨论广告&赞助机会。
要了解更多信息,请阅读我们的“关于”页面、在脸书上点赞/给我们发消息,或者简单地说, tweet/DM @HackerNoon。