gpt4 book ai didi

Python 安装,找不到 bz2 模块

转载 作者:太空狗 更新时间:2023-10-29 11:15:02 24 4
gpt4 key购买 nike

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

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

我从系统上绝对没有 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";导出 PYTHONPATH。仍然没有运气。

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

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

我在整个过程中都是 root,从 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 符号链接(symbolic link)那样创建指向 /usr/lib/python2 的事实。 7目录。但是我创建了符号链接(symbolic link),但还是不行。

我还是迷路了。

最佳答案

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

我在这里提交了另一个 Stack Overflow 问题,询问为什么我们找到了这个问题的解决方案: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我指定了,这导致我需要将默认值覆盖回默认值,这很奇怪。

关于Python 安装,找不到 bz2 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17608352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com