ubuntu9.10:如何使用python的lib-dynload和site-packages目录?
在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、make和make install | altinstall安装python2.5时,它会被放到usr/local/lib而不是usr/lib,那这些文件夹为什么会出现在ubuntu里呢?我应该怎么安装python才能使用它们呢?
4 个回答
我不太明白你说的“只有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软件包。
听起来这些问题可能是你安装的一些软件包引起的。
你使用的Python版本决定了系统会在哪些地方查找已安装的Python软件包或模块。在Ubuntu 9.10中,系统自带的Python版本是2.6,所以大多数东西都应该使用这个版本。如果你安装了python2.5这个软件包(或者它作为其他软件的依赖被安装),那么系统就会使用/usr/lib/python2.5/*这个路径。你可以试着运行 which python
和 python --version
来查看当前使用的Python版本;同时也可以运行 which python2.6
和 which python2.5
来检查这两个版本的位置。
根据我的理解,虽然我不太确定具体原因,Debian(Ubuntu的基础)使用的是 dist-packages
这种命名方式,而不是 site-packages
。
术语解释:Python有软件包,而Debian(以及Ubuntu)也有软件包。不过它们并不是同一种类型的包,虽然单独的Debian软件包会安装特定的Python软件包。
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都有一个。
在Ubuntu 9.10中,Python2.6是默认的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中由软件包安装的任何文件。