更改 Python 的默认版本会破坏 Ubuntu 20.04

Mos*_*she 6 ubuntu alternatives python3

我正在创建Ubuntu 20.04的 AMI (Focal Fossa),并且我希望默认的 Python 版本为 3.6。

我安装了 Python 3.6,也是正确的 pip,然后像这样设置替代方案:

update-alternatives --install \
  /usr/bin/python3 \
  python3 \
  /usr/bin/python3.6 \
  10
Run Code Online (Sandbox Code Playgroud)

但是后来我遇到了许多与CPython包相关的问题,例如python3-apt(apt_pkg, apt_inst),netifaces,可能还有更多我还没有发现。

它们都位于/usr/lib/python3/dist-packages并且包名称采用以下格式:

{name}.cpython-38-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为 Ubuntu 20.04 的默认 Python 版本是 Python 3.8。

谷歌搜索的直接解决方案是像这样链接名称:

ln -s {name}.cpython-38-x86_64-linux-gnu.so {name}.so
Run Code Online (Sandbox Code Playgroud)

IE:

ln -s apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so
ln -s netifaces.cpython-38-x86_64-linux-gnu.so netifaces.so
Run Code Online (Sandbox Code Playgroud)

我尝试apt install --reinstall python3-apt在默认 Python 版本为 3.6 时重新安装相关的包 ( ),但它不起作用,而这种链接的解决方案*.so文件的不可扩展!

有没有办法让 Python 3.6 与系统的默认 CPython 包一起工作?

Ste*_*itt 11

正如你所发现的,系统确实依赖于系统预期的 Python版本。如果你真的想要一个带有 Python 3.6 的系统,你最好的办法是找到一个使用 Python 3.6 的(理想情况下,仍然受支持)版本:在你的情况下,Ubuntu 18.04。

如果您想为在您的 AMI 上运行的程序提供 Python 3.6,您可以考虑使用虚拟环境而不是替换系统 Python。pyenv是一个很好的起点。


Cbh*_*ihe 7

像管理您附近的物理机器一样管理云上任何机器的环境。如果您使用 Ubuntu 20.x 并且您的默认 Python 安装是 3.8,但您需要 Python v3.6,请根据需要安装虚拟环境。你可以用pyenv. 您目前正在做的是在慢动作中破坏您的默认 Python 安装,这将对那台机器上的无数软件包(基于云的与否)产生所有不利影响。

我添加了一个我写的关于 Python 环境虚拟化的教程,以防万一(特别是在pyenv)。