Bu1'Blog

如果能控制粗鄙的狂喜,就不会有深入骨髓的悲伤。

0%

CentOS7升级python3以及更换pip源记录

遇坑记录

0x01 安装新版本python

目前我本机是2.7版本

1
2
3
4
5
6
7
8
9
10
11
12
13
# 建立安装目录
mkdir /usr/local/python3
cd /usr/local/python3
# 寻找合适的版本https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz
wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz
# 解压
tar -xzvf Python-3.9.9.tgz
# 进入解压缩后的文件夹
cd Python-3.9.9.tgz
#编译安装
./configure --with-ssl --prefix=/usr/local/python3
make
make install

0x02 更换软连接

1
2
3
4
5
6
7
8
# 备份python2.7的软连接
mv /usr/bin/python /usr/bin/python_2
# 建立新版本python的软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
# 查看下目前的版本
python -V
# 安装mysqldb库
pip3 install mysqldb

image-20211209193908045

0x03 版本冲突处理

yum依赖于python2.x,升级后yum会报错

image-20211209195729276

修改yum的依赖,将它指向python2

1
2
# vim /usr/bin/yum
#!/usr/bin/python => #!/usr/bin/python2

修改后正常回显

image-20211209195937265

执行yum update时可能还会用到一个文件,同样也需要处理一下,相同的方法修改python版本的指向就行。

1
vi /usr/libexec/urlgrabber-ext-down

0x04 pip更换国内镜像源

设置一次性的

1
2
# pip install <package> -i http://<mirror>/simple 
pip install packagename -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

永久性设置,用户根目录~/.pip/pip.conf下添加可信源,不存在文件可以直接创建

1
2
3
4
5
6
7
8
9
10
# ~/.pip/pip.conf
如:
[root@localhost ~]# cd
[root@localhost ~]# mkdir .pip
[root@localhost ~]# cd .pip
[root@localhost .pip]# vim pip.conf
写入如下内容
[global]
index-url=http://pypi.douban.com/simple
trusted-host = pypi.douban.com

trusted-host 是指设置为受信源,否则在安全性较高的连接下是连接不上

旧版pip无法下载文件设置

1
2
3
4
5
6
7
8
9
10
11
12
# 卸载原有的pip
pip install --upgrade pip
# 新增拓展源
yum -y install epel-release
# 清空cache
yum clear all
# 执行makecache
yum makecache
#安装pip
yum -y install python-pip
#升级pip
pip install --upgrade pip

或者直接用脚本安装

1
2
3
4
5
# 获取脚本
# 3.* https://bootstrap.pypa.io/get-pip.py -o get-pip.py
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
# 安装pip
python get-pip.py

pip版本指向混乱,切换到目录cd /usr/local/bincd /usr/local/bin

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/python3.6

# -*- coding: utf-8 -*-
import re
import sys

from pip._internal import main

if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())

看第一行,第一行指定了这个脚本对应的python版本,如果想把pip对应的python版本改为2.7的,只需修改python3.6为python2.7即可。

1
2
# pip -V
pip 20.3.4 from /usr/lib/python2.7/site-packages/pip (python 2.7)

0x05 参考