“/usr/lib/python”和“/usr/lib64/python”有什么区别?

14

我正在使用Ubuntu操作系统。

我发现许多安装的Python库都同时存在于/usr/lib/python/usr/lib64/python中。

当我打印一个模块对象时,模块路径显示该模块存在于/usr/lib/python中。

那么,为什么我们需要/usr/lib64/python目录呢?这两个目录有什么区别?

顺便说一句:

一些包管理脚本和egg-info文件同时存在于这两个目录中,实际上它们是/usr/share中软链接的包。

大多数Python模块只是链接,但so文件不是。

2个回答

14

Debian(以及它的衍生版,特别是Ubuntu)将 /usr/lib 用于两种架构。/usr/lib64 作为符号链接提供给 /usr/lib 以保持兼容性。一些新的应用程序可能会查找 /usr/lib64 中的库文件,而一些旧代码可能会使用 /usr/lib。其他发行版可以提供多架构支持,在同一台机器上安装 32 位和 64 位库,然后分别放置在 /usr/lib 和 /usr/lib64 中。这样做的一个例子是 Arch Linux,在此处描述

有些 Python 库无论如何都是跨平台的(.py 代码),因此创建一个单独的包供两种架构使用可以最小化维护工作量。这个包将安装自己在 lib 和 lib64 两个目录中,或者,正如您已经指出的那样,安装在一个单独的目录中,并从 lib 和 lib64 两个目录中进行符号链接。


这就是为什么我说“大多数”;) 我同意,第二段有点毫无意义。 - niko
我已经更新了答案,改为使用“一些”,这也应该包括那些没有安装5个纯Python库的情况 :) - niko

3

64位版本的库是什么?

您正在运行哪个版本的Python?如果您正在运行32位版本,则可能不需要这些文件。


@Satoru.Logic 所以你很有可能安装了Python的32位和64位版本。 - Levon
@Satoru.Logic 请查看这个关于如何检测你正在运行的 Python 版本(32位还是64位)的 SO 问题:http://stackoverflow.com/questions/11333991/determine-if-python-is-running-as-32-or-64-bit - Levon
2
好的,如果有单独的.so文件,您可以检查lib和lib64文件是否实际上是32位和64位库(我相信“file”命令会告诉您这一点,这比使用elftools等更简单)。如果是这样,那么这个答案就正确了99%。如果您永远不想运行64位Python,您可以将它们删除。 - abarnert
1
哎呀...实际上,有一个潜在的问题。如果你想构建和安装依赖于现有模块的新模块,它们可能会看到“啊哈,他既有32位又有64位,我最好两种方式都构建”,然后构建可能会失败,因为64位构建依赖于一个不再存在的.so文件...更重要的是,你真的需要回收空间吗?我在任何一台机器上拥有的最大的Python库是27MB,那是Mac fat二进制文件(正常大小的两倍),安装了大量额外的东西。我记不得27MB什么时候对我的磁盘空间造成了明显的影响,即使是在我的手机上... - abarnert
@Levon 我会点赞abarnert的评论,因为那些可能会帮助像我这样的人。 - satoru
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接