ubuntu9.10:如何使用python的lib dynload和site packages目录?

2024-04-25 11:22:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

只有Python2.6可以工作。
python2.4只有一个lib dynload目录,
python2.5只有lib dynload和site包,
python3.0只有一个dist packages目录。

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


Tags: install目录makeubuntuconfigurelibpackagesusr
3条回答

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

dpkg -S /path/to/XYZ

例如,在Ubuntu9.10中

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

回报

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

您可以通过键入

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个库,每个版本的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中由软件包安装的任何文件。

听起来像是你安装的某个软件包的意外。

使用中的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包。

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

setup.py的速成课程。首先,使用希望包可用的Python可执行文件运行它。如果要将包与/usr/bin/python2.5一起使用,则应使用/usr/bin/python2.5运行setup.py。其次,转到安装包setup.py的目录。第三,必须作为根安装,所以将整个tihng作为根安装是最容易的。第四,如果要安装到多个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包的维护人员进行了一次对话。他在Ubuntu9.04的beta包中实现了这个功能,但是代码有个错误,我绊倒了。我们最后聊了一会儿。IIRC dist-packages的原因与强迫用户在apt get的不同目录中安装软件包有关。不过,我显然并不真正理解其动机,因为实际上,用户和apt-get仍然安装在同一个目录中。

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

最后,我不知道你所说的“只有Python2.6能工作”是什么意思。这些命名不同的目录“不起作用”呢?

相关问题 更多 >