【问题标题】:ubuntu9.10 : how to use python's lib-dynload and site-packages directories?ubuntu 9.10:如何使用 python lib-dynload 和 site-packages 目录?
【发布时间】:2010-12-16 13:02:44
【问题描述】:

在 ubuntu 9.10 中,usr/lib/ 中有 python2.4、python2.5、python2.6 和 python3.0 目录

实际上只有 python 2.6 可以工作。
python2.4只有一个lib-dynload目录,
python2.5只有lib-dynload和site-packages,
python3.0 只有一个 dist-packages 目录。

现在我想知道这背后的想法是什么? 因为当我使用 ./configure 安装 python2.5 时,make,make install |替代安装 这进入 usr/local/lib 而不是 usr/lib/ 那么为什么要在 tu ubuntu 中添加这些目录,我应该如何安装 python 来使用它们?

【问题讨论】:

    标签: python ubuntu installation


    【解决方案1】:

    我不确定您所说的“只有 python 2.6 实际工作”是什么意思。假设您运行“终端模拟器”并获得命令行提示。这是你的意思吗:

    % python -V
    Python 2.6
    

    换句话说,当你运行 Python 时,你得到的是 2.6 版?好吧,你试过这个吗:

    % python2.4
    

    如果您的系统上正确安装了 Python 2.4,它将运行。同样,python2.5 将运行 Python 2.5。

    如果这些不运行,这就是您所说的“只有 python 2.6 实际工作。”,那么要尝试的一件事是确保您确实为 Python 2.4 和 Python 2.5 安装了 Ubuntu 软件包。

    % sudo apt-get install python2.4 python2.5
    

    如果您之前没有安装它们,这应该添加它们。我的想法是,您可能有各种库来支持旧版本的 Python,但您没有这些旧版本的实际 Ubuntu 包。

    【讨论】:

    • 嗨史蒂夫哈,感谢您的回复。是的,您的解释就是我所说的“工作”和“sudo apt-get install python2.4 python2.5”将两个python版本安装在/usr/lib/中,并将正确的符号链接放在/usr/bin/中。所以现在我可以使用python2.4和python2.5来启动解释器并执行.py文件了。
    • 所以这回答了我问题的第二部分,通过解释如何将 python 安装到 /usr/lib/ 中。谢谢!
    【解决方案2】:

    对您的问题的简短回答:当您从源代码安装软件包时,您应该使用软件包的setup.py 安装程序来自动正确地安装它们。这个安装程序已经知道在哪里正确安装模块,以便 Python 可以找到它们。要使用,只需使用要使用包的确切 Python 解释器调用。

    setup.py 的速成课程。首先,使用您希望包可用的确切 Python 可执行文件运行它。如果你想使用带有/usr/bin/python2.5 的包,你应该使用/usr/bin/python2.5 来运行setup.py。其次,转到安装该包的setup.py 的目录。第三,您必须以 root 身份安装,因此以 root 身份进行整个安装是最简单的。第四,如果你想安装到多个 Python 解释器,你应该运行setup.py,但你应该在它们之间清理它。所以这就是我要做的:

    % cd /root/directory/of/untarred/source/package
    % sudo su
    # /path/to/first/python setup.py build install
    # rm -rf build
    # /path/to/second/python setup.py build install
    # rm -rf build
    # exit
    %
    

    如果您手动安装模块...您不应该,您应该使用它的setup.py。 (如果你写了一个新模块,你应该为它写一个setup.py。)如果你必须手动安装,你需要弄清楚每个安装到哪个目录是正确的Python,或者通过探索和实验,或者通过调用安装程序调用的相同库来确定正确的目录。使用distutils 的安装人员致电distutils.sysconfig.get_python_lib();使用setup_tools 的安装程序查看setup_tools.command.easy_install.easy_install.INSTALL_SCHEMES[os.name]["install_dir"]

    关于dist-packages:今年早些时候,我与 Debian 的 Python 包的维护者进行了交谈。他在 Ubuntu 9.04 获取的 beta 包中实现了这个 dist-packages,但是代码有一个错误 wrt wrt PYTHONUSERBASE 我绊倒了。我们聊了几句。 IIRC dist-packages 的原因与强制用户将软件包安装在与 apt-get 不同的目录中有关。不过,我显然并不真正理解动机,因为实际上用户和 apt-get 仍然安装到同一个目录中。

    lib-dynload 不是 Debian 的东西;那是 Python 本身安装的目录。我相信它只是一个用于实现模块的共享库的目录。我不确定 Python 是否还在使用它。

    最后,我不知道您所说的“只有 python2.6 实际工作”是什么意思。这些不同名称的目录“不起作用”怎么办?

    【讨论】:

    • 感谢哈利的解释,但我问的是安装 python 本身。事实证明,当从源代码构建时,它默认进入 /usr/local/lib/,当使用 apt-get install 安装时,它进入 /usr/lib/ 并使用那里已经存在的文件。我很欣赏你在构建其他包后自己清理的例子,这是我将开始养成的习惯。
    • 我想看看哈利的解释。
    【解决方案3】:

    j3ll3,在 Ubuntu(或任何基于 DPKG 的 Linux 操作系统)中,您可以通过键入

    来询问“提供什么软件包 XYZ”的问题
    dpkg -S /path/to/XYZ
    

    因此,例如,在 Ubuntu 9.10 中,

    dpkg -S /usr/lib/python2.5/lib-dynload/gdbm.so
    

    返回

    python-gdbm: /usr/lib/python2.5/lib-dynload/gdbm.so
    

    您可以通过键入了解更多关于 python-gdbm 包的信息

    apt-cache show python-gdbm
    

    它说 python-gdbm 提供“对 Python 的 GNU dbm 数据库支持”。 也许更有趣的是,如果你输入

    dpkg --listfiles python-gdbm
    

    您会看到 python-gdbm 安装的所有文件的列表:

    ...
    /usr/lib/python2.4
    /usr/lib/python2.4/lib-dynload
    /usr/lib/python2.4/lib-dynload/gdbm.so
    /usr/lib/python2.5
    /usr/lib/python2.5/lib-dynload
    /usr/lib/python2.5/lib-dynload/gdbm.so
    /usr/lib/python2.6
    /usr/lib/python2.6/lib-dynload
    /usr/lib/python2.6/lib-dynload/gdbm.so
    ...
    

    所以看起来这个单独的包安装了 3 个 .so 库,每个版本的 python 一个。

    Python2.6是Ubuntu 9.10默认的python版本,但也可以安装 python2.4、2.5 和/或 3.0。除非你这样做,否则只使用 /usr/lib/python2.6/lib-dynload/gdbm.so ,其他的只是在浪费空间。

    由于 python2.4、2.5、3.0 中不需要的文件不是很大,包维护者可能觉得为每个版本的 python 提供一个包而不是一个包更容易。

    但是,除非您知道如何修复未来的 apt-get 错误,否则我建议不要手动删除任何由 Ubuntu 中的软件包安装的文件。

    【讨论】:

    • 嗨~unutbu,这通过解释这些文件的来源回答了我问题的第一部分。太棒了!
    • 我的问题的第二部分由 steveha 回答。谢谢你们。
    【解决方案4】:

    听起来它们是您安装的某些软件包的意外。

    使用中的 Python 版本决定了搜索已安装 Python 包/模块的位置,而 Ubuntu 9.10 中 Python 的“系统版本”是 2.6,所以这实际上是所有东西都应该使用的。如果你要安装 python2.5 包(或者它被安装为其他东西的依赖项),那么它将使用 /usr/lib/python2.5/*。尝试运行which pythonpython --version;还有which python2.6which python2.5

    据我了解,虽然我完全不知道为什么,Debian(Ubuntu 是从它衍生而来的)使用dist-packages 命名方案而不是site-packages

    术语: Python 有软件包,而 Debian(以及 Ubuntu)也有软件包。它们不是同一种包,尽管个别 Debian 包会安装特定的 Python 包。

    【讨论】:

    • 嗨罗杰,感谢您抽出宝贵的时间。 “听起来它们是您安装的某些软件包造成的意外。”这些软件包已经存在于 ubuntu 9.10 的全新安装中,因此在我添加任何其他软件包之前。他们带着 ubuntu 来了。
    猜你喜欢
    • 2013-01-30
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2017-04-25
    • 2014-11-01
    • 2016-03-28
    相关资源
    最近更新 更多