保持旧 Python 代码健康和安全的更简单方法
Python 有其优点和缺点,但它仍然被广泛使用。例如,即使有更合适的语言可供选择,Python 也经常用于数据处理任务。
为什么?好吧,Python 相对容易学习。具有科学背景的人可以比 C 语言更快地学习 Python。然而,Python 固有的平易近人也带来了一些问题。
每当 Python 更新时,都意味着大量的重构工作量,而这通常会被处理得很差——或者根本不处理。这会导致性能不佳和安全漏洞。但也许有更好的方法:一个让你的 Python 任务日复一日平稳、安全地运行的工具。让我们来看看。
它很慢,但它可以完成工作
Python 不是最快的语言,但尽管它有相对劣势,但您经常会看到它用于密集的数据处理操作。想想机器学习、计算机视觉,甚至是高性能计算 (HPC) 系统中的纯数学。
因此,尽管它在性能方面享有盛誉,但通常使用 Python 代码处理非常困难的工作负载,仅仅是因为它使用起来非常实用。如果你有科学或数学背景,你可以相对轻松地学习 Python 并编写自己的代码来完成这项工作。
但是,通常情况下,可以访问的东西也会带来很多风险。编写 Python 代码的经验不足的程序员可能会为更有经验的程序员认为理所当然的任务而苦苦挣扎。
重构是一件麻烦事……也是一种风险
像所有编程语言一样,Python 会频繁更新。例如,从 Python 2.7 到 Python 3.0 的转变带来了一大堆特性和改进。这也意味着由于 Python 工作方式的变化,为 Python 2.7 编写的任何内容都需要为 Python 3.0 “重构”。
重构是指程序员调整代码库以响应环境变化的方式,例如语言版本的变化,或者只是以某种形式改进现有代码。如果不进行重构,从 Python 2.7 到 Python 3.0 的转变通常意味着 Python 2.7 的代码不再那么好,甚至根本不能正常工作。
这就是问题所在:编写原始 Python 代码的用户可能没有重构的专业知识。毕竟,他们通常是科学家——而不是经验丰富的程序员。当没有经验的程序员试图调整代码时,存在性能下降和错误潜入的真正风险——有时只有在出现边缘情况时才可见。当 Python 代码用于关键的、24/7 的目的(如科学分析)时,小错误成为主要问题。
重构也可能导致意外的性能下降。即使只是 5% 的性能损失,执行不佳的代码更新也会在昂贵的按使用付费的 HPC 平台上迅速产生更大的费用。
坚持使用旧 Python?这是更大的风险
如果您考虑调整代码所涉及的艰苦工作和风险,那么用户经常选择坚持使用旧版本的 Python 也就不足为奇了。在过时的 Python 版本上运行现有代码可以避免很多挑战,因为您不需要重构:您将代码保持原样。
通常,软件供应商会这样做——仅在发布新版本的软件产品时更新他们的软件以匹配新的 Python 版本。如果您购买了特定版本——例如在 Python 2.7 上运行,那么您就会陷入困境,无论如何您都需要继续运行 Python 2.7。
这听起来不是什么大问题,但是依靠过时的、不受支持的构建块来进行计算是 DevSecOps 的噩梦。新的漏洞会出现,而所需的补丁就不会出现。因此,依赖旧版本的编程语言会给您的计算环境带来巨大的风险。
它几乎没有选择——或者有吗?
负责任的做法是在需要时更新 Python 版本并编辑在其上运行的代码,但没有一种轻松的方法可以做到这一点。实际上,由于缺乏资源,重构通常无法完成,并可能带来代价高昂的后果。
非常需要一种更好的方法,这就是有趣的地方。我们刚刚描述的围绕 Python 版本的情况在计算世界中很常见。例如,组织通常会运行官方供应商支持不再涵盖的 Linux 操作系统版本,冒着安全漏洞不会被修补以确保关键应用程序不会中断的风险。
这也是语言更新以及其他 IT 基础设施的问题。但是,近年来,先进的修补解决方案允许公司扩展多个组件的通常支持生命周期,从整个操作系统到特定的关键共享库。在TuxCare,我们开发了几种解决方案,可将旧软件的安全、可靠运行扩展到供应商的生命周期结束后。
安全可靠地运行较旧的 Python 应用程序
如果语言版本也可以这样做呢?好吧,您现在可以期待在旧版本的 Python 上运行旧的 Python 代码——但没有它所带来的风险。没有弃用的语言结构——也没有漏洞。
换句话说,对语言版本(例如 Python)的扩展生命周期支持正在成为现实。您很快就能保证您的 Python 代码安全可靠,而无需重写一行代码,只需获得对 Python 的扩展生命周期支持——它为您提供与完整版本升级相同的安全保护。
