我正在创建一个 AMI乌班图20.04(Focal Fossa),我希望默认的 Python 版本为 3.6。
我安装了 Python 3.6,也是正确的 pip,然后像这样设置替代方案:
update-alternatives --install \
/usr/bin/python3 \
python3 \
/usr/bin/python3.6 \
10
但后来我遇到了许多与以下相关的问题CPython软件包,例如python3-apt
(apt_pkg, apt_inst), netifaces
,以及可能还有更多我还没有发现的软件包。
它们都位于/usr/lib/python3/dist-packages
并且包名称采用以下格式:
{name}.cpython-38-x86_64-linux-gnu.so
这是有道理的,因为 Ubuntu 20.04 的默认 Python 版本是 Python 3.8。
谷歌搜索的直接解决方案是像这样链接名称:
ln -s {name}.cpython-38-x86_64-linux-gnu.so {name}.so
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
我尝试在默认Python版本为3.6时重新安装相关包(apt install --reinstall python3-apt
),但没有成功,而且这种链接文件的解决方案*.so
不可扩展!
有没有办法让Python 3.6与系统默认的CPython包一起工作?
答案1
正如您所发现的,系统确实依赖于系统Python 的版本与预期一致。如果您确实想要一个带有 Python 3.6 的系统,那么最好的选择是找到一个使用 Python 3.6 的(理想情况下仍然受支持的)版本:在您的情况下,Ubuntu 18.04。
如果您想为 AMI 上运行的程序提供 Python 3.6,您可以考虑使用虚拟环境,而不是替换系统 Python。pyenv是一个很好的起点。
答案2
像管理您附近的物理机一样管理云上任何计算机的环境。如果您使用 Ubuntu 20.x 并且默认安装的 Python 版本是 3.8,但您需要 Python v3.6,请根据需要安装虚拟环境。你可以用 来做到这一点pyenv
。您目前正在做的事情是缓慢地破坏您的默认 Python 安装,这将对该计算机上的无数软件包(基于云或非云)产生所有不利影响。
我添加一个教程如果您感兴趣的话,我写过有关 Python 环境虚拟化的文章(特别是在 参考资料pyenv
)。