美文网首页
Ubuntu下创建指定版本的Python3虚拟环境

Ubuntu下创建指定版本的Python3虚拟环境

作者: 弦思非凡 | 来源:发表于2018-07-28 17:34 被阅读639次

在使用Python开发项目的过程中,因每个项目依赖包数量不一,各版本依赖情况不同,为保证项目间互不干扰且运行良好,通行的做法是为每个项目创建独立的Python执行环境,一般称之为Python虚拟环境。使用Python2的时候,喜欢使用virtualenv工具创建虚拟环境。近期,Python3风头正劲,项目升级为Python3优势明显,因此,考虑将开发项目逐步基于Python3重写。开始之初,首先要解决的就是Python3虚拟环境的创建。

图片来源于网络,图文无关

以下方法经实际验证,可以适用于开发环境和生产环境下指定版本的Python3虚拟环境创建。以Ubuntu16.04生产系统下创建最新Python3.7.0版本虚拟环境为例,具体方法如下:

  • 环境准备
    在Ubuntu16.04下系统默认安装了Python2.7.6和Python3.4.3,而当前的项目要求的Python版本为3.7.0,为不影响和不改变系统Python运行环境,需要下载Python3.7.0最新版本按需编译,并基于该版本创建3.7.0的虚拟环境。

    mkdir /opt/soft
    wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz 
    tar zxvf Python-3.7.0.tgz
    cd Python-3.7.0
    
  • 编译并安装Python3
    编译前指定Python3安装路径(重要)。指定python的安装路径,避免和系统已有的版本冲突,创建虚拟环境后Python3可以删除。

    ./configure --prefix=/opt/python370
    make
    make install
    
  • 创建虚拟环境
    在Python3中已经集成了虚拟环境创建命令,不需要再使用如virtualenv第三方工具,这也是Python3使用又一大好处,且可以使用绝对路径完成创建,假设创建的虚拟环境名称为t4-env。

    /opt/python370/python3.7 -m venv /opt/t4-env
    

    很简单,到这里虚拟环境就创建了,创建的同时就自带安装了pip和setuptools包管理工具。但好事多磨,还有一个问题需要等着你去解决。使用pip list查看python3安装的依赖包时出现了一下错误信息:

    pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

    很明显,ssl模块有问题,Python3无法正确使用ssl模块。定位到问题是系统中安装的openssl版本是1.0.1,而Python3.7.0需要的openssl版本是1.0.2或1.1.0以上。所以,先要解决openssl的问题,继续看以下解决方法:

  • openssl下载安装
    同样,在不明确升级openssl造成的影响,在不改变系统openssl版本的情况下,下载安装openssl。

    首先,确认安装了以下组件:

    apt-get install ssl
    apt-get install libssl-dev
    

    其次,下载openssl并安装

    cd /opt/soft
    wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
    tar -zxvf openssl-1.1.0h.tar.gz
    cd openssl-1.1.0
    ./config --prefix=/usr/local/openssl --shared
    make
    make install
    /usr/local/openssl/bin/openssl version
    

    执行最后一条命令时提示找不到库文件,错误信息如下:

    openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
    

    看来要做个软连接,,,

    ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
    ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
    

    再执行openssl版本查看命令,发现问题已经解决。成功在系统中安装了另一个1.1.0版本openssl。好,别忘了再回头解决Python3的问题。

  • 重新编译Python3并附加openssl

    cd /opt/soft/Python3.7.0
    ./configure --with-openssl=/usr/local/openssl --prefix=/opt/python370
    make clean &  make & make install
    /opt/python37/bin/python3.7 -m venv /opt/t4-env
    

至此,已经成功创建了Python3.7.0版本的虚拟环境(t4-env)。回顾下解决问题的思路,下载和编译执行版本的Python3,并采用python3官方提供的新的创建env方式,通过执行主程序将虚拟环境创建到指定目录,在创建虚拟环境后,发现pip总提示SSL错误,经检查是openssl版本低于1.0.2的原因,下载openssl并编译到指定目录,再重新指定with-openssl参数编译python3,最后,使用python3创建需要的虚拟环境。通过以上方式实现了可以获取任意指定版本的虚拟环境,且不影响原ubuntu系统python版本,在实践使用中效果明显。

相关文章

网友评论

      本文标题:Ubuntu下创建指定版本的Python3虚拟环境

      本文链接:https://www.haomeiwen.com/subject/czbomftx.html