【问题标题】:Python installation, failing to find bz2 modulePython安装,找不到bz2模块
【发布时间】:2013-07-10 14:36:43
【问题描述】:

好的,我有一个旧的 Debian 虚拟机。包管理器是无用的。不,我不会更新操作系统。

我在我的系统上正确安装了 bzip2 库和开发头文件(它们实际上来自一个包)。

我从系统上绝对没有 Python 开始。我手动删除了所有内容。我下载了 Python 2.7.5 源代码,并配置了./configure --prefix=/usr。它配置得很好。我运行make,它编译得很好。我尝试./python -c "import bz2; print bz2.__doc__",它有效,并说:

python bz2 模块为 bz2 压缩库。它实现了一个完整的文件 接口,一枪(解)压缩功能,和类型 顺序(解)压缩。

然后我运行make test,整个测试套件进展顺利,尤其是“test_bz2”测试通过。

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

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

Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 ImportError: 没有名为 bz2 的模块

我尝试了很多不同的方法,包括将 Python 构建为 --enable-shared,但没有,运气不好。我已经尝试了至少 10 次(每次完全清除所有内容,运行 make distclean 等)。没有运气。

我试过了:PYTHONPATH="/usr/lib/python2.7"; export PYTHONPATH。还是没有运气。

但是,如果我删除 make install 为 /usr/bin/python 创建的符号链接,改为:ln -s /path/to/my/python/compile/python python,现在它神奇地起作用了。

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

configuremake再到make install到尝试测试Python导入调用,我都是root。

我又从头开始了(这次是用--enable-shared btw 编译),并验证不仅在编译目录中有build/lib.linux-x86_64-2.7/bz2.so,而且一旦我运行make install,该文件就会被放入@987654338 @。

我尝试阅读 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 目录的事实有关。但是我创建了符号链接,但还是不行。

我还是迷路了。

【问题讨论】:

  • 您需要是 root 才能执行 make install。你检查了吗?
  • configuremakemake install到尝试测试python导入调用,我都是root。
  • debian 有 lib64 和 lib 吗?有时事情被放在错误的地方,你需要符号链接...(虽然听起来不像是这样,抱歉)。
  • 您在 SO 上尝试过ldd 吗?
  • 另一个随机猜测 - selinux 没有启用是吗?

标签: python linux python-2.7


【解决方案1】:

似乎是通过一长串 Twitter 对话意外得出了一种无答案的答案。

我在这里提出了另一个 StackOverflow 问题,问为什么我们找到了解决这个问题的方法:https://stackoverflow.com/questions/17662091/python-installation-prefix-not-being-persisted-in-config

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

运行 python-config --prefix 显示 {prefix} 默认值实际上是 /usr/bin,而不是像我指定的 /usr,这导致我需要将默认值覆盖回默认值,这很奇怪。

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2019-11-14
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2019-11-28
    相关资源
    最近更新 更多