• 记一次在CentOS系统搭建python3环境


      首先,查看linux系统类型和版本:参考:查看linux系统类型和版本

      默认Centos7中是有python安装的,但是是2.7版本,实际上这几个文件之间是有依赖关系的。在ls 后面加个 -al参数,如下:

    [root@localhost bin]# cd /usr/bin
    
      [root@localhost bin]# ls -al  python*
      lrwxrwxrwx. 1 root root   33 Oct 21 12:30 python -> python2
      lrwxrwxrwx. 1 root root    9 Oct 19 23:55 python2 -> python2.7
      -rwxr-xr-x. 1 root root 7136 Aug  4 08:40 python2.7
      [root@localhost bin]#
    
    

      备份第一个python,使用如下命令:

    [root@localhost bin]# mv python python.bak
      在Centos 7上创建一个目录吧。一般选择的是/usr/local里面的,如下命令:
    [root@localhost bin]# mkdir /usr/local/python3

    目录创建好了,我们就cd切换进去就好了。

    [root@localhost bin]# cd /usr/local/python3

    接下来我们要下载python把源码下载到这个目录下就OK,命令如下:

    [root@localhost python3]# wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz

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

    #解压命令
    [root@localhost python3]# tar -xvf Python-3.6.6.tgz 
    #解压完成后,查看目录下文件
    [root@localhost python3]# ll drwxr-xr-x. 17 501 501 4096 Oct 21 12:22 Python-3.6.6 -rw-r--r--. 1 root root 22673115 Oct 3 15:47 Python-3.6.6.tgz

    就要开始安装了,因为下载的包是未编译的,我们需要编译一下。

    进入文件目录:

    [root@localhost python3]# cd Python-3.6.3/
    [root@localhost Python-3.6.3]# 

    把python的安装目录指定一下,这样的话,里面的一些bin目录、lib目录就都会存放在这个目录下面。如果不指定这个安装目录的话,最后python的安装文件将分散到linux的默认目录,不在一块。我们指定安装目录,以后卸载的话直接删除目录就可以干净卸载了。

    如下命令:

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

    现在我们当前目录还是在/usr/local/python3/Python-3.6.3,执行如下命令:

    [root@localhost Python-3.6.3]# make

    然后出来一大堆代码,等它执行完毕。接着输入以下命令:

    [root@localhost Python-3.6.3]# make install

    又是一大堆代码,执行完毕之后,我们就可以切换到/usr/local/python3Dir目录下去查看了。

    复制代码
    [root@localhost Python-3.6.3]# cd /usr/local/python3Dir/
    [root@localhost python3Dir]# ll
    total 0
    drwxr-xr-x. 2 root root 245 Oct 21 12:26 bin
    drwxr-xr-x. 3 root root  24 Oct 21 12:26 include
    drwxr-xr-x. 4 root root  63 Oct 21 12:26 lib
    drwxr-xr-x. 3 root root  17 Oct 21 12:26 share
    [root@localhost python3Dir]# 
    复制代码

    接下来我们还有一点善后工作。切换到 /usr/bin目录下面吧:

    [root@localhost python3Dir]# cd /usr/bin
    #然后输入以下命令 ,创建一个软链接 [root@localhost bin]# ln -s /usr/local/python3Dir/bin/python3 /usr/bin/python
    因为yum依赖原来的python,所以这样修改后yum命令会出问题

    1、在执行yum命令时忽然发现出现以下报错:

    # yum list
    File "/usr/bin/yum", line 30
    except KeyboardInterrupt, e:
                           ^
    SyntaxError: invalid syntax

    原因:

    这是因为yum采用Python作为命令解释器,这可以从/usr/bin/yum文件中第一行#!/usr/bin/python发现。而python版本之间兼容性不太好,使得2.X版本与3.0版本之间存在语法不一致问题。而CentOS 7自带的yum采用的是python2.7,当系统将python升级到3后,出现语法解释错误。

    解决办法:

    一是升级yum。

    二是修改yum的解释器为旧版本python2.7,即将连接文件/usr/bin/python连接回/usr/bin/python2.7。治标不治本,不推荐。

    三是在设置里更改解释器设置,即修改/usr/bin/yum文件,指定使用python2.7作为yum的解释器:

    # vi /usr/bin/yum

    将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2"即可。

    安装软件时又会出现另一种报错

    Downloading packages:
      File "/usr/libexec/urlgrabber-ext-down", line 28
        except OSError, e:
                      ^
    SyntaxError: invalid syntax
    问题与前面一个一样,因此解决办法也是一样的:

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

    将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2"即可。

    我们查看一下链接情况:

    [root@localhost bin]# ll -a python*
    lrwxrwxrwx. 1 root root   33 Oct 21 12:30 python -> /usr/local/python3Dir/bin/python3
    lrwxrwxrwx. 1 root root    9 Oct 19 23:55 python2 -> python2.7
    -rwxr-xr-x. 1 root root 7136 Aug  4 08:40 python2.7
    lrwxrwxrwx. 1 root root    7 Oct 19 23:55 python.bak -> python2
    [root@localhost bin]# 

     然后查看一下当前的python版本

    [root@localhost bin]# python -V
    Python 3.6.6
    [root@localhost bin]# 

    然后来个hello world测试一下:

    先输入python进入,然后写代码:

    复制代码
    [root@localhost bin]# python
    Python 3.6.3 (default, Oct 21 2017, 12:21:40) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print("Hello World")
    Hello World
    >>> exit()
    [root@localhost bin]# 
    复制代码

    python安装完成,但是有点小问题,发现python命令行无法使用退格键、方向键。

    需要安装Python 中的 readline模块

    pip install readline

    此处pip属于python2的,需要安装并升级python3的pip

    安装pip以及setuptools

    wget --no-check-certificate  https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26

    tar -zxvf setuptools-19.6.tar.gz

    cd setuptools-19.6

    python3 setup.py build

    python3 setup.py install

    报错:RuntimeError: Compression requires the (missing) zlib module

    我们需要在linux中安装zlib-devel包,进行支持。

    yum install zlib-devel

    需要对python3.6进行重新编译安装。

    cd /usr/local/python3/Python-3.6.6

    make & make install

    重新安装setuptools

    python3 setup.py build

    python3 setup.py install

    2、安装pip

    wget --no-check-certificate  https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb

    tar -zxvf pip-8.0.2.tar.gz

    cd pip-8.0.2

    python3 setup.py build

    python3 setup.py install

    如果没有意外的话,pip安装完成。

    测试:

    ImportError: cannot import name 'HTTPSHandler'

    是缺少openssl的开发环境,我们继续安装

    yum install openssl-devel

    继续重新编译安装python3.6、setuptools和pip

    [root@VM_71_251_centos python3Dir]# cd /usr/bin/
    [root@VM_71_251_centos bin]# ls -la pip*
    -rwxr-xr-x 1 root root 215 Nov 29 13:51 pip
    -rwxr-xr-x 1 root root 215 Nov 29 13:51 pip2
    -rwxr-xr-x 1 root root 215 Nov 29 13:51 pip2.7
    [root@VM_71_251_centos bin]# cp pip pip3
    [root@VM_71_251_centos bin]# vi pip3

    #!/usr/bin/python2改成#!/usr/bin/python3

    from pip._internal import main改成from pip import main(版本号为8.0.2的时候需要)
    [root@VM_71_251_centos bin]# pip -V
    pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)
    [root@VM_71_251_centos bin]# pip3 -V
    pip 8.0.2 from /usr/local/python3Dir/lib/python3.6/site-packages/pip-8.0.2-py3.6.egg (python 3.6)

    升级pip:pip3 install --upgrade pip

     [root@VM_71_251_centos bin]# pip3 -V
    pip 18.1 from /usr/local/python3Dir/lib/python3.6/site-packages/pip (python 3.6)

    再来安装readline模块

    python3 -m pip install readline

    又有新的错误:

    发现错误:cannot find -lncurses

    那就去安装ncurses:yum install ncurses-devel

    安装ncurses完成后,再来安装readline:

    然后测试一下python3的命令行无法使用退格键、方向键的问题,

    经测试,可以使用退格键和方向键了,但是回车就异常了,如下所示:

    *** Error in `python3': munmap_chunk(): invalid pointer: 0x00007f848cee20a0 ***
    ======= Backtrace: =========
    /lib64/libc.so.6(+0x7f5e4)[0x7f848c0a15e4]
    python3(PyOS_Readline+0xec)[0x5cc48c]
    python3[0x4473e0]
    python3[0x448d28]
    python3(PyTokenizer_Get+0x9)[0x449b69]
    python3[0x44596d]
    python3(PyParser_ASTFromFileObject+0x89)[0x427909]
    python3[0x427b1b]
    python3(PyRun_InteractiveLoopFlags+0x76)[0x427e46]
    python3(PyRun_AnyFileExFlags+0x3c)[0x427fcc]
    python3(Py_Main+0xc44)[0x43baa4]
    python3(main+0x162)[0x41d8b2]
    /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f848c044445]
    python3[0x41d970]
    ======= Memory map: ========
    00400000-00670000 r-xp 00000000 fd:01 539422                             /usr/local/python3Dir/bin/python3.6
    0086f000-00870000 r--p 0026f000 fd:01 539422                             /usr/local/python3Dir/bin/python3.6
    00870000-008d4000 rw-p 00270000 fd:01 539422                             /usr/local/python3Dir/bin/python3.6
    008d4000-00905000 rw-p 00000000 00:00 0
    01b0a000-01bd4000 rw-p 00000000 00:00 0                                  [heap]
    7f848524c000-7f8485261000 r-xp 00000000 fd:01 287503                     /usr/lib64/libgcc_s-4.8.5-20150702.so.1
    7f8485261000-7f8485460000 ---p 00015000 fd:01 287503                     /usr/lib64/libgcc_s-4.8.5-20150702.so.1
    7f8485460000-7f8485461000 r--p 00014000 fd:01 287503                     /usr/lib64/libgcc_s-4.8.5-20150702.so.1
    7f8485461000-7f8485462000 rw-p 00015000 fd:01 287503                     /usr/lib64/libgcc_s-4.8.5-20150702.so.1
    7f8485462000-7f8485487000 r-xp 00000000 fd:01 265991                     /usr/lib64/libtinfo.so.5.9
    7f8485487000-7f8485687000 ---p 00025000 fd:01 265991                     /usr/lib64/libtinfo.so.5.9
    7f8485687000-7f848568b000 r--p 00025000 fd:01 265991                     /usr/lib64/libtinfo.so.5.9
    7f848568b000-7f848568c000 rw-p 00029000 fd:01 265991                     /usr/lib64/libtinfo.so.5.9
    7f848568c000-7f84856b2000 r-xp 00000000 fd:01 265981                     /usr/lib64/libncurses.so.5.9
    7f84856b2000-7f84858b1000 ---p 00026000 fd:01 265981                     /usr/lib64/libncurses.so.5.9
    7f84858b1000-7f84858b2000 r--p 00025000 fd:01 265981                     /usr/lib64/libncurses.so.5.9
    7f84858b2000-7f84858b3000 rw-p 00026000 fd:01 265981                     /usr/lib64/libncurses.so.5.9

    查原因:

    readline (6.2.4.1) : 
    The standard Python readline extension statically linked against the GNU readline library.
    标准Python的readline扩展静态链接反对GNU readline库。
    pip3 uninstall readline
    pip3 install gnureadlin

    参考:http://www.bubuko.com/infodetail-2766506.html

    readline模块终于安装成功了,然后测试一下python3的命令行无法使用退格键、方向键的问题,

    经测试,可以使用退格键和方向键了,回车也没有异常了

    ok,我们终于完成了整个python3环境的安装。

     
     
  • 相关阅读:
    前端优化方法(全)
    前端工程化
    HTTP状态码
    TCP三次握手和四次挥手
    在浏览器输入url后并回车发生了哪些过程
    javascript异步编程
    为什么浏览器采用多进程模型
    LeetCode——最长回文子串?
    LeetCode——字符串的排列/找到字符串中所有字母异位词
    LeetCode——24 点游戏
  • 原文地址:https://www.cnblogs.com/XiaoyangBoke/p/10037362.html
Copyright © 2020-2023  润新知