美文网首页Python运维与数据分析后台技术python自动化运维
Centos 下 pyenv 安装 python 多版本(增强版

Centos 下 pyenv 安装 python 多版本(增强版

作者: 菩提老鹰 | 来源:发表于2016-06-08 15:24 被阅读6596次

    [toc]


    Centos 下 pyenv 安装 python 多版本

    在学习和利用python开发的很多情况下,需要多版本的Python并存。此时需要在系统中安装多个Python,但又不能影响系统自带的 Python。pyenv 就是这样一个 Python 版本管理器。

    当前情况

    ## 当天系统
    root@pts/2 $ cat /etc/redhat-release 
    CentOS Linux release 7.1.1503 (Core) 
    
    ## 当前 python 情况
    root@pts/2 $ python
    python            python2           python2.7         python2.7-config  python2-config    python-config     
    root@pts/2 $ python -V
    Python 2.7.5
    

    安装 pyenv

    ## 安装
    root@pts/2 $ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
    Cloning into '/root/.pyenv'...
    remote: Counting objects: 12744, done.
    remote: Total 12744 (delta 0), reused 0 (delta 0), pack-reused 12744
    Receiving objects: 100% (12744/12744), 2.26 MiB | 453.00 KiB/s, done.
    Resolving deltas: 100% (8837/8837), done.
    
    ## 配置
    root@pts/2 $ vim ~/.bashrc 
    root@pts/2 $ cat ~/.bashrc 
        # .bashrc
        
        # User specific aliases and functions
        
        alias rm='rm -i'
        alias cp='cp -i'
        alias mv='mv -i'
        
        ## add by liuchao at 20160607
        export PYENV_ROOT="$HOME/.pyenv"
        export PATH="$PYENV_ROOT/bin:$PATH"
        eval "$(pyenv init -)"
        
        # Source global definitions
        if [ -f /etc/bashrc ]; then
            . /etc/bashrc
        fi
    
    ## 配置生效
        ### 方式一
        重新打开一个session
        ### 方式二
        source ~/.bashrc
        ### 方式三
        exec $SHELL -l
    

    安装多版本

    检查pyenv 安装的版本

    root@pts/3 $ pyenv versions
    * system (set by /root/.pyenv/version)
    

    安装之前需要安装一些依赖包,否则会报如下错误

    root@pts/2 $ pyenv install 3.4.4
    Downloading Python-3.4.4.tgz...
    -> https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tgz
    Installing Python-3.4.4...
    WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
    WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
    ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
    
    Please consult to the Wiki page to fix the problem.
    https://github.com/yyuu/pyenv/wiki/Common-build-problems
    
    
    BUILD FAILED (CentOS Linux 7 using python-build 20160509-25-g4c654d7)
    
    Inspect or clean up the working tree at /tmp/python-build.20160607105740.3166
    Results logged to /tmp/python-build.20160607105740.3166.log
    
    Last 10 log lines:
    (cd /root/.pyenv/versions/3.4.4/share/man/man1; ln -s python3.4.1 python3.1)
    if test "xupgrade" != "xno"  ; then \
        case upgrade in \
            upgrade) ensurepip="--upgrade" ;; \
            install|*) ensurepip="" ;; \
        esac; \
         ./python -E -m ensurepip \
            $ensurepip --root=/ ; \
    fi
    Ignoring ensurepip failure: pip 7.1.2 requires SSL/TLS
    

    安装相关依赖

    yum install readline readline-devel readline-static -y
    yum install openssl openssl-devel openssl-static -y
    yum install sqlite-devel -y
    yum install bzip2-devel bzip2-libs -y
    

    安装多版本

    • pyenv 安装原理:
      从官网下载对应的版本压缩包到/tmp/目录,然后在/tmp/目录 执行编译安装,安装到~/.pyenv/versions/下面
    • pyenv 安装很慢的解决办法:
      可以先手动下载对应的版本压缩包,放到~/.pyenv/cache/下面,pyenv会校验md5值和完整性,确认无误的话就不会重新下载直接从这里安装

    ** >>附件修改 201606008<<**
    详细可以参考 pyenv ~/.pyenv/cache 不生效问题

    关于上面说的如果用 pyenv install 安装很慢的话,可以下载版本压缩包到 ~/.pyenv/cache/ 目录,这里有个很关键的问题所在,具体如下:

    添加 -v 参数安装的时候看到下载的文件名字是 'Python-3.4.4.tgz',如果
    把这个文件名copy到 ~/.pyenv/cache/ 下面的是不起作用的,还是会继续
    重新下载。
    
    查找问题后发现,-v 显示的是下载 'Python-3.4.4.tgz', 但是
    在/tmp/python-xxxxxx.xxxx/ 目录下面却显示的是 'Python-3.4.4.tar.gz' 文件。
    
    所以把下载的 'Python-3.4.4.tgz' 改名为 'Python-3.4.4.tar.gz' 后放到
     ~/.pyenv/cache/ 下面后,然后 pyenv install 3.4.4 -v 就不会重新下载了。
    
    注意: 
        不能采用把 Python-3.4.4.tgz 解压之后才压缩成 Python-3.4.4.tar.gz 的方式,
    因为这样的话会导致源文件的md5值发生变化。而校验失败重新下载
    

    -v 显示完整的安装过程

    root@pts/2 $ pyenv install 3.4.4 `[-v]`
    Downloading Python-3.4.4.tgz...
    -> https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tgz
    Installing Python-3.4.4...
    Installed Python-3.4.4 to /root/.pyenv/versions/3.4.4
    

    检查

    ## 查看目前已经安装的
    ## system 表示系统安装的
    ## * 代表当前使用的是那个版本
    root@pts/3 $ pyenv versions
    * system (set by /root/.pyenv/version)
      3.4.4
    

    更新数据库

    pyenv rehash 
    

    设置全局python

    root@pts/3 $ python -V
    Python 2.7.5
    
    root@pts/3 $ pyenv global 3.4.4 
    root@pts/3 $ pyenv versions
      system
    * 3.4.4 (set by /root/.pyenv/version)
    
    root@pts/3 $ python -V
    Python 3.4.4
    

    设置临时python版本

    ## 在当前session执行
    pyenv local 2.7.11
    pyenv shell 2.7.11
    
    ## 检查发现是从/tmp来设置的临时
    root@pts/3 $ pyenv versions
      system
    * 2.7.11 (set by /tmp/python-build.20160607105740.3166/Python-3.4.4/.python-version)
      3.4.4
    
    ## 在另外一个session中验证
    root@pts/5 $ python -V
    Python 3.4.4
    Dev-mysql-mem [~] 2016-06-07 11:44:30
    root@pts/5 $ pyenv versions 
    system
    2.7.11
    * 3.4.4 (set by /root/.pyenv/version)
    

    Refer to

    pyenv命令列表


    ---------------------------------------更多精彩请关注-------------------------------------

    公众号: Colinws工作室

    相关文章

      网友评论

      • Megadotzip:我开始也是安装不上,但是我怎么知道安装的依赖都有什么,我应该去哪里查需要什么依赖?还有哪些依赖没装上呢?求告知。
        菩提老鹰:一开始都是不注意依赖,在安装报错的时候,根据报错信息才能知道缺失了那些依赖,比如上文提到的:

        ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

        所以两种方式:
        1,根据报错信息,缺失什么去补全什么,这种方式需要自己趟坑,比较麻烦
        2,“站在巨人的肩上”,也就是查阅网上别人遇到的同样的问题,然后我们借用他们的解决方式,

        希望回答能解决你的问题。谢谢!

      本文标题:Centos 下 pyenv 安装 python 多版本(增强版

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