由于 python 版本不匹配(3.8.5 与 3.8.6)导致包含 python 模块时出现问题

Problem with including python modules due to python version mismatch (3.8.5 vs 3.8.6)

问题背景:

问题

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

$ 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

尽管如此,当 运行 vim 使用使用 python 3.8 的插件时,我看到加载 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 访问该机器并预计会出现一些问题。

预期的问题与 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]