序、扯淡
之前一直把CentOS7源码编译安装Python 3的命令放在钉钉的石墨文档里,并不准备把这个当作一篇博客单独放出来的。但最近要源码编译Python 3的次数实在是太多了,而且每次打开石墨文档的速度实在是太——慢——了——(还不如我的博客快),所以决定把CentOS源码编译安装Python 3的命令放到博客里来,以后需要用的时候就直接翻博客算了。
注:本文在2019年4月30日被重新编辑。
一、背景
众所周知,CentOS系统为了保证系统的稳定性,系统自带的组件以及官方源中的软件包版本都相对比较低,自带的Python版本一直停留在Python 2.7.5,雷打不动。不过你看人家Ubuntu还能通过apt-get再进一步的安装Python 3.x,而CentOS自带的源压根没有Python 3.x的软件包,更过分的是在官方源中连Python2的pip也没有。也不知道2020年官方停止Python 2.7的支持时,CentOS能不能提供官方源Python 3.x。
CentOS对Python 2.7这么情有独钟的主要原因在于,其系统中很多程序依赖于Python 2.7,如果一不留神、一个手贱把自带的Python 2.7干掉了,那么你就可以惊奇的发现CentOS有很多命令咖喱给给了,比如说yum……
二、操作
源码编译安装 Python 3.x 其实并不难,主要是要搞清楚编译时需要先安装好的组件。如果在编译时缺失了一些必要的组件,在以后使用 Python 的时候就会遇到各种奇怪的问题。
键入以下的命令,下面的命令装的是Python 3.7.3,如果需要其他版本,请自行调整第四行curl请求的源码包地址中的版本号:
此处给出的命令只是常规编译安装,如果需要在编译时进行其他的高级配置,请移步第四章。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
yum makecache sudo yum install -y curl gcc make openssl openssl-devel openssl-static bzip2 bzip2-devel ncurses ncurses-devel readline readline-devel xz lzma xz-devel sqlite sqlite-devel gdbm gdbm-devel expat-devel tk tk-devel tcl tcl-devel libffi libffi-devel curl -o Python-3.7.3.tgz https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz tar xzf Python-3.7.3.tgz -C /tmp rm -f Python-3.7.3.tgz cd /tmp/Python-3.7.3/ ./configure --enable-shared --prefix=/usr/local make sudo make altinstall sudo ln -s /usr/local/bin/pip3.7 /usr/bin/pip3 sudo ln -s /usr/local/bin/python3.7 /usr/bin/python3 sudo rm -rf /tmp/Python-3.7.3 cd - echo '/usr/local/lib/' | sudo tee /etc/ld.so.conf.d/python3.7.3.conf sudo ldconfig |
三、注意事项
1.如果上面的命令一路下来都没有问题,之后你可以使用“python3”命令进入Python 3的交互命令行或执行Python3的脚本,“pip3”命令安装Python 3的软件包。如果需要执行Python 2的脚本,依旧使用原来的“python”命令进行调用。
2.源码编译安装的Python 3会默认安装好pip和setuptools(官网的 Python 3.6.3 源码编译后自带的pip版本为9.0.1,setuptools版本为28.8.0);
3.如果要升级pip3的话,最好不要使用下面这个pip自己提示的命令(特别是在系统中同时存在Python 2和3,pip 2和3的情况下):
1 |
pip3 install --upgrade pip |
因为这么做很有可能会出现升级后pip3命令找不到或者运行出错的问题(可能是因为在升级的过程中错误的调用了系统自带的Python 2),建议使用get-pip.py的方式去升级:
1 |
curl https://bootstrap.pypa.io/get-pip.py | python3 |
小柊
2018年9月4日 23:50:18