如何在Python中构建和安装C语言库

359 阅读5分钟

在Python中,C语言(以及不太常见的Fortran语言)库是一个必要的恶魔,因为它们大大加快了计算密集型程序的速度,例如数学计算。这使得它们对于数据分析和机器学习包来说是不可或缺的,从TensorFlow到NumPy到Scikit-Learn。

幸运的是,大多数Python包都是 "纯Python",这意味着它们不依赖用不同语言编写的外部库。你可以通过简单地运行 *pip install *来轻松地安装它们 。然而,在安装并试图运行像Pillow这样的软件包后,你可能会得到一个错误,比如。

x86_64-linux-gnu-gcc: error: build/temp.linux-x86_64-3.4/libImaging/Jpeg2KDecode.o:没有这样的文件或目录

这是因为Pillow是那些需要C库才能运行的Python包之一,而你的系统正试图从源代码构建缺少的C文件。但是在安装Python时,创建一个本地构建环境通常不是标准过程的一部分,那么发生了什么呢?

现在,包含 C 代码的 Python 包的开发者通常为大多数流行的操作系统 (OS) 构建一个预编译的二进制轮子,然后通过 Python 包索引 (PyPI) 提供二进制文件。这样,当你运行 *pip install *时, pip 可以为你的平台选择合适的预编译轮子,并同时安装 Python 代码和所需的 C 库 。

虽然安装预编译轮子是一个方便的捷径,但它们引起了两个问题。

  • 可用性 - 不幸的是,并不是所有的软件包都为所有的平台预编译过。如果你的平台不支持,你就需要自己构建C库。
  • 安全性 - PyPI并没有对他们提供的软件包的安全性提供保证。对于纯Python软件包,你至少可以选择阅读代码,看看他们在做什么,但预编译的二进制文件需要其他方法来确定它们是否包含恶意软件。使用时要注意。

这篇博文旨在帮助您了解在管理与 Python 部署相关的 C 库时的选择,以及在您需要自己构建 Python 包时介绍的选择。

为 Python 创建构建环境

与 Python 包相关的 C 和/或 Fortran 代码通常分布在包的源代码存档中,你需要单独下载和安装。但是在使用软件包之前,你还需要为你的操作系统构建源代码,这意味着你需要在你的本地系统上创建一个适当的构建环境,其中包括。

  • Python 开发头文件
  • 一个适用于你的操作系统的 C 和/或 Fortran 编译器
  • 构建自动化工具
  • 每个要构建的软件包的构建脚本
  • 你的操作系统的安装程序/打包程序

虽然这种设置很方便,但它也有一些缺点。比如说。

  • 这个过程倾向于创建一次性的、不可重复的构建,这意味着要验证软件包是否安全地构建是非常困难的。
  • 环境将需要维护和更新,以便你能在新的更新发布时重建软件包。
  • 该软件包只为你的操作系统构建。如果你的团队其他成员在不同的操作系统上工作,他们需要在他们的机器上经历同样的过程,导致重复性的工作。

由于最后一点,组织通常将构建过程集中在一个团队中,由该团队构建所有团队需要的Python工件。这种方法有它自己的一套任务和要求,包括。

  • 创建三个不同的基于虚拟机或容器的构建环境--一个用于Windows、Mac和Linux--以支持在他们选择的操作系统上工作的团队(假设你的构建工程师在这三个操作系统上都有专业知识)。
  • 根据需要,为32位和64位构建创建构建脚本。
  • 实施CI/CD流程,以可重复的方式构建和验证工件,确保安全构建。

如果所有这些听起来像大量的工作,要建立和维护,然后随着漏洞的发现和新版本的发布,重建每个项目所需的包,你会是正确的。幸运的是,有一个更好的方法。

从源代码自动构建Python

ActiveState平台提供了一个基于云的安全构建服务,从源代码自动构建Python包,包括任何链接的C和Fortran库。因此,ActiveState Platform。

  • 维护自己的数十万Python包的源代码目录,并每24-48小时更新一次目录。
  • 维护自己的构建脚本目录,因此它了解如何构建每个包及其依赖项,以及以何种顺序。
  • 自动启动一个基于容器的构建环境,该环境拥有为目标操作系统构建软件包的所有必要组件,无论是Windows、Mac还是Linux,或者所有这三种操作系统。
  • 自动为目标操作系统打包生成的运行环境。
  • 可选择通过我们的托管工件库提供所构建的Python轮子,在那里开发者可以 "管道安装 "它们。

它以一种安全、可重复的方式完成这一切,所以你可以确信它产生的工件是值得信赖的。 你不需要有操作系统的专业知识,甚至不需要有Python的经验,就能够从源头上安全地构建你的团队所需的所有软件包。

看看它是如何工作的。

接下来的步骤。

这里显示的功能也可以作为管理服务提供,使你的开发人员能够专注于编码,使你的产品更快地进入市场。了解更多关于我们的托管构建服务。

联系销售

继续阅读。