[python] 安装流程-centos

前言

本篇介绍一下python在Linux(Centos)上的安装方法

正文

源码安装

源码安装是python安装方法中最正规的方法,如果熟练掌握可以在系统中安装多个不同的版本

下载安装包

进入网站 https://www.python.org/downloads/, 选择对应版本的python包进入其下载页面, 下载对应的包(这里主要有两种格式的包,哪种都可以)

解压安装包

使用以下命令去解压对应格式的安装包

tar zxvf Python-2.7.14.tgz
tar vxf Python-3.6.4.tar.xz

环境准备

创建python的安装路径

使用以下语句创建一个python的安装目录

mkdir /data/python-2.7.14
mkdir /data/python-3.6.4

准备需要的系统包

python需要依赖一系列的系统包,使用以下语句基本可以覆盖到依赖

yum install gdbm gdbm-devel zlib-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc xz-devel bsddb openssl-devel

安装python

configuration

进入到安装包目录,并运行以下命令(--prefix指定了安装路径)

./configure --prefix=/data/python-2.7.14
./configure --prefix=/data/python-3.6.4

make

编译python

make
make

make install

安装python到安装目录

make install
make install

此时可以看到/data/python-2.7.14结构如下

|-- bin
|   |-- 2to3
|   |-- idle
|   |-- pydoc
|   |-- python -> python2
|   |-- python2 -> python2.7
|   |-- python2.7
|   |-- python2.7-config
|   |-- python2-config -> python2.7-config
|   |-- python-config -> python2-config
|   `-- smtpd.py
|-- include
|   `-- python2.7
|-- lib
|   |-- libpython2.7.a
|   |-- pkgconfig
|   `-- python2.7
`-- share
    `-- man

/data/python-3.6.4结构如下

|-- bin
|   |-- 2to3 -> 2to3-3.6
|   |-- 2to3-3.6
|   |-- easy_install-3.6
|   |-- idle3 -> idle3.6
|   |-- idle3.6
|   |-- pip3
|   |-- pip3.6
|   |-- pydoc3 -> pydoc3.6
|   |-- pydoc3.6
|   |-- python3 -> python3.6
|   |-- python3.6
|   |-- python3.6-config -> python3.6m-config
|   |-- python3.6m
|   |-- python3.6m-config
|   |-- python3-config -> python3.6-config
|   |-- pyvenv -> pyvenv-3.6
|   `-- pyvenv-3.6
|-- include
|   `-- python3.6m
|-- lib
|   |-- libpython3.6m.a
|   |-- pkgconfig
|   `-- python3.6
`-- share
    `-- man

安装pip

从上一步可以看到,python2并没有安装pip,所以我们需要手动安装pip,pip也有多种安装方法

命令安装

进入/data/python-2.7.14/bin, 执行以下语句, 将get-pip.py下载到目录下

wget https://bootstrap.pypa.io/get-pip.py
使用2.7.14版本的python执行文件运行文件
./python get-pip.py
如下输出表示安装成功

Collecting pip
Using cached pip-9.0.1-py2.py3-none-any.whl
Collecting setuptools
Downloading setuptools-38.5.1-py2.py3-none-any.whl (489kB)
    100% |████████████████████████████████| 491kB 257kB/s 
Collecting wheel
Using cached wheel-0.30.0-py2.py3-none-any.whl
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-9.0.1 setuptools-38.5.1 wheel-0.30.0

此时可以看到此时当前目录下多了pip的执行文件

|-- bin
|   |-- 2to3
|   |-- easy_install
|   |-- easy_install-2.7
|   |-- get-pip.py
|   |-- idle
|   |-- pip
|   |-- pip2
|   |-- pip2.7
|   |-- pydoc
|   |-- python -> python2
|   |-- python2 -> python2.7
|   |-- python2.7
|   |-- python2.7-config
|   |-- python2-config -> python2.7-config
|   |-- python-config -> python2-config
|   |-- smtpd.py
|   `-- wheel
|-- include
|   `-- python2.7
|-- lib
|   |-- libpython2.7.a
|   |-- pkgconfig
|   `-- python2.7
`-- share
    `-- man
源码安装
waiting

链接执行文件

安装完成之后,需要将这两种可执行文件放入环境变量中, 这里有两种方法

1. 将安装路径添加到环境变量中
2. 将可执行文件链接到path下的某个目录

其中第一种方法比较难于管理,因为安装路径下有很多python,并且系统中也自带python。所以这里选择第二种方法,将执行文件放到/usr/bin下(也可以放到其他位置)。

链接之前,先看一下/usr/bin目录下的python和pip的情况

ll /usr/bin/python*
ll /usr/bin/pip*
得到结果

lrwxrwxrwx 1 root root    7 Dec 11 20:40 /usr/bin/python -> python2
lrwxrwxrwx 1 root root    9 Dec 11 20:40 /usr/bin/python2 -> python2.7
-rwxr-xr-x 1 root root 7136 Aug  4  2017 /usr/bin/python2.7
-rwxr-xr-x 1 root root 208 Feb  8 22:47 /usr/bin/pip
-rwxr-xr-x 1 root root 208 Feb  8 22:47 /usr/bin/pip2
-rwxr-xr-x 1 root root 208 Feb  8 22:47 /usr/bin/pip2.7

可以看到目录下已经存在python和pip, 这里的pip是我自己安装的可以忽略,系统默认是没有的。但是python是系统默认的,这里需要把它们覆盖掉
执行下面的命令将新的python链接到/usr/bin

ln -sf /data/python-2.7.14/bin/python /usr/bin/python
ln -sf /data/python-2.7.14/bin/pip /usr/bin/pip
ln -sf /data/python-3.6.4/bin/python3 /usr/bin/python3
ln -sf /data/python-3.6.4/bin/pip3 /usr/bin/python3
再次运行之前的命令查看/usr/bin目录下的python和pip的情况, 得到结果

lrwxrwxrwx 1 root root   30 Feb  8 23:13 /usr/bin/python -> /data/python-2.7.14/bin/python
lrwxrwxrwx 1 root root    9 Dec 11 20:40 /usr/bin/python2 -> python2.7
-rwxr-xr-x 1 root root 7136 Aug  4  2017 /usr/bin/python2.7
lrwxrwxrwx 1 root root   30 Feb  8 23:16 /usr/bin/python3 -> /data/python-3.6.4/bin/python3
lrwxrwxrwx 1 root root  27 Feb  8 23:13 /usr/bin/pip -> /data/python-2.7.14/bin/pip
-rwxr-xr-x 1 root root 208 Feb  8 22:47 /usr/bin/pip2
-rwxr-xr-x 1 root root 208 Feb  8 22:47 /usr/bin/pip2.7
lrwxrwxrwx 1 root root  29 Feb  8 23:14 /usr/bin/pip3 -> /data/python-3.6.4/bin/pip3.6

可以看到此时执行文件都已经链接到目录下,试着执行python, python3命令是否成功

修改yum

上一步完成之后python的安装已经成功,但是会有一个问题,如果此时执行yum的话会失败。因为yum引用的是老版本的/usr/bin/python,我们已经把它覆盖掉了,所以接下来需要将yum引用到原来的python中去
运行命令

vim /usr/bin/yum
修改首行

#!/usr/bin/python -> #!/usr/bin/python2.7

运行命令

vim /usr/libexec/urlgrabber-ext-down
修改首行

#! /usr/bin/python -> #! /usr/bin/python2.7
posted @ 2020-10-31 19:56  起个啥  阅读(78)  评论(0编辑  收藏  举报