为什么XXX-dev(或XXX-devel)的源代码没有发布?

为什么XXX-dev(或XXX-devel)的源代码没有发布?

当我尝试在旧的 Linux 服务器上安装最新版本的软件时(我没有 root 权限),有时需要 XXX-dev 或 XXX-devel 包,其中 XXX 是某个库的名称。例如,在CentOS中安装Python 3.7.4需要预安装libffi-devel。通过yumapt需要 root 权限安装 XXX-dev 。分发 XXX 和 XXX-dev 的源代码听起来是一个好方法,可以让普通用户轻松安装各种软件。

那么,我的问题是为什么 XXX-dev 的源代码没有分发?有正当理由吗?

答案1

为什么XXX-dev的源代码没有发布?

因为您不需要或不想编译您在编译 Python 的 ffi 代码时使用的每个库。你想使用共享对象文件,(Windows 的等效项是 DLL)动态链接到您想要的库。事实上,正如另一个答案所暗示的那样,源代码是可用的。但这不是构建 Python 的 ffi 所需的。你需要标头共享对象文件

yum通过或apt需要 root 权限安装 XXX-dev 。

这并不是因为他们不安装源代码;而是因为他们不安装源代码。这是因为它们在系统级别运行。您不需要安装源代码,但您需要具备以下条件:

  • XXX, 这编译的库的共享对象文件
  • XXX-dev,源代码标头在库中定义函数,以便可以在代码中使用它们,但可以动态链接。

它们不必位于 root 拥有的位置,但它们需要位于编译器/链接器/构建工具链能够找到的位置。无论您是否从源代码构建它们,都是如此。但是,将构建过程的所有小部分设置得恰到好处并不是一件容易的事,这就是发行版为您做这件事的原因。

不幸的是,这是 Python 的常见场景,它大量借鉴了 C 方面的知识,但依赖操作系统来提供这些库作为标准构建过程的一部分。也许可以说服 Python 在用户拥有的位置使用构建组件。我不知道怎么办。我建议你不要以此为目标,而是找到一种方法来解决“你需要安装库但没有权限”的问题:

  • 容器技术允许进程使用不同的用户空间文件系统,但您的管理员可能不愿意为您提供该访问权限
  • 请您的管理员安装您需要的每个软件包
  • 使用不同的系统进行开发,您可以在其中安装所需的软件包
  • 使用与系统库关系更健全的语言(Golang 通常不会遇到这个问题,因为它的库通常作为 Golang 源代码分发,整个构建过程更加现代并且无需 root 权限即可运行)

答案2

源码-dev-devel分散式;它包含在相应源码包的源代码中。对于libffi-develCentOS,请参阅RPM libffigit 存储库,以及相应的源存档上游libffi配送站点

相关内容