文章目录
普通用户下使用sudo命令实现ubuntu 20.04.6 LTS 将python3.8 变更为 python3.10以及将pip从20.0.2更新为23.3.2
Step 1:下载指定版本python3.10.13
省流版:推荐使用apt进行安装,而不是下载文件进行编译安装
执行:
# 更新sudo
sudo apt update
# 安装PPA需要的软件源
sudo apt install software-properties-common -y
# 添加名为deadsnake的PPA源:
sudo add-apt-repository ppa:deadsnakes/ppa
# 这时候才可以安装python3.10:
sudo apt install python3.10
如果此法出现问题,可以看看后面我下载python的弯路,如果没问题,就可以直接跳转Step 2:设置默认版本为python3.10
方法一:wget下载tgz文件并编译
# 下载编译包
sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev
sudo wget https://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz
sudo tar -zxvf Python-3.10.13.tgz
cd Python-3.10.13
# 修改配置,--prefix=/home/cjh/python3.10为安装路径,缺省即默认安装位置
./configure --prefix=/home/cjh/python3.10
# 编译安装
sudo make
sudo make test # 只用于测试是否能够安装成功,可省略
sudo make install
但我作为普通用户只分配有1G的RAM,不知道是不是运存不够的原因,进行到sudo make install会卡在
gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -I. -I./Include -DPy_BUILD_CORE -o Objects/bytesobject.o Objects/bytesobject.c
即不能用编译安装的方法
方法二:apt直接安装
一开始我直接使用sudo apt-get install python3.10
,命令执行成功了并且一定的存储空间也被占用了,但是python3.10不翼而飞,怎么都找不到,ls /usr/bin/python*
也没有出现python3.10,只有python3.8,非常奇怪。于是想通过安装Anaconda曲线救国:
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
可惜会报错:ERROR 403: Forbidden。参考这篇文章,发现因为清华源会拒绝不以 Mozilla 开头或不包含 Wget 的用户代理,于是改为
wget --user-agent="Mozilla" https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
成功解决问题!后续在执行 bash Anaconda3-2023.09-0-Linux-x86_64.sh
时,发现卡在
合理怀疑运行内存1G无法支持提取:nss-3.89.1-h6a678d5_0.conda
山重水复疑无路,柳暗花明又一村,参考 这篇文章得知使用apt命令安装时,需要以下完整流程:
# 更新sudo
sudo apt update
# 安装PPA需要的软件源
sudo apt install software-properties-common -y
# 添加名为deadsnake的PPA源:
sudo add-apt-repository ppa:deadsnakes/ppa
# 这时候才可以安装python3.10:
sudo apt install python3.10
合理怀疑之前没更新apt导致下载的python3.10不翼而飞
Step 2:设置默认版本为python3.10
无需省流:执行以下命令
# 提高python3.10的优先级
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2
# 检查优先级是否设置成功,按回车即可退出
update-alternatives --config python3
Step 3:修改pip指向
无需省流:
分别执行以下编辑命令,保证第一行是#!/usr/bin/python3
即可
sudo vim /usr/bin/pip
sudo vim /usr/bin/pip3
最后执行pip --version
和pip3 --version
验证以下,结果应该为:
Step 4:将pip从20.0.2更新为23.3.2
省流版:
提供两种方法:
- 执行以下命令升级pip为最新版,目前最新版为23.3.2:
curl -sS https://bootstrap.pypa.io/get-pip.py | sudo python3.10
万万不要少了sudo,否则会下载在当前用户下
- 首先从官网另存文件:单击https://bootstrap.pypa.io/get-pip.py,右键单击并在浏览器中选择“另存为”,便可下载到本地。然后使用scp命令将文件get-pip.py传输到服务器上。登陆服务器,打开终端,
cd
到文件get-pip.py所在目录下,然后执行以下命令:
sudo python3 get-pip.py
两种方法均可卸载老版本的pip并更新为最新版,即出现:
Successfully uninstalled pip-20.0.2
Successfully installed pip 23.3.2
然后两种方法均需执行以下命令,注意文件名apt_pkg.cpython-38-x86_64-linux-gnu.so很有可能在其他机器上为apt_pkg.cpython-38m-x86_64-linux-gnu.so,请见机行事
# 进入包文件目录
cd /usr/lib/python3/dist-packages/
# 重建软连接
sudo cp apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.cpython-310-x86_64-linux-gnu.so
sudo ln -s apt_pkg.cpython-310-x86_64-linux-gnu.so apt_pkg.so
最后两种方法均需执行以下命令:
sudo vim /usr/bin/pip
将文件中的pip==20.0.2
替换为pip==23.3.2
,即可:
如果以上步骤均可正常运行,那么恭喜你已经更新完成啦!
如果想要更换pip为国内源,请跳转Step 5:更换国内源
如果中途出现下载过慢,或者报类似下面的错误:
ImportError: cannot import name 'html5lib' from 'pip._vendor'
(/usr/lib/python3/dist-packages/pip/_vendor/__init__.py)
No module named 'apt_pkg'
curl: (35) OpenSSL SSL_connect: 连接被对方重设
in connection to raw.githubusercontent.com:443
curl: (6) Couldn't resolve host 'xxxx'
可接着看我的心路历程,希望能有所帮助!
当我想要执行pip install beautifulsoup4==4.12.2
时,报错
ImportError: cannot import name 'html5lib' from 'pip._vendor'
(/usr/lib/python3/dist-packages/pip/_vendor/__init__.py)
参考这篇文章,得知此错误会发生于版本过时的pip,最常见于使用 Python v3.10的 Ubuntu 机器上,完美契合当前处境,于是需要升级pip,本想偷懒直接运行python -m pip install --upgrade pip
时,结果报相同错误:
一怒之下直接pip install html5lib
,结果会报错No module named 'apt_pkg'
,参考网上频繁出现的解决方案,如:这篇文章
# 进入包文件目录
cd /usr/lib/python3/dist-packages/
# 重建软连接
sudo cp apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.cpython-310-x86_64-linux-gnu.so
sudo ln -s apt_pkg.cpython-310-x86_64-linux-gnu.so apt_pkg.so
不过错误还是没有解决,报的错也没有改变(但谁知道上面的修改是不是后面成功的必经之路呢)
于是私以为更新版本太老的pip v20.0.2不能直接使用python -m pip install --upgrade pip
刚开始使用curl -sS https://bootstrap.pypa.io/get-pip.py | python3.10
命令,但不止为何运行实在太慢,甚至会出现:
curl: (35) OpenSSL SSL_connect: 连接被对方重设
in connection to raw.githubusercontent.com:443
curl: (6) Couldn't resolve host 'xxxx'
的问题。无奈只能从本机上访问https://bootstrap.pypa.io/get-pip.py并尝试下载,但是直接点击此网站并不能直接下载,因为行数很多手动复制也不现实,兜兜转转找了好几个帖子才发现可以右键鼠标,点击另存为即可保存get-pip.py文件,然后再通过scp命令发送文件到服务器上。
然后在服务器保存get-pip.py文件的目录下运行:
python3 get-pip.py
在下载pip-23.3.2-py3-none-any.whl文件时,因为国外网站访问速度贼慢,所以很大可能会中断报错,我找了好久也没找到国内的此文件镜像,或许可能存在于github上,我最后多尝试了几次,最后下载成功了:
不过很奇怪的是,明明成功安装pip-23.3.2,但pip --version
依旧是pip 20.0.2
,在网上找了很久,搜索更新pip,出来的结果都是pip更新其他的包,无奈之下只能回过头来看上图的提示信息,突然发现这个WARNING已经告诉了一切:pip下载到了当前用户下,而并未加入到PATH路径,同时还发现执行python3 get-pip.py
的结果和这篇帖子不同:
root@66b6f8945ca1:/# python get-pip.py
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting pip
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/c2/d7/90f34cb0d83a6c5631cf71dfe64cc1054598c843a92b400e55675cc2ac37/pip-18.1-p
y2.py3-none-any.whl (1.3MB)
100% |████████████████████████████████| 1.3MB 1.8MB/s
Installing collected packages: pip
Found existing installation: pip 18.1
Uninstalling pip-18.1:
Successfully uninstalled pip-18.1
Successfully installed pip-18.1
我的执行过程居然没有Successfully uninstalled pip-20.0.2
,既然没有执行,那我自己执行能不能行?
但是直接运行pip uninstall
和pip3 uninstall
居然又会报出:
ImportError: cannot import name 'html5lib' from 'pip._vendor'
(/usr/lib/python3/dist-packages/pip/_vendor/__init__.py)
的错误。
本以为苍天无眼,但脑子灵光乍现,前面的WARNING说了pip下载到了当前用户下,那么我将其安装到高级用户上何如?执行:
sudo python3 get-pip.py
没错!救赎之道就在其中!它运行正常,成功卸载了pip v20.0.2并安装了pip v23.3.2
不过在执行pip -version
时,会有一个错误是说/usr/bin/pip
文件中的参数不对,于是:
sudo vim /usr/bin/pip
,将原本的pip==20.0.2
替换为pip==23.3.2
,即可:
到此,pip已经升级完毕,库也能用pip install
命令正常安装啦!
Step 5:更换国内源
sudo mkdir ~/.pip
sudo vim ~/.pip/pip.conf
修改如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn