文章目录
- 普通用户下使用sudo命令实现ubuntu 20.04.6 LTS 将python3.8 变更为 python3.10以及将pip从20.0.2更新为23.3.2
-
- Step 1:下载指定版本python3.10.13
-
- 方法一:wget下载tgz文件并编译
- 方法二:apt直接安装
- Step 2:设置默认版本为python3.10
- Step 3:修改pip指向
- Step 4:将pip从20.0.2更新为23.3.2
- Step 5:更换国内源
普通用户下使用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直接安装
一开始我直接使用
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
成功解决问题!后续在执行
合理怀疑运行内存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指向
无需省流:
分别执行以下编辑命令,保证第一行是
sudo vim /usr/bin/pip
sudo vim /usr/bin/pip3
最后执行
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为国内源,请跳转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'
可接着看我的心路历程,希望能有所帮助!
当我想要执行
ImportError: cannot import name 'html5lib' from 'pip._vendor' (/usr/lib/python3/dist-packages/pip/_vendor/__init__.py)
参考这篇文章,得知此错误会发生于版本过时的pip,最常见于使用 Python v3.10的 Ubuntu 机器上,完美契合当前处境,于是需要升级pip,本想偷懒直接运行
一怒之下直接
# 进入包文件目录 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不能直接使用
刚开始使用
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,但
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
我的执行过程居然没有
但是直接运行
居然又会报出:
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
不过在执行
sudo vim /usr/bin/pip
,将原本的
到此,pip已经升级完毕,库也能用
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