暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一次对linux系统无影响的python3环境搭建过程及思考

749

这是一位好友写的文章,实操性很强。

背景因素

Linux系统中默认的python版本为Python 2,而根据Python的官方邮件消息,Python 2即将于2020年终止所有的支持。简单的将Python由2升级至3则会有很大的技术风险隐患,因为Linux的一些常用指令,如yum指令,会对python存在依赖。所以我们需要找到一种对linux系统无影响的python3环境搭建过程,而本文即是对此的记录和思考。

搭建过程及思考:

既然决定整个搭建过程的前置条件是对Linux系统无影响,也就限定了不能使用常规的系统目录,那么依据公司的管理规定,则约定将整个java环境搭建在/opt/app目录下。所以也就无需使用root用户,仅使用普通的ppuser用户和环境变量的设置即可完成。

在整个搭建过程中,大致可分成三个步骤,一是原始应用包的编译和构建,二是Python包的环境变量设置,三是Python包的实际部署。

一、 原始应用包的编译和构建

在原始应用包的编译和构建过程中,需要使用root用户和普通的ppuser用户,而在实际部署环节中仅需要使用ppuser用户即可。

1. 下载

登录Python的官网下载python,

https://www.python.org/downloads/

考虑到未来应用的扩展需求,下载Python 3系列的版本Python-3.7.0.tgz。

由于一些应用在运行过程中,需要使用ssl库,所以需要预先下载openssl,编译进Python的包内。

从openssl的官网下载安装包,openssl-1.0.2j.tar.gz

http://www.openssl.org/source/openssl-1.0.2j.tar.gz

2. 预安装包

由于在编译过程中存在依赖,所以需要使用root用户预安装依赖包。

    yum install zlib-devel.x86_64
    yum install libffi-devel
    yum install sqlite-devel

    3. 上传至服务器

    将Python-3.7.0.tgz和openssl-1.0.2j.tar.gz上传至服务器的/opt/app/software目录下。

    安装openssl依赖库,使用root用户,执行以下指令,

      cd /opt/app/software
      tar -xzf openssl-1.0.2j.tar.gz
      cd openssl-1.0.2j
      ./config --prefix=/usr/local/openssl -fPIC no-gost no-shared no-zlib
      make depend
      make
      make install

      此时需要注意的是在./config命令中需要指定安装目录,即--prefix参数描述的,至于其他的参数,则可以简单复制即可。

      安装Python包,使用ppuser用户,在服务器的/opt/app/software目录下创建python-3.7.0文件夹,将Python-3.7.0.tgz上传至此目录。

      使用ppuser用户,分别执行以下指令,对Python 3进行配置:

        mkdir -p opt/app/python-3.7.0
        cd opt/app/software/python-3.7.0
        tar xvf Python-3.7.0.tgz
        cd Python-3.7.0
        ./configure --prefix=/opt/app/python-3.7.0 --enable-shared CFLAGS=-fPIC --with-ssl 
        --with-openssl=/usr/local/openssl --enable-loadable-sqlite-extensions

        这里需要注意的是:

        --prefix需要指定为/opt/app/python-3.7.0,否则会安装到操作系统的默认目录中。

        --with-ssl --with-openssl=/usr/local/openssl,需要与之前安装openssl的路径保持一致

        --enable-loadable-sqlite-extensions,是表示启用sqllite扩展内容,可以使用sqlite的库,方便后续一些应用的操作。

        为了支持ssl,还需要执行以下操作。

          cd Modules
          vi Setup.dist

          在这里,需要修改Setup.dist文件,启用ssl的设置。去掉注释,启用以下内容,

            _socket socketmodule.c
            SSL=/usr/local/ssl
            _ssl _ssl.c \
            -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
            -L$(SSL)/lib -lssl -lcrypto

            编译并安装

              make
              make install

              注意:make install时会报错,属于正常情况,因为ppuser是普通用户,没有系统权限。这是符合预期的,因为我们并不期望修改系统默认的python包。

              到此,python 3的安装包的编译、安装环节已经完成,进行测试验证。

                python
                import ssl
                import sqlite3

                二、 Python包的环境变量设置和部署

                1. 环境变量设置

                众所周知,linux系统各个应用程序的运行都是依靠环境变量设置的内容,所以我们既然不期望修改系统默认的python 2.6,就应该为python 3.7采用独立的环境变量配置,

                  cd /opt/app/python-3.7.0
                  touch python-3.7.env
                  vi python-3.7.env

                  在python-3.7.env中填写如下内容:

                    # set python 3.7 env
                    PYTHON_HOME=/opt/app/python-3.7.0
                    PATH=$PYTHON_HOME/bin/:$PATH
                    export PATH
                    LD_LIBRARY_PATH=$PYTHON_HOME/lib:$LD_LIBRARY_PATH
                    export LD_LIBRARY_PATH
                    PYTHONPATH=$PYTHON_HOME/lib/python3.7/site-packages
                    export PYTHONPATH

                    这个环境变量设置脚本的目的是声明python的bin目录放入PATH,声明动态链接库、以及声明python所需的包路径。

                    2. 创建python软链接

                    在平时使用中,大家更习惯使用python、pip进行安装python的包,而不是python3、pip3,所以需要使用软链接进行指向,

                      cd /opt/app/python-3.7.0/bin
                      ln -s python3 python
                      ln -s pip3 pip

                      3. python打包

                      我们将已经编译好,且配置了环境变量文件的python-3.7.0进行打包,方便后续的实际部署使用。

                        /opt/app/software/python-3.7.0
                        tar cvf Python-3.7.0.tar python-3.7.0

                        此时,生成的Python-3.7.0.tar包就是实际部署的包文件。

                        三、 Python包的实际部署

                        1. 上传文件

                        在需要部署的服务器上,创建相应的目录文件。

                          mkdir -p opt/app
                          cd opt/app

                          上传Python-3.7.0.tar包至此目录,执行解压缩Python-3.7.0.tar包,

                            tar xvf python-3.7.0.tar

                            则在/opt/app下,生成了相应的python-3.7.0目录,

                            2. 执行并测试

                            此时,当用户登陆操作系统时,使用的是python 2的程序,可通过如下指令查看。

                              python -V

                              结果返回,

                              这种情况下,并不影响linux原有环境命令的任何使用。当用户需要执行python3程序时,可通过以下指令执行首先声明环境变量,

                                . opt/app/python-3.7.0/python-3.7.env

                                然后执行具体的python指令检查版本,

                                  python -V

                                  结果返回,

                                  思考

                                  至此,实现了Linux系统中默认的python2版本与我们引入的python3版本同时并存而互不影响。

                                  从这里面可以看出,虽然我们在编译、环境变量脚本、打包等环节的操作较为繁琐,但一旦进行实际部署时,就仅需要上传文件后解压缩即可。

                                  这就体现了在平时设计中将有限次数的操作详细化、反复重复的操作的精简化。同时,若哪天不再使用python3程序时,仅需将/opt/app/python-3.7.0文件夹直接删除即可。

                                  近期热文:

                                  PLSQL Developer几个可能的隐患

                                  从70万字SRE神作提炼出的7千字精华文章

                                  从数据误删到全量恢复的惊险记录

                                  last_load_time和last_active_time的选择

                                  truncate分区表的操作,会导致全局索引失效?

                                  NUMBER长度的误解

                                  decode函数再挖掘

                                  《decode函数的妙用》网友的两个问题解答

                                  decode函数的妙用
                                  公众号600篇文章分类和索引

                                  最后修改时间:2020-04-28 08:13:15
                                  文章转载自bisal的个人杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                  评论