现在我想知道背后的原因是什么?因为当我使用./configure、make、make install | altinstall安装python2.5时,它会被安装到/usr/local/lib而不是/usr/lib。那么为什么Ubuntu添加了这些目录,我该如何安装python以便使用它们呢?
dpkg -S /path/to/XYZ
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
...
/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
...
看起来它们是您安装的某些包的意外产物。
使用的Python版本确定了查找已安装的Python包/模块的位置,而Ubuntu 9.10中的“系统版本”Python为2.6,因此几乎所有内容都应该使用它。如果您安装了python2.5包(或它作为其他某些软件的依赖项被安装),那么它将使用 /usr/lib/python2.5/*。尝试运行which python
和python --version
;还有which python2.6
和which python2.5
。
据我所知,尽管我不确定原因,但Debian(从中衍生出Ubuntu)使用dist-packages
命名方案,而不是site-packages
。
术语:Python具有软件包,而Debian(以及Ubuntu)具有软件包。它们不是相同类型的软件包,但单个Debian软件包将安装特定的Python软件包。
回答你的问题:当你从源代码安装软件包时,应该使用软件包的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 上实现了这个 dist-packages
,但是由于与 PYTHONUSERBASE
相关的代码有一个 bug,我遇到了问题。我们最后有点交流。我记得好像 dist-packages
的原因与强制用户在与 apt-get 不同的目录中安装包有关。但实际上,无论是用户还是 apt-get 都会将包安装到同一个目录中,所以我显然并不真正理解其动机。
lib-dynload
不是 Debian 特有的东西,它是 Python 自己安装的目录。我认为它只是一个包含模块实现共享库的目录。我不确定 Python 是否仍在使用它。% python -V
Python 2.6
% python2.4
python2.5
也可以运行Python 2.5。% sudo apt-get install python2.4 python2.5
如果您以前没有安装它们,这应该会添加它们。我的想法是,您可能有各种库来支持旧版本的Python,但您实际上没有这些旧版本的Ubuntu软件包。