linux上安装Python3.6环境和pip3(有坑!!!请注意)

来自:https://www.cnblogs.com/wsy1103/p/10353217.html

前言

centos7 自带有 python,但是却是 python2 版本的 python,如果你想安装个python3怎么办呢?
如果直接删除python2的话,可能会引起其他的问题,因为有些东西是依赖python2的,最好的解决办法是python3和python2共存,新安装一个python3的环境。

Python2

先找到系统的python安装在哪个目录,查看对应版本号和相关安装包
cd / 先回到根目录
whereis python 查看python所在目录/usr/bin
cd /usr/bin 切到python目录
ll python* 查看python开头的相关文件详情

[root@localhost ~]# cd /
[root@localhost /]# whereis python
python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz
[root@localhost /]# cd usr/bin
[root@localhost bin]# ll python*
lrwxrwxrwx. 1 root root    7 2月  11 03:03 python -> python2
lrwxrwxrwx. 1 root root    9 2月  11 03:03 python2 -> python2.7
-rwxr-xr-x. 1 root root 7216 4月  11 2018 python2.7
[root@localhost bin]# 

从查看的结果可以看到python指向的是python2 ,python2指向的是python2.7。那也就是在控制台输入python、python2、python2.7都是运行python2.7

如果我们安装一个python3.6的环境,让python指向3.6, python2指向python2.7, 那就可以完美的共存了。

 

安装Python3

安装python3.6之前,先备份python包,因为一会要替换这个文件。(注意!!!若当前没有安装gcc编译环境,请先安装!!!如下:yum install -y gcc。否则一会./configure --prefix=/usr/local/python3.6 会报错“configure: error: no acceptable C compiler found in $PATH”

又由于linux自带python2.x,而python又是yum的解释器。所以如果先将python备份了,一会执行yum install -y gcc的时候就会报错:“-bash: /usr/bin/yum: /usr/bin/python: 坏的解释器: 没有那个文件或目录”。所以最好先确保已经安装好gcc编译环境先,再备份python。

yum install -y gcc
[root@localhost bin]# mv python python.bak

从python安装包的历史版本中https://www.python.org/ftp/python/,找到需要的安装包,比如这里选3.6.8版本。

从众多的包里面找到Python-3.6.8.tgz包,那么下载地址拼接下就是:https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz

在Centos 7系统里面新建一个目录,用于存放下载的python3安装包,比如:/usr/local。然后cd到 /usr/local/python3目录,用wget下载3.6.8安装包。

[root@localhost bin]# mkdir /usr/local/python3
[root@localhost bin]# cd /usr/local/python3
[root@localhost python3]# wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
--2019-02-24 06:08:58--  https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
正在解析主机 www.python.org (www.python.org)... 151.101.228.223, 2a04:4e42:11::223
正在连接 www.python.org (www.python.org)|151.101.228.223|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:23010188 (22M) [application/octet-stream]
正在保存至: “Python-3.6.8.tgz”

100%[==============================================================================================================>] 23,010,188  47.9KB/s 用时 12m 40s

2019-02-24 06:21:39 (29.6 KB/s) - 已保存 “Python-3.6.8.tgz” [23010188/23010188])

[root@localhost python3]# 

等待下载完成之后会在当前目录下出现一个tgz包,tar命令解压这个包到当前目录就可以了。

[root@localhost python3]# tar -xvf Python-3.6.8.tgz
...
[root@localhost python3]# ll
总用量 22476
drwxr-xr-x. 17  501  501     4096 12月 24 11:01 Python-3.6.8
-rw-r--r--.  1 root root 23010188 12月 24 11:01 Python-3.6.8.tgz
[root@localhost python3]# 

解压完之后需要编译Python-3.6.8包下的文件,先cd过去执行完这句命令之后,把python的安装目录指定一下,这样的话,里面的一些bin目录、lib目录就都会存放在这个目录下面。

如果不指定这个安装目录的话,最后python的安装文件将分散到linux的默认目录,不在一块。我们指定安装目录,以后卸载的话直接删除目录就可以干净卸载了。

[root@localhost python3]# cd Python-3.6.8
[root@localhost Python-3.6.8]# ./configure --prefix=/usr/local/python3Dir 

此处有坑!!!(不知道使用 ./configure --prefix=/usr/local/python3Dir --with-ssl 会如何。。先往下看吧)

在当前目录/usr/local/python3/Python-3.6.8执行make,执行完之后,接着输入make install。

[root@localhost Python-3.6.8]# make  # 执行时间还挺长的
[root@localhost Python-3.6.8]# make install  #执行这个命令之后出现 python3Dir 目录

执行中有错误,如下:

Traceback (most recent call last):
File "/usr/local/python3/Python-3.6.8/Lib/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/usr/local/python3/Python-3.6.8/Lib/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/usr/local/python3/Python-3.6.8/Lib/ensurepip/__main__.py", line 5, in <module>
sys.exit(ensurepip._main())
File "/usr/local/python3/Python-3.6.8/Lib/ensurepip/__init__.py", line 204, in _main
default_pip=args.default_pip,
File "/usr/local/python3/Python-3.6.8/Lib/ensurepip/__init__.py", line 117, in _bootstrap
return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
File "/usr/local/python3/Python-3.6.8/Lib/ensurepip/__init__.py", line 27, in _run_pip
import pip._internal
zipimport.ZipImportError: can't decompress data; zlib not available #-------不晓得这个错误有没有影响,zipimport。ZipImportError:无法解压数据;zlib不可用
make: *** [install] 错误 1
[root@bogon Python-3.6.8]#  #看样子是pip的问题

缺少zlib依赖包,请看这里  https://blog.csdn.net/u014749862/article/details/54430022/ 。即:

注意:这里需要yum。。因为python被备份了,暂时用不了的话,就直接进行下面的“安装完成后、到yum配置完成这个流程”先,完成后再来安装缺少的zlib包及make install 异常问题)

# 打开终端,输入一下命令安装zlib相关依赖包
yum -y install zlib*

# 进入 python安装包,修改Modules路径的Setup文件
vi /usr/local/python3/Python-3.6.8/Modules/Setup

# 找到以下代码,去掉注释(进入vi后输入/zlib查找,找到之后再点击i进入编辑模式)
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
去掉注释
     zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
     
另外,在这里说明一下,对于在安装Python安装的过程中遇到这个问题,安装完上面的依赖包后,即可重新进入终端,进入python的安装包路径下执行:
make && make install 
重新编译安装即可

 正常 make install 截图

安装完成。

 

执行完毕之后,我们就可以切换到 /usr/local/python3Dir 目录下去查看,python3.6在bin目录

[root@localhost Python-3.6.8]# cd /usr/local/python3Dir
[root@localhost python3Dir]# ls
bin  include  lib  share
[root@localhost python3Dir]# cd bin
[root@localhost bin]# ls
2to3      idle3    pydoc3    python3    python3.6-config  python3.6m-config  pyvenv
2to3-3.6  idle3.6  pydoc3.6  python3.6  python3.6m        python3-config     pyvenv-3.6
[root@localhost bin]# 

 

添加软连接

由于系统默认的python是指向python2,前面已经删除备份过了,这里执行把新安装的python3.6指向给/usr/bin/python就可以了。

[root@localhost bin]# ln -s /usr/local/python3Dir/bin/python3 /usr/bin/python
[root@localhost bin]# python -V
Python 3.6.8
[root@localhost bin]# python
Python 3.6.8 (default, Dec 29 2018, 13:48:00) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
[root@localhost bin]# 

输入python -V可以看到版本号,这样系统默认的就是python3.6.8版本了,如果想用python2.7版本,直接输入python2就可以了

[root@localhost bin]# python2
Python 2.7.5 (default, Aug  4 2017, 00:39:18) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

 

yum配置

yum是依赖于python2的,所以需要更改yum里面的python指向,vi打开 /usr/bin/yum。打开后输入键盘上i键,进入编辑状态,把第一行#! /usr/bin/python修改为#! /usr/bin/python2。

[root@localhost Python-3.6.8]# vi /usr/bin/yum

#! /usr/bin/python修改为#! /usr/bin/python2

编辑完之后,按ESC返回,输入:wq保存退出。

接着vi打开/usr/libexec/urlgrabber-ext-down

[root@localhost Python-3.6.8]# vim /usr/libexec/urlgrabber-ext-down

#! /usr/bin/python 修改为#! /usr/bin/python2

 

pip环境

python3安装完成之后,如果想用pip安装一些第三方包,系统会默认安装到python2的环境里面。为了能够使用pip安装到python3的环境,可以下载pip安装包,添加软链接。(注意,这里需要先解决上面make install出现的缺少的zlib包及make install 异常问题,否则python3中会找不到pip)

  • 先cd到/usr/bin
  • mv备份pip
  • 添加python3Dir安装目录里面的pip3软链接
  • 查看pip -V 和pip2 -V
  • 查看所有的pip
[root@localhost bin]# pip
bash: pip: 未找到命令...
[root@localhost bin]# whereis pip
pip:[root@localhost bin]# 
[root@localhost bin]# 
[root@localhost bin]# ll pip*
ls: 无法访问pip*: 没有那个文件或目录
[root@localhost bin]# ln -s /usr/local/python3Dir/bin/pip3 /usr/bin/pip   #这里直接执行这个即可
[root@localhost bin]# ll pip*
lrwxrwxrwx. 1 root root 27 2月   5 23:09 pip -> /usr/local/python3/bin/pip3

我这里原先并没有pip的命令,故直接执行了这一个命令即可(ln -s /usr/local/python3Dir/bin/pip3 /usr/bin/pip)

 

解决了上面的zlib问题, pip已经安装成功,可是一波刚平,一波又起风云,如下图:

暂时以这两篇文章,为准吧, ./configure --prefix=/usr/local/python3Dir --with-ssl

https://blog.csdn.net/zhengcaihua0/article/details/79681991 主要以这个为准

1. 查看openssl安装包,发现缺少openssl-devel包 
[root@localhost ~]# rpm -aq|grep openssl
openssl-0.9.8e-20.el5 
openssl-0.9.8e-20.el5 
[root@localhost ~]#

2.yum安装openssl-devel 
[root@localhost ~]# yum install openssl-devel -y 
查看安装结果 
[root@localhost ~]# rpm -aq|grep openssl 
openssl-0.9.8e-26.el5_9.1 
openssl-0.9.8e-26.el5_9.1 
openssl-devel-0.9.8e-26.el5_9.1 
openssl-devel-0.9.8e-26.el5_9.1

3.重新对python3.6进行编译安装,用一下过程来实现编译安装:
[root@localhost python3]# cd Python-3.6.8
[root@localhost Python-3.6.8]# ./configure --prefix=/usr/local/python3Dir --with-ssl
[root@localhost Python-3.6.8]# make
[root@localhost Python-3.6.8]# make install

再次pip list测试一下

[root@localhost Python-3.6.8]# 
[root@localhost Python-3.6.8]# pip list
Package    Version
---------- -------
pip        18.1   
setuptools 40.6.2 
You are using pip version 18.1, however version 19.0.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[root@localhost Python-3.6.8]#

不再报错,ok了。

https://blog.csdn.net/jeryjeryjery/article/details/77880227   这个作为了解吧。

 

 

 


 

posted @ 2019-02-24 01:01  风聆  阅读(31)  评论(0)    收藏  举报