AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 60619
Accepted
Weiwei
Weiwei
Asked: 2009-08-31 16:25:33 +0800 CST2009-08-31 16:25:33 +0800 CST 2009-08-31 16:25:33 +0800 CST

fedora /usr/lib 与 /usr/lib64

  • 772

看来我有两个 python2.6 文件夹分别位于 /usr/lib vs /usr/lib64 。大多数 python 东西(源代码)在 /usr/lib64/python2.6 中,但是在安装的包中它们被放入 /usr/lib/python2.6

当请求 python 时,系统如何决定去哪个目录,以及它如何找到我安装的打包的?

fedora
  • 2 2 个回答
  • 8714 Views

2 个回答

  • Voted
  1. user9939
    2009-11-28T00:28:18+08:002009-11-28T00:28:18+08:00

    这个简单的答案是,在没有任何 C/native 扩展的情况下构建的包应该在 lib 下结束,任何具有原生扩展的包都将在 multilib 系统上的 lib64 下结束。至于它如何找到包含在 sys.path 中的软件包 - 这是来自 x86_64 F-11 系统:

    >>> import sys
    >>> for pth in sys.path: print pth
    ... 
    
    /usr/lib64/python26.zip
    /usr/lib64/python2.6
    /usr/lib64/python2.6/plat-linux2
    /usr/lib64/python2.6/lib-tk
    /usr/lib64/python2.6/lib-old
    /usr/lib64/python2.6/lib-dynload
    /usr/lib64/python2.6/site-packages
    /usr/lib64/python2.6/site-packages/Numeric
    /usr/lib64/python2.6/site-packages/gst-0.10
    /usr/lib64/python2.6/site-packages/gtk-2.0
    /usr/lib/python2.6/site-packages
    

    关于包如何到达那里的更详细的答案需要对 python 在其自身布局方面的工作方式有所了解。我们感兴趣的是名为distutils的标准库的一部分。这是主力,请注意,在此基础上还构建了一些工具(setuptools)和一个名为distribute的分支,目前试图改进python打包。

    Fedora 适用于在这里谈论的一个重要补丁,它使所有这些工作:

    • python-2.6-lib64.patch

    此补丁有条件地应用于lib 目录为 lib64 的架构上的 python的 RPM规范:

    如果我们看一下 distutils 是如何修补的:

    diff -up Python-2.6/Lib/distutils/sysconfig.py.lib64 Python-2.6/Lib/distutils/sysconfig.py
    --- Python-2.6/Lib/distutils/sysconfig.py.lib64 2008-06-05 08:58:24.000000000 -0400
    +++ Python-2.6/Lib/distutils/sysconfig.py   2008-11-24 02:34:04.000000000 -0500
    @@ -115,8 +115,12 @@ def get_python_lib(plat_specific=0, stan
             prefix = plat_specific and EXEC_PREFIX or PREFIX
    
         if os.name == "posix":
    +        if plat_specific or standard_lib:
    +            lib = "lib64"
    +        else:
    +            lib = "lib"
             libpython = os.path.join(prefix,
    -                                 "lib", "python" + get_python_version())
    +                                 lib, "python" + get_python_version())
             if standard_lib:
                 return libpython
             else:
    

    我们现在对 distutils 有一个条件,distutils.sysconfig.get_python_lib()当我们询问特定平台或系统包时,它现在会更改返回的内容。您可以尝试在 python 解释器中使用各种选项调用它:

    这个函数在 distutils 中使用——我们可以从文档字符串中看到它的作用:

    Docstring:
        Return the directory containing the Python library (standard or
        site additions).
    
        If 'plat_specific' is true, return the directory containing
        platform-specific modules, i.e. any module from a non-pure-Python
        module distribution; otherwise, return the platform-shared library
        directory.  If 'standard_lib' is true, return the directory
        containing standard Python library modules; otherwise, return the
        directory for site-specific modules.
    
        If 'prefix' is supplied, use it instead of sys.prefix or
        sys.exec_prefix -- i.e., ignore 'plat_specific'.
    

    因此,当使用 distutils(或在其之上构建的层)构建 python 包时,我们会在某个时候询问系统配置文件放置的正确位置,具体取决于它是系统库还是平台库。将进入 lib64,否则它将进入 lib。

    如果您查看Fedora Python 打包文档或使用 fedora rpmdev 工具创建骨架 python 规范rpmdev-newspec python-foo,您将看到有关 Fedora 如何基于调用此函数为 rpm 构建设置变量的详细注释。

    • 7
  2. Best Answer
    DisabledLeopard
    2009-08-31T16:48:00+08:002009-08-31T16:48:00+08:00

    安装到 /usr/lib64 的任何源都应该来自安装 src 或 devel 包,默认情况下,这些包由您的体系结构选择。

    /usr/lib 应该只有 32 位库 - 同样 /usr/lib64 应该是 64 位版本。我发现 yum 偶尔会同时安装某些库的 32 位和 64 位版本,并且还有一些库尚未移植到 64 位,所以如果您的特定应用程序或库已安装到 /usr/lib,那么它的可能性就是要么只是为了满足一些仅 32 位的应用程序依赖,要么是 yum 搞砸了。

    • 1

相关问题

  • 将 Fedora 用于服务器有什么问题?

  • /usr/bin/ld: 找不到 -lssl

  • Ubuntu、Fedora、openSUSE 对比

  • Fedora 11 上的 DNS 服务器

  • 在 VM 中运行 Fedora 目录服务器

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve