我做到了:
sudo apt-get upgrade python3
然后:
python3 --version
但仍然显示:Python 3.5.2,我期待的是 Python 3.7.3,这是迄今为止的最新版本。
这里为什么以及发生了什么?
有人可以详细解释一下吗?
使用
sudo apt-get upgrade python3
更新 Python 3 不会自动更改符号链接。换句话说,如果你尝试:
which python3
响应将是:
/usr/bin/python3
如果你尝试:
ls -l /usr/bin/python3
响应将是:
lrwxrwxrwx 1 root root 9 Mar 23 2016 /usr/bin/python3 -> python3.5
这表明您的
python3
命令仍然指向您的 python3.5
安装。但为什么?理论上升级的话小版本应该会升级吧?
嗯,显然 apt 中的 Python 并非如此。当您升级
python3.5
时,您将升级 3.5 内的次要版本,但不会从 3.5 中移出。换句话说,您将拥有最新的 3.5 版本,但不是最新的 3 版本。
要安装,比如说,Python 3.10,您需要安装一个新版本,还要提到次要版本。事实证明,您还需要通过其 PPA key 导入特定于 apt 的存储库。 这个存储库称为“deadsnakes”。
首先,更新和升级所有内容,安装
software-properties-common
包(用于处理PPA密钥),导入deadsnakes PPA存储库并再次更新apt索引:
sudo apt update && sudo apt upgrade -y
apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
其次,安装您选择的 Python 版本,并明确指定次要版本:
sudo apt install python3.10 python3.10-venv python3.10-dev
这不会自动更新符号链接。您需要使用以下两种方法之一来更新符号链接。第一个稍微好一点,使用
update-alternatives
。我将描述两者只是出于教育目的。
update-alternatives
运行以下命令:
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2
这会在
update-alternatives
中注册您的 Python 版本。要更改 Python 版本,请使用:
sudo update-alternatives --config python3
将显示带有选项的菜单。您可以选择您想要使用的版本。
如果您选择不使用
update-alternatives
,您还需要执行:
sudo ln -sf /usr/bin/python3.10 /usr/bin/python3
sudo ln -sf /usr/bin/python3.10-config /usr/bin/python3-config
这应该足够了。如果您再次运行
python3
,您应该将其更新:
$ python3
Python 3.10.0a6 (default, Mar 2 2021, 02:01:08) [GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
许多 Linux 发行版仍然将
/usr/bin/python
链接到 python2
,而不是 python3
。如果您只是想随意运行 Python 3,请在命令行中输入 python3
。当您通常使用 pip3
时,请使用 pip
为该解释器安装软件包。
我不建议做的是使用 sudo 权限来更新
python
符号链接。有太多系统脚本依赖于 /usr/bin/python
成为 python2
,因此这是一个好主意。
如果您想要对 Python 解释器进行更细粒度的控制,请使用 Anaconda 或 Miniconda 等平台管理器。与普通的 Ubuntu 软件包不同,您可以为本地用户安装它,因此不需要 root 访问权限来维护。您还可以首先将
PATH
变量指向 Anaconda 版本的 python
,而不影响系统的其余部分。以下是安装说明的示例:https://www.digitalocean.com/community/tutorials/how-to-install-anaconda-on-ubuntu-18-04-quickstart。
要进行更多手动控制,请使用 virtualenvs。
换句话说,最简单的解决方案可能是在
python
中为 .bashrc
定义一个别名。
您应该使用的命令是
python3
而不是 python
。
默认情况下,Ubuntu 采用
Python2
来表示 python
命令
Python 3 与 Python 2 是不同的包。因此,python 2 无法升级到 python3。
sudo apt-get upgrade python3
它只升级python3包。默认情况下,python
命令采用python2
解释器。因此,要么在 alias python=python3
文件中创建 ~/.bashrc
来使用 python 命令运行 python3。
或者,使用以下命令运行它:
python3
这显示了操作系统中 python 的默认版本,而您升级了 python3。
python --version
要使用Python的升级版本,您应该在终端中输入Python并点击选项卡来检查可用版本
你会得到这样的结果
python
python python2.7 python2-config python2-pbr python3.6 python3.6m python3-config python3m python-config
python2 python2.7-config python2-jsonschema python3 python3.6-config python3.6m-config python3-jsonschema python3m-config
然后使用所需版本的Python。
我将列出2种安装python的方法:
如果您使用
apt list -a python3
,您可以查看 ubuntu/您的默认存储库提供的所有可用 python3 版本。
可以使用
apt update && sudo apt upgrade -y
进行更新
之后您可以使用
apt install python3.xx
安装新的可用 python3 版本
现在你必须看看你的Python二进制文件存储在哪里:
where python3.xx
如果你因为担心破坏某些东西而无法使用升级命令:D你必须像这样从源代码安装python:
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev # install dependencies
cd /tmp
wget https://www.python.org/ftp/python/3.8.4/Python-3.8.4.tgz # get your needed version
tar xvf Python-3.8.4.tgz # unpack
cd Python-3.8.4
./configure --enable-optimizations --with-ensurepip=install # prepare build
make -j 8 # build python (-j = split)
sudo make altinstall # install with altinstall to not overwrite the current installation
python3.8 --version
where python3.8
最后您必须将符号链接替换为新安装。首先删除当前符号链接:
sudo rm /usr/bin/python3
并将其替换为新符号链接(where 命令的结果): sudo ln -s /usr/local/bin/python3.8 /usr/bin/python3