CentOS 安装 Python3 没什么坑,按照步骤一步步来就可以了。
但 Ubuntu 安装 Python3 的坑却不少,这里总结一下,避免以后继续踩坑。
我用的是 ubuntu16.04,安装最新版本的 Python3.8.3
第1步:安装编译环境
安装之前,先更新一下源的软件列表。
apt-get update
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
第2步:下载 Python 源码
去官方网站下载:
wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz
官网的下载速度实在感人,换成阿里的镜像:
wget https://cdn.npm.taobao.org/dist/python/3.8.3/Python-3.8.3.tgz
第3步:解压
tar -xzf Python-3.8.3.tgz
第4步:配置安装选项
先进入上一步解压出来的 Python 源码文件夹:
cd Python-3.8.3
如果想快速安装,只配置安装位置即可。
例如,我要把 Python3.8.3 安装在这个目录下:/usr/local/python3.8
./configure --prefix=/usr/local/python3.8
如果不在意安装耗时,可以设置优化选项--enable-optimizations
./configure --prefix=/usr/local/python3.8 --enable-optimizations
注意:这里有第1个坑
安装选项 --enable-shared 不要设置。
原因分析请看这里:史提芬先森:聊一聊 Python 安装中的 --enable-shared
网上说不设置有坑,但我没有遇到过。遇到过的可以留言分享一下。
第5步:编译、安装
make && make install
第6步:设置 Python3.8.3 为系统默认的 Python3
这一步要在/usr/bin
目录下设置两个软链接文件:
- /usr/bin/python3
- /usr/bin/python3-config
这里要强调一下:
系统自带的 Python2 和 Python3 不要删除!
系统自带的 Python2 和 Python3 不要删除!
系统自带的 Python2 和 Python3 不要删除!
先说一下系统自带的 python3 到底放在哪里。
执行命令whereis python3
,可以找到 python3 的位置:/usr/bin/python3
进入目录/usr/bin/
,可以找到这几个文件:
- /usr/bin/python3.5
- /usr/bin/python3.5m
- /usr/bin/python3 -> python3.5
- /usr/bin/python3m -> python3.5m
- python3.5-config -> x86_64-linux-gnu-python3.5-config
- python3.5m-config -> x86_64-linux-gnu-python3.5m-config
- python3-config -> python3.5-config
- python3m-config -> python3.5m-config
/usr/bin/python3.5
和/usr/bin/python3.5m
其实是同一个文件,它们的md5完全一样,python3.5-config
同理。
我们要做的就是把下列两个软链接指到我们刚安装的 Python3.8.3
- /usr/bin/python3
- /usr/bin/python3-config
# 先删除这2个软链接
rm /usr/bin/python3 /usr/bin/python3-config
# 创建新的软链接
ln -s /usr/local/python3.8/bin/python3.8 /usr/bin/python3
ln -s /usr/local/python3.8/bin/python3.8-config /usr/bin/python3-config
这是偷懒的方法。
建议按照 Ubuntu 的方式来:
ln -s /usr/local/python3.8/bin/python3.8 /usr/bin/python3.8
ln -s /usr/local/python3.8/bin/python3.8-config /usr/bin/python3.8-config
ln -s /usr/bin/python3.8 /usr/bin/python3
ln -s /usr/bin/python3.8-config /usr/bin/python3-config
第7步:设置系统默认的 pip3
先看一下我们安装的 Python3.8.3 中,pip 的位置:
然后我们找一下系统自带的 Python2 的 pip 的位置,不过 Python2 居然没有安装 pip 模块:
再看下系统自带的 Python3 的 pip 的位置:
系统自带的 Python3 的 pip 文件是:/usr/bin/pip3
截图中我已经把它重命名为 pip3.5 了,并且把 pip3 链接到了 Python3.8 的 pip。
mv /usr/bin/pip3 /usr/bin/pip3.5
ln -s /usr/local/python3.8/bin/pip3 /usr/bin/pip3
CentOS 第6步和第7步与 Ubuntu 类似。
第8步:pip3 安装模块提示错误
CentOS 到第7步就结束了,但 Ubuntu 还有个坑,那就是用 pip3 安装模块时,会提示错误:
看错误信息,应该与文件/usr/bin/lsb_release
有关。
我们看下这个文件的内容(看第一行就可以了):
这就是一个Python脚本文件,难道是因为我们把 python3 链接到 python3.8.3,所以会出现这个错误?把第一行改为系统自带的 Python3 是不是就可以解决?
我把 #!/usr/bin/python3 -Es
改为#!/usr/bin/python3.5 -Es
,再次用 pip3 安装模块,这个错误就没有了。
这个问题有几个解决办法,总结一下:
方法一:
删除或者重命名文件:/usr/bin/lsb_release
方法二:
用文本编辑器打开文件 /usr/bin/lsb_release
第一行是:#!/usr/bin/python3 -Es
把它改为:#!/usr/bin/python3.5 -Es
还记得之前说过系统自带的python3不要删除吗?这里就用上了。
方法三:
打开文件/usr/local/python3.8/lib/python3.8/site-packages/pip/_vendor/distro.py
,大概在575行,把 True 改为 False。
第9步:PyPI源改为国内的镜像
第8步实际上已经完成 Python 的安装了,只不过国内 pip 下载的网速实在是太慢了,一般都建议改为国内的镜像。
国内的 PyPI 镜像:
豆瓣 https://pypi.doubanio.com/simple/
网易 https://mirrors.163.com/pypi/simple/
阿里云 https://mirrors.aliyun.com/pypi/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
修改方法:
新建文件$HOME/.config/pip/pip.conf
,如果目录不存在,自己创建,文件内容如下:
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com