编译的 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 二进制报告版本错误的主要内容,如果未能解决你的问题,请参考以下文章