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

9

我尝试从源代码编译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
在某些系统上,which 是作为程序实现的,而不是 shell 内置的,并且可能无法告诉您 shell 实际运行的内容。最好查看任何命令告诉您 shell 的真正想法。对于 bash,该命令是 type。查看 help type 以获取更多信息。 - Mike DeSimone
@MikeDeSimone type python仍然得到相同的结果。 - mpang
它会告诉你路径是否已经被哈希(并且hash -r可以清除它)。你可能还想尝试type -a python,它将按顺序列出路径中的所有Python。 - Mike DeSimone
顺便提一下,你的编辑不太清楚:“./my/local/dir/bin/python”和“/my/local/dir/bin/python”这两个路径并不相同,除非你出于某种原因在根目录中。 “--prefix=/my/local/dir”对应于后者(绝对)路径。 - Mike DeSimone
显示剩余2条评论
3个回答

5

所以,这篇文章能够解决我的问题。引用源代码:

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


似乎需要执行 export LD_LIBRARY_PATH=. 才能使其正常工作。 - 0 _

2

记住,shell缓存二进制文件的位置而不是每次都在PATH中查找。

因此,如果您之前在同一个shell中运行过python,它仍将使用旧版本。

使用hash -r可以在不启动新shell的情况下解决此问题。


我尝试过了,但它没有起作用。我运行了 ./my/local/dir/bin/python --version,但它仍然显示 Python 2.7.3 - mpang

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接