您的位置:首页 > 编程语言 > Python开发

虽然Python“内置电池”,但是电池正在漏电--Amber Brown

java276582434 2019-06-04 20:43 211 查看 https://blog.csdn.net/java2765

 

Twisted项目组的Amber Brown分享了她对Python标准库的批评。事实证明,这是当天最具争议的话题,在问答环节中,Guido van Rossum怒气冲冲地离开了房间。

应用程序需要的不仅仅是标准库

Python声称功能齐全,但Brown表示,如果没有外部包,它“用处不大”。例如,asyncio需要外部库才能连接到一个数据库或使用HTTP。Brown断言,从标准库到PyPI有许多这样的依赖关系:typing与mypy运行效果最佳,ssl模块需要一个monkeypatch来连接到非ASCII域名,datetime需要pytz库, 并且six库对于编写Python 2和3代码都是必需的。

其他标准库模块比PyPI上的替代模块差得多。http.client文档建议读者使用Requests,并且与arrow、dateutil和moment等竞争对手相比,datetime模块令人困惑。

质量差,功能落后,代码过时

“Python的电池正在漏电,” Brown说道。她认为标准库中的一些bug永远得不到修复。即使这些bug得到了修复,像Twisted这样的PyPI库也不能假定它们能在最新的Python上运行,因此它们必须永远保留它们的bug工作区。

有许多模块很少有应用程序会使用,但是没有方法来安装该标准库的子集。Brown特别指出了XML解析器和tkinter使标准库变得更大、更难以构建,因为少数程序员的缘故增加了所有程序员的负担。正如Russell Keith-Magee当天早些时候所描述的,标准库的大小使得PyBee很难在受限制的设备上运行Python。Brown还指出,一些标准库模块用C语言针对python3进行了优化,但是必须用纯Python重新实现,以便PyPy支持它们。

Brown发现一些新的标准库特性“太少、太迟”,使得用户不得不依靠backports来在Python 2中使用的这些特性。例如, socket.sendmsg是最近才添加的,这意味着Twisted必须提供自己的C扩展才能在Python2中使用sendmsg。尽管Python2的生命周期已经接近尾声,但Brown说道,这只适用于核心开发人员,而对于用户来说,Red Hat和其他发行方将继续保留Python2“直到该死的末日来临”。Brown还提到一些itertools代码在文档中是以示例显示的,而不是作为itertools模块中的函数提供。

坐在房间后面的Guido van Rossum这时打断了她的话,他说道:“你能不能只谈一个话题?我很抱歉,但这只是一个冗长而曲折的咆哮。你的观点是什么?” Brown回答说,她的观点是,标准库存在很多问题。

标准库模块排挤创新

Brown自己认为,最具争议的观点是,在标准库中添加模块会打击程序员使用或参与与之竞争的PyPI包的积极性,从而扼杀创新。自从asyncio发布以来,她就不得不解释为什么Twisted仍然是值得使用的,并且,现在标准库中有了数据类,而Hynek Schlawack就必须捍卫他的attrs包。即使标准库模块排挤了其他项目,它们也会落后于其他项目。根据Brown的说法,“标准库是代码有时会死亡的地方”,因为在那里贡献代码是困难和缓慢的。她感谢最近的改进,尤其是来自Mariatta Wijaya的努力,但是对Python做出贡献仍然比PyPI包难。

“所以我知道这基本上确实是一种咆哮,”她总结道,“但这完全是有针对性的。”

讨论

 

 

Nick Coghlan将Brown的提议解释为扩大“ensurepip”模型的应用,以确保某些包总是可用的,但是可以与标准库分开升级,他认为这是合理的。

Van Rossum则不那么确信。他又问到:“Amber,你的观点什么?”Brown说她的目的是将asyncio和大多数新特性开发一起迁移到PyPI。“我们应该拥抱PyPI,”她劝诫道。她承认,Javascript等一些生态系统过于依赖包,但也有一些像Rust这样的生态系统拥有小型标准库和高质量的包存储库。她认为Python应该向这个方向迈进。

相反,Van Rossum认为,如果Twisted团队想让Python生态系统进化,他们应该停止支持旧的Python版本,并强制用户进行升级。Brown承认这一点,但是她说有一半Twisted用户仍然在使用Python 2,抛弃他们很难。在这一话题上的辩论变成了针对Van Rossum个人,他愤怒地离开了。

Nathaniel Smith评论道:“我注意到这里有些紧张”。他猜测,Brown和核心团队在过去互相讨论过,因为核心团队与其他Python程序员有不同的关注点。Brown进一步补充说,由于很少有Python核心开发人员同时也是库的主要维护者,所以库作者的抱怨会被贬低或忽略。

剩下的核心开发人员继续进行了技术讨论。Barry Warsaw说,核心团队已经讨论了标准库中的弃用模块,或者用它的子集创建一个轻量级发行版,但是这需要进行仔细的设计。其他人反对说,精简标准库可能会破坏下游代码,或者会给那些信任标准库而不信任PyPI的企业程序员带来大量工作。

Pablo Galindo Salgado担心将模块从标准库迁移到PyPI会导致测试配置的激增。但是在Brown看来,“我们已经在这样做了。”一些Linux和Python发行版已经有选择性地支持特性和修复漏洞,这导致了一组比核心团队意识到的复杂得多的配置。

标签: