我最近开始使用elementary OS。它基于 Ubuntu。在安装过程中,它会安装 python 3.6。
我通过安装以下软件包手动安装了 python 3.8:python3.8
, python3.8-dev
, python3.8-minimal
, python3.8-venv
. 我还更新了指向 python 二进制文件的链接:
sudo ln -sf /usr/bin/python3.8 /usr/bin/python3
在此之后,有几件事停止了工作。例如,当我尝试执行一个不存在的命令时,它没有打印找不到该命令的错误消息,但它显示了一个 python 堆栈跟踪。我解决的那个:
cd /usr/lib/python3/dist-packages
sudo ln -s apt_pkg.cpython-36m-x86_64-linux-gnu.so apt_pkg.so
sudo ln -s apt_inst.cpython-36m-x86_64-linux-gnu.so apt_inst.so
如您所见,python 错误是因为它找不到 apt 模块的已编译二进制文件。
所以这个问题解决了,但是有几个类似的,没有一个可以这样解决,因为模块二进制文件与 python 3.8 不兼容。
是否可以完全删除 python 3.6 并用 3.8 覆盖它,以便模块二进制文件也得到更新?或者python 3.8和3.6可以共存吗?/usr/bin/python3
指向 python 3.6的链接我会很好,我会手动执行/usr/bin/python3.8
或为其创建不同的别名或链接。但是,当我打印出sys.path
with时,/usr/bin/python3.8
我得到了这个:
/usr/lib/python38.zip
/usr/lib/python3.8
/usr/lib/python3.8/lib-dynload
/home/{username}/.local/lib/python3.8/site-packages
/usr/local/lib/python3.8/dist-packages
/usr/lib/python3/dist-packages
问题在于最后一个。这就是模块与 3.6 兼容的 so 文件所在的位置。我可以以某种方式强制 python 3.8 完全忽略最后一个模块搜索路径(而不总是在我的脚本中声明 sys.path.remove)吗?