编译的 Python 二进制报告版本错误

Posted

技术标签:

【中文标题】编译的 Python 二进制报告版本错误【英文标题】:Compiled Python binary reports wrong version 【发布时间】:2015-09-30 11:17:42 【问题描述】:

我尝试从源代码编译 Python 2.7。这是我的命令:

./configure --prefix=/my/local/dir --exec-prefix=/my/local/dir --enable-shared --with-pydebug
make
make install

which python的输出是/my/local/dir/bin/python,是正确的。

但是当我运行python --version 时,我看到的是Python 2.7.3 而不是Python 2.7.10

Python的系统版本是2.7.3。会不会是 Python 的系统版本以某种方式将自身与本地编译版本联系起来?还是我做错了什么?

编辑:

./my/local/dir/bin/python --version 的输出也是Python 2.7.3

编辑 2:

似乎如果我去掉 --enable-shared 标志,它将生成正确版本的 Python,但我需要该标志才能让我的其他软件工作。

【问题讨论】:

如果你运行/my/local/dir/bin/python --version会发生什么?如果这种情况是正确的,那么你的 shell 只是缓存了python 的位置,正如 o11c 提到的那样。 @Laogeodritt 输出还是Python 2.7.3 在某些系统上,which 是作为程序实现的,而不是内置的 shell,并且可能不会告诉您 shell 将真正运行什么。最好查看告诉您 shell 真正想法的任何命令。对于bash,该命令是type。查看help type了解更多信息。 @MikeDeSimone type python 仍然给出相同的结果 它会告诉你路径是否被散列(hash -r 会清除它)。您可能还想尝试type -a python,它将按顺序列出所有路径上的蟒蛇。 【参考方案1】:

您可能需要更改PYTHONHOME环境变量,以便它使用新版本:

export PYTHONHOME=/my/local/dir/

https://docs.python.org/2/using/cmdline.html#envvar-PYTHONHOME

*如果您想让更改永久生效,请考虑将其添加到您的 shell 配置文件中。

【讨论】:

【参考方案2】:

请记住,shell 会缓存二进制文件的位置,而不是每次都查看 PATH

所以,如果你之前在同一个 shell 中运行过python,它仍然会使用旧版本。

使用hash -r 解决此问题,而无需启动新的 shell。

【讨论】:

我试过了,没用。我运行./my/local/dir/bin/python --version,它仍然给出Python 2.7.3【参考方案3】:

所以this post 能够解决我的问题。引用来源:

如果您尝试从其构建目录运行 --enable-shared python 可执行文件,您需要告诉动态加载器在哪里可以找到共享库,即构建目录本身。一种方法是使用 LD_LIBRARY_PATH 环境变量。否则,动态加载器将搜索标准路径,如 /usr/local/lib/ 和 /usr/lib/ 以查找具有正确名称的共享库(如 libpython2.7.so.1.0)。如果已经使用该名称安装了较旧的 Python,并且 ABI 没有发生太大变化,那么您可能很幸运,它会加载并运行。

【讨论】:

似乎需要export LD_LIBRARY_PATH=. 才能完成这项工作。

以上是关于编译的 Python 二进制报告版本错误的主要内容,如果未能解决你的问题,请参考以下文章

错误 ITMS-90680:您上传的二进制文件无效

“模块是用不兼容的 Kotlin 版本编译的。其元数据的二进制版本是 1.5.1,预期版本是 1.1.16”

python-执行过程

linux下 python 编译pyc 运行错误

python 学习之数据类型

Python基础知识之pyc是什么鬼