ffd*_*ani 3 python ubuntu python-3.x 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
Run Code Online (Sandbox Code Playgroud)
在此之后,一些事情停止了。例如,当我尝试执行一个不存在的命令时,它没有打印找不到命令的错误消息,但它显示了 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
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,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,/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
Run Code Online (Sandbox Code Playgroud)
麻烦的是最后一个。这就是模块与 3.6 兼容的 so 文件所在的位置。我能否以某种方式强制 python 3.8 完全忽略最后一个模块搜索路径(而不总是在我的脚本中声明 sys.path.remove)?
我建议你撤消你的符号链接覆盖你的系统范围内的 Python 3 版本。正如你所发现的,替换python3可执行文件可能会产生一些问题,因为它是在幕后使用的。
通常,python[3]出于这个原因,您应该单独安装系统,并且使用虚拟环境是很常见的。这可以按如下方式完成(假设您在某个项目目录中):
python3.8 -m venv venv
source venv/bin/activate
Run Code Online (Sandbox Code Playgroud)
第一个命令将在目录中创建一个虚拟环境('venv')venv。第二个命令将“激活”:现在python(在这种情况下,python3和python3.8)python3.8在此 shell 的上下文中都指的是您的原始命令。如果您启动一个新的 shell,您将不得不重复此操作。
这也将允许您安装软件包pip而不会使您的系统安装混乱。虚拟环境和 pip 的使用是 Python 开发世界中非常常见的工作流程。
在 shell 和“全局”Python 管理方面,您还可以使用pyenv来管理您的 Python 版本以及 shell 中可用的内容。pyenv如果你想运行的特定版本是相当不错的python,说的3.8.0,但不是3.8.1。
| 归档时间: |
|
| 查看次数: |
3262 次 |
| 最近记录: |