2013-07-12 146 views
3

好吧,我有一个旧的Debian虚拟机。软件包管理员没用。不,我不打算更新操作系统。Python安装,找不到bz2模块

我的系统上正确安装了bzip2库和开发包(实际上来自包)。

我从系统上绝对没有使用Python开始。我手动删除了一切。我下载了Python 2.7.5源代码,并配置了./configure --prefix=/usr。它配置很好。我跑make,它编译得很好。我尝试./python -c "import bz2; print bz2.__doc__",它的工作原理,并说:

The python bz2 module provides a comprehensive interface for the bz2 compression library. It implements a complete file interface, one shot (de)compression functions, and types for sequential (de)compression.

我然后运行make test和整个测试套件的进行罚款,特别是“test_bz2”测试通过。

然后我运行make install,它将我的新Python二进制文件安装到我想要的/ usr/bin /中。

我尝试/usr/bin/python -c "import bz2; print bz2.__doc__",它失败:

Traceback (most recent call last): File "", line 1, in ImportError: No module named bz2

我已经尝试了一堆不同的东西,包括建筑Python作为--enable-shared不,没有运气。我已经尝试了至少10次(每次完全清理所有内容,运行make distclean等)。没有运气。

我试过了:PYTHONPATH="/usr/lib/python2.7"; export PYTHONPATH。仍然没有运气。但是,如果我删除了为/ usr/bin/python创建的符号链接make install,而代之以:ln -s /path/to/my/python/compile/python python,现在它神奇地工作。

那么,到底什么?为什么创建的Python二进制文件只能在编译目录中存在二进制文件时才能找到内容,而不是当它放入正常的生产安装位置?我错过了什么?

我在整个过程中从configuremakemake install尝试测试Python导入调用。

我都从头重新开始(这次--enable-shared BTW编译),并验证不仅在编译目录有build/lib.linux-x86_64-2.7/bz2.so,但一旦我运行make install,该文件被放入/usr/lib/python2.7/lib-dynload/bz2.so

我试着在lib-dynload上做一些阅读,但一直未能确定是否还有其他的Python程序(比如CLI的默认配置或其他)需要能够告诉它从lib-dynload中取出模块导入,或者是否有其他位置或选项告诉make install它应该将它放在哪里而不是dynload。

直到现在我还没有解释为什么/path/to/compilation/python二进制可以查找和加载bz2.so罚款,但/usr/bin/python二进制无法找到(或负载)/usr/lib/python2.7/lib-dynload/bz2.so

我想也许这是因为安装不像/usr/lib/python符号链接指向/usr/lib/python2.7目录这样的事实。但是我创建了符号链接,但仍然没有去。

我依然迷失在这里。

+0

你需要做root * make install *。你检查过吗? – z8po

+0

我在整个过程中都是root,从'configure'到'make'到'make install'尝试测试python import调用。 –

+0

确实debian有lib64以及lib吗?有时候事情会被放在错误的地方,你需要符号链接...(尽管tbh听起来不像是发生了什么,对不起)。 –

回答

2

看来,某种无回答的答案是偶然通过一串长长的Twitter对话而得到的。

我提起这里的另一个堆栈溢出 问题要问,为什么我们所发现的是解决这个问题:https://stackoverflow.com/questions/17662091/python-installation-prefix-not-being-persisted-in-config

为子孙后代着想,现在的解决方案是,我必须设置PYTHONHOME环境变量到/usr,一切开始工作。令人费解的部分是文档说PYTHONHOME应该默认为{prefix},在配置为/usr期间,我明确将其设置为默认值。那么为什么我需要手动设置呢?

运行python-config --prefix显示,{}前缀默认其实/usr/bin,NOT /usr就像我指定的,这导致我需要覆盖默认返回到默认,怪异。

+0

呵呵。感谢更新。我的同情心...... –