首页 > 解决方案 > 由于 python 版本不匹配(3.8.5 与 3.8.6)导致包含 python 模块的问题

问题描述

问题背景:

问题

升级到 20.04 后,我遇到了一些不匹配的 python 版本(3.8.5 与 3.8.6)的问题,所以我已经从 /usr/local/bin 中删除(我可以恢复它)手动安装的 python 3.8.6。它部分地解决了这个问题。现在

$ which python3
/usr/bin/python3
$ /usr/bin/python3 --version
Python 3.8.5
$ which python3.8
/usr/bin/python3.8
$ /usr/bin/python3.8 --version
Python 3.8.5

然而,当使用使用 python 3.8 的插件运行 vim 时,我看到加载 python 模块的问题,例如:

 Traceback (most recent call last):
  File "/usr/lib/python3.8/subprocess.py", line 64, in <module>
    import msvcrt

或更少冗长:

YouCompleteMe unavailable: No module named '_socket'

vim 中还有什么:

:py3 print( __import__( 'sys' ).version )

结果:

3.8.6 (default, Nov  2 2020, 13:09:31)  
[GCC 5.4.0 20160609]

这表明 python3.8.6 和 python3.8.5 存在问题

我绑定的内容:

感谢任何提示。摆脱手动安装的 python 3.8.6 可能会完成这项工作,但不确定是否可行。此外,通过 apt remove 删除 python3(再次从头开始安装)可能是不可能的,因为我只有远程 ssh 访问该机器并预计会出现一些问题。

标签: pythonpython-3.xubuntuubuntu-20.04

解决方案


正如预期的那样,问题与 python 3.8.6(从源代码安装)与 python 3.8.5(默认情况下与 ubuntu20.04 一起提供)有关。

# ldd /usr/bin/vim | grep python
libpython3.8.so.1.0 => /usr/local/lib/libpython3.8.so.1.0 (0x00007f1ef9212000)

这是在手动构建期间安装的库,并指向 python 3.8.6,而所有 vim 插件都是使用默认的 python 3.8.5 构建的。后

sudo mv /usr/local/lib/libpython3.8.so.1.0 /usr/local/lib/temp-libpython3.8.so.1.0

使用的库指向:

ldd /usr/bin/vim | grep python
    libpython3.8.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.8.so.1.0 (0x00007fa50896e000)

这解决了这个问题。此外,现在在 vim 中,我可以看到使用了 python 3.8.5 而不是 3.8.6:

:py3 print( __import__( 'sys' ).version )
3.8.5 (default, Jul 28 2020, 12:59:40)  
[GCC 9.3.0]

推荐阅读