IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Python:虚拟环境【pyenv】

    Adamhuan发表于 2016-09-23 08:46:31
    love 0

    获取【pyenv】的程序:

    [root@zabbix-server ~]# git clone https://github.com/yyuu/pyenv.git ~/.pyenv
    Cloning into '/root/.pyenv'...
    remote: Counting objects: 13794, done.
    remote: Compressing objects: 100% (5/5), done.
    remote: Total 13794 (delta 0), reused 0 (delta 0), pack-reused 13789
    Receiving objects: 100% (13794/13794), 2.44 MiB | 521.00 KiB/s, done.
    Resolving deltas: 100% (9570/9570), done.
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# ls -a ~/ | grep --color pyenv
    drwxr-xr-x  10 root root 4096 |2016-09-23|01:06:37 .pyenv
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# ls -a ~/.pyenv/
    total 88
    dr-xr-x---. 15 root root  4096 |2016-09-23|01:06:29 ..
    -rw-r--r--   1 root root    35 |2016-09-23|01:06:37 .vimrc
    -rw-r--r--   1 root root   161 |2016-09-23|01:06:37 .travis.yml
    -rw-r--r--   1 root root 14092 |2016-09-23|01:06:37 README.md
    -rw-r--r--   1 root root   285 |2016-09-23|01:06:37 Makefile
    -rw-r--r--   1 root root  1092 |2016-09-23|01:06:37 LICENSE
    -rw-r--r--   1 root root    89 |2016-09-23|01:06:37 .gitignore
    -rw-r--r--   1 root root  3390 |2016-09-23|01:06:37 CONDUCT.md
    drwxr-xr-x   2 root root    56 |2016-09-23|01:06:37 completions
    -rw-r--r--   1 root root  7522 |2016-09-23|01:06:37 COMMANDS.md
    -rw-r--r--   1 root root 20236 |2016-09-23|01:06:37 CHANGELOG.md
    drwxr-xr-x   2 root root    18 |2016-09-23|01:06:37 bin
    -rw-r--r--   1 root root    19 |2016-09-23|01:06:37 .agignore
    drwxr-xr-x   3 root root    42 |2016-09-23|01:06:37 plugins
    drwxr-xr-x   2 root root  4096 |2016-09-23|01:06:37 libexec
    drwxr-xr-x   2 root root    87 |2016-09-23|01:06:37 src
    drwxr-xr-x   4 root root    30 |2016-09-23|01:06:37 pyenv.d
    drwxr-xr-x  10 root root  4096 |2016-09-23|01:06:37 .
    drwxr-xr-x   3 root root  4096 |2016-09-23|01:06:37 test
    drwxr-xr-x   8 root root   152 |2016-09-23|01:06:37 .git
    [root@zabbix-server ~]#

    配置环境变量:

    [root@zabbix-server ~]# vi ~/.bash_profile 
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# cat ~/.bash_profile
    # .bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
    	. ~/.bashrc
    fi
    
    # User specific environment and startup programs
    
    PATH=$PATH:$HOME/bin
    
    export PATH
    
    # for PYENV
    export PYENV_ROOT="/root/.pyenv"
    export PATH="$PYENV_ROOT/bin:$PATH"
    eval "$(pyenv init -)"
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# source ~/.bash_profile
    [root@zabbix-server ~]#

    这样就安装完了。

    列出可以安装的python版本:

    [root@zabbix-server ~]# pyenv install --list
    Available versions:
      2.1.3
      2.2.3
      2.3.7
      2.4
      2.4.1
      2.4.2
      2.4.3
      2.4.4
      2.4.5
      2.4.6
      2.5
      2.5.1
      2.5.2
      2.5.3
      2.5.4
      2.5.5
      2.5.6
      2.6.6
      2.6.7
      2.6.8
      2.6.9
      2.7-dev
      2.7
      2.7.1
      2.7.2
      2.7.3
      2.7.4
      2.7.5
      2.7.6
      2.7.7
      2.7.8
      2.7.9
      2.7.10
      2.7.11
      2.7.12
      3.0.1
      3.1
      3.1.1
      3.1.2
      3.1.3
      3.1.4
      3.1.5
      3.2-dev
      3.2
      3.2.1
      3.2.2
      3.2.3
      3.2.4
      3.2.5
      3.2.6
      3.3.0
      3.3-dev
      3.3.1
      3.3.2
      3.3.3
      3.3.4
      3.3.5
      3.3.6
      3.4.0
      3.4-dev
      3.4.1
      3.4.2
      3.4.3
      3.4.4
      3.4.5
      3.5.0
      3.5-dev
      3.5.1
      3.5.2
      3.6.0b1
      3.6-dev
      anaconda-1.4.0
      anaconda-1.5.0
      anaconda-1.5.1
      anaconda-1.6.0
      anaconda-1.6.1
      anaconda-1.7.0
      anaconda-1.8.0
      anaconda-1.9.0
      anaconda-1.9.1
      anaconda-1.9.2
      anaconda-2.0.0
      anaconda-2.0.1
      anaconda-2.1.0
      anaconda-2.2.0
      anaconda-2.3.0
      anaconda-2.4.0
      anaconda-4.0.0
      anaconda2-2.4.0
      anaconda2-2.4.1
      anaconda2-2.5.0
      anaconda2-4.0.0
      anaconda2-4.1.0
      anaconda2-4.1.1
      anaconda3-2.0.0
      anaconda3-2.0.1
      anaconda3-2.1.0
      anaconda3-2.2.0
      anaconda3-2.3.0
      anaconda3-2.4.0
      anaconda3-2.4.1
      anaconda3-2.5.0
      anaconda3-4.0.0
      anaconda3-4.1.0
      anaconda3-4.1.1
      ironpython-dev
      ironpython-2.7.4
      ironpython-2.7.5
      jython-dev
      jython-2.5.0
      jython-2.5-dev
      jython-2.5.1
      jython-2.5.2
      jython-2.5.3
      jython-2.5.4-rc1
      jython-2.7.0
      jython-2.7.1b1
      jython-2.7.1b2
      jython-2.7.1b3
      miniconda-latest
      miniconda-2.2.2
      miniconda-3.0.0
      miniconda-3.0.4
      miniconda-3.0.5
      miniconda-3.3.0
      miniconda-3.4.2
      miniconda-3.7.0
      miniconda-3.8.3
      miniconda-3.9.1
      miniconda-3.10.1
      miniconda-3.16.0
      miniconda-3.18.3
      miniconda2-latest
      miniconda2-3.18.3
      miniconda2-3.19.0
      miniconda2-4.0.5
      miniconda2-4.1.11
      miniconda3-latest
      miniconda3-2.2.2
      miniconda3-3.0.0
      miniconda3-3.0.4
      miniconda3-3.0.5
      miniconda3-3.3.0
      miniconda3-3.4.2
      miniconda3-3.7.0
      miniconda3-3.8.3
      miniconda3-3.9.1
      miniconda3-3.10.1
      miniconda3-3.16.0
      miniconda3-3.18.3
      miniconda3-3.19.0
      miniconda3-4.0.5
      miniconda3-4.1.11
      pypy-c-jit-latest
      pypy-c-nojit-latest
      pypy-dev
      pypy-stm-2.3
      pypy-portable-2.3.1
      pypy-portable-2.4
      pypy-portable-2.5
      pypy-portable-2.5.1
      pypy-stm-2.5.1
      pypy-portable-2.6
      pypy-portable-2.6.1
      pypy-portable-4.0
      pypy-portable-4.0.1
      pypy-portable-5.0
      pypy-portable-5.0.1
      pypy-portable-5.1
      pypy-portable-5.1.1
      pypy-portable-5.3.1
      pypy-portable-5.4
      pypy-portable-5.4.1
      pypy-1.5-src
      pypy-1.5
      pypy-1.6
      pypy-1.7-dev
      pypy-1.7
      pypy-1.8-dev
      pypy-1.8
      pypy-1.9-dev
      pypy-1.9
      pypy-2.0-dev
      pypy-2.0-src
      pypy-2.0
      pypy-2.0.1-src
      pypy-2.0.1
      pypy-2.0.2-src
      pypy-2.0.2
      pypy-2.1-src
      pypy-2.1
      pypy-2.2-src
      pypy-2.2
      pypy-2.2.1-src
      pypy-2.2.1
      pypy-2.3-src
      pypy-2.3
      pypy-2.3.1-src
      pypy-2.3.1
      pypy-2.4.0-src
      pypy-2.4.0
      pypy-2.4-beta1-src
      pypy-2.4-beta1
      pypy-2.5.0-src
      pypy-2.5.0
      pypy-2.5.1-src
      pypy-2.5.1
      pypy-2.6.0-src
      pypy-2.6.0
      pypy-2.6.1-src
      pypy-2.6.1
      pypy-4.0.0-src
      pypy-4.0.0
      pypy-4.0.1-src
      pypy-4.0.1
      pypy-5.0.0-src
      pypy-5.0.0
      pypy-5.0.1-src
      pypy-5.0.1
      pypy-5.1-src
      pypy-5.1
      pypy-5.1.1-src
      pypy-5.1.1
      pypy-5.3-src
      pypy-5.3
      pypy-5.3.1-src
      pypy-5.3.1
      pypy-5.4-src
      pypy-5.4
      pypy-5.4.1-src
      pypy-5.4.1
      pypy2-5.3-src
      pypy2-5.3
      pypy2-5.3.1-src
      pypy2-5.3.1
      pypy2-5.4-src
      pypy2-5.4
      pypy2-5.4.1-src
      pypy2-5.4.1
      pypy3-dev
      pypy3-portable-2.3.1
      pypy3-portable-2.4
      pypy3-2.3.1-src
      pypy3-2.3.1
      pypy3-2.4.0-src
      pypy3-2.4.0
      pypy3.3-5.2-alpha1-src
      pypy3.3-5.2-alpha1
      stackless-dev
      stackless-2.7-dev
      stackless-2.7.2
      stackless-2.7.3
      stackless-2.7.4
      stackless-2.7.5
      stackless-2.7.6
      stackless-2.7.7
      stackless-2.7.8
      stackless-3.2-dev
      stackless-3.2.2
      stackless-3.2.5
      stackless-3.3-dev
      stackless-3.3.5
      stackless-3.4.1
    [root@zabbix-server ~]#

    查看当前的系统的Python版本:

    [root@zabbix-server ~]# rpm -qa | grep --color ^python
    python-javapackages-3.4.1-6.el7_0.noarch
    python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch
    python-ldap-2.4.15-2.el7.x86_64
    python-urwid-1.1.1-3.el7.x86_64
    python-IPy-0.75-6.el7.noarch
    python-slip-dbus-0.4.0-2.el7.noarch
    python-di-0.3-2.el7.noarch
    python-pyudev-0.15-6.el7.noarch
    python-netaddr-0.7.5-7.el7.noarch
    python-caribou-0.4.11-3.el7.noarch
    python-sssdconfig-1.12.2-58.el7.noarch
    python-lxml-3.2.1-4.el7.x86_64
    python-deltarpm-3.6-3.el7.x86_64
    python-slip-0.4.0-2.el7.noarch
    python-dns-1.11.1-2.20140901git9329daf.el7.noarch
    python-coverage-3.6-0.5.b3.el7.x86_64
    python-iniparse-0.4-9.el7.noarch
    python-chardet-2.0.1-7.el7.noarch
    python-rtslib-2.1.fb50-1.el7.noarch
    python-pycurl-7.19.0-17.el7.x86_64
    python-pwquality-1.2.3-4.el7.x86_64
    python-libs-2.7.5-16.el7.x86_64
    python-inotify-0.9.4-4.el7.noarch
    python-meh-0.25.2-1.el7.noarch
    python-brlapi-0.6.0-9.el7.x86_64
    python-dmidecode-3.10.13-11.el7.x86_64
    python-cups-1.9.63-6.el7.x86_64
    python-yubico-1.2.1-3.el7.noarch
    python-pyasn1-0.1.6-2.el7.noarch
    python-setuptools-0.9.8-3.el7.noarch
    python-kerberos-1.1-15.el7.x86_64
    python-kmod-0.9-4.el7.x86_64
    python-2.7.5-16.el7.x86_64
    python-configshell-1.1.fb14-1.el7.noarch
    python-blivet-0.61.0.26-1.el7.noarch
    python-decorator-3.4.0-3.el7.noarch
    python-six-1.3.0-4.el7.noarch
    python-ethtool-0.8-5.el7.x86_64
    python-qrcode-core-5.0.1-1.el7.noarch
    python-configobj-4.7.2-7.el7.noarch
    python-krbV-1.0.90-8.el7.x86_64
    python-augeas-0.4.1-5.el7.noarch
    python-pyblock-0.53-6.el7.x86_64
    python-backports-1.0-8.el7.x86_64
    python-kitchen-1.1.1-5.el7.noarch
    python-urlgrabber-3.10-6.el7.noarch
    python-dateutil-1.5-7.el7.noarch
    python-meh-gui-0.25.2-1.el7.noarch
    python-nss-0.16.0-2.el7.x86_64
    [root@zabbix-server ~]#
    [root@zabbix-server ~]# whereis python
    python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /usr/include/python2.7 /usr/share/man/man1/python.1.gz
    [root@zabbix-server ~]#

    可以看到,当前系统中的Python是2.7.5的版本:【python-2.7.5-16.el7.x86_64】。

    当前最新版本为:
    1. 3.5.2
    2. 2.7.12

    用pyenv安装具体版本前,检查系统软件包:
    yum install -y zlib* readline* bzip2* openssl* sqlite*

    否则,会出现这样的错误:

    WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
    ERROR: The Python zlib extension was not compiled. Missing the zlib?
    
    Please consult to the Wiki page to fix the problem.
    https://github.com/yyuu/pyenv/wiki/Common-build-problems
    
    
    BUILD FAILED (RedHatEnterpriseServer 5.10 using python-build 1.0.2)
    
    Inspect or clean up the working tree at /tmp/python-build.20160923005926.29366
    Results logged to /tmp/python-build.20160923005926.29366.log
    
    Last 10 log lines:
    rm -f /root/.pyenv/versions/2.7.9/share/man/man1/python.1
    (cd /root/.pyenv/versions/2.7.9/share/man/man1; ln -s python2.1 python.1)
    if test "xno" != "xno"  ; then \
    		case no in \
    			upgrade) ensurepip="--upgrade" ;; \
    			install|*) ensurepip="" ;; \
    		esac; \
    		 ./python -E -m ensurepip \
    			$ensurepip --root=/ ; \
    	fi

    给系统新装一个Python版本:3.5.2。

    [root@zabbix-server ~]# pyenv install -v 3.5.2
    /tmp/python-build.20160923011056.42291 ~
    Downloading Python-3.5.2.tar.xz...
    -> https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz
    
    (... ....过多的输出。)
    
    rm -f /root/.pyenv/versions/3.5.2/share/man/man1/python3.1
    (cd /root/.pyenv/versions/3.5.2/share/man/man1; ln -s python3.5.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 indexes: https://pypi.python.org/simple
    Collecting setuptools
    Collecting pip
    Installing collected packages: setuptools, pip
    Successfully installed pip-8.1.1 setuptools-20.10.1
    Installed Python-3.5.2 to /root/.pyenv/versions/3.5.2
    
    /tmp/python-build.20160923012503.70564 ~
    ~
    [root@zabbix-server ~]#

    这样,就安装成功了。

    安装后查看当前系统状态:

    [root@zabbix-server ~]# whereis python
    python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /usr/include/python2.7 /root/.pyenv/shims/python /root/.pyenv/shims/python3.5 /root/.pyenv/shims/python3.5-config /root/.pyenv/shims/python3.5m /root/.pyenv/shims/python3.5m-config /usr/share/man/man1/python.1.gz
    [root@zabbix-server ~]#

    切换到版本:3.5.2。

    [root@zabbix-server ~]# pyenv version
    system (set by /root/.pyenv/version)
    [root@zabbix-server ~]#
    [root@zabbix-server ~]# pyenv global 3.5.2
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# pyenv version
    3.5.2 (set by /root/.pyenv/version)
    [root@zabbix-server ~]#

    安装:pyenv-virtualenv

    [root@zabbix-server ~]# git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenvCloning into '/root/.pyenv/plugins/pyenv-virtualenv'...
    remote: Counting objects: 1856, done.
    remote: Total 1856 (delta 0), reused 0 (delta 0), pack-reused 1856
    Receiving objects: 100% (1856/1856), 529.51 KiB | 190.00 KiB/s, done.
    Resolving deltas: 100% (1272/1272), done.
    [root@zabbix-server ~]#

    配置环境变量:

    [root@zabbix-server ~]# vi ~/.bash_profile 
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# cat ~/.bash_profile 
    # .bash_profile
    
    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
    	. ~/.bashrc
    fi
    
    # User specific environment and startup programs
    
    PATH=$PATH:$HOME/bin
    
    export PATH
    
    # for PYENV
    export PYENV_ROOT="/root/.pyenv"
    export PATH="$PYENV_ROOT/bin:$PATH"
    eval "$(pyenv init -)"
    
    # for PYENV VIRTUALENV
    eval "$(pyenv virtualenv-init -)"
    
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# source ~/.bash_profile 
    [root@zabbix-server ~]#

    创建虚拟环境:

    [root@zabbix-server ~]# pyenv virtualenv 3.5.2 env_python_352
    Ignoring indexes: https://pypi.python.org/simple
    Requirement already satisfied (use --upgrade to upgrade): setuptools in /root/.pyenv/versions/3.5.2/envs/env_python_352/lib/python3.5/site-packages
    Requirement already satisfied (use --upgrade to upgrade): pip in /root/.pyenv/versions/3.5.2/envs/env_python_352/lib/python3.5/site-packages
    [root@zabbix-server ~]#

    使用虚拟环境,并退出:
    RHEL5:

    [root@linux-center ~]# python -V
    Python 2.4.3
    [root@linux-center ~]# 
    [root@linux-center ~]# pyenv virtualenv 2.7.9 env279
    Downloading/unpacking virtualenv
      Downloading virtualenv-15.0.3-py2.py3-none-any.whl (3.5MB): 3.5MB downloaded
    Installing collected packages: virtualenv
    Successfully installed virtualenv
    Cleaning up...
    New python executable in /root/.pyenv/versions/2.7.9/envs/env279/bin/python2.7
    Also creating executable in /root/.pyenv/versions/2.7.9/envs/env279/bin/python
    Installing setuptools, pip, wheel...done.
    Ignoring indexes: https://pypi.python.org/simple/
    Requirement already satisfied (use --upgrade to upgrade): setuptools in /root/.pyenv/versions/2.7.9/envs/env279/lib/python2.7/site-packages
    Requirement already satisfied (use --upgrade to upgrade): pip in /root/.pyenv/versions/2.7.9/envs/env279/lib/python2.7/site-packages
    Cleaning up...
    [root@linux-center ~]# 
    [root@linux-center ~]# python -V
    Python 2.4.3
    [root@linux-center ~]# 
    [root@linux-center ~]# pyenv activate env279
    pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
    (env279) [root@linux-center ~]# 
    (env279) [root@linux-center ~]# python -V
    Python 2.7.9
    (env279) [root@linux-center ~]# 
    (env279) [root@linux-center ~]# pyenv deactivate 
    [root@linux-center ~]# 
    [root@linux-center ~]# python -V
    Python 2.4.3
    [root@linux-center ~]#

    RHEL7:

    [root@zabbix-server ~]# pyenv activate env_python_352
    pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
    (env_python_352) [root@zabbix-server ~]# 
    (env_python_352) [root@zabbix-server ~]# python -V
    Python 3.5.2
    (env_python_352) [root@zabbix-server ~]# 
    (env_python_352) [root@zabbix-server ~]# pyenv deactivate 
    [root@zabbix-server ~]# 
    
    [root@zabbix-server ~]# python -V
    Python 3.5.2
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# pyenv virtualenv 2.7.12 env2712
    Collecting virtualenv
      Downloading virtualenv-15.0.3-py2.py3-none-any.whl (3.5MB)
        100% |████████████████████████████████| 3.5MB 104kB/s 
    Installing collected packages: virtualenv
    Successfully installed virtualenv-15.0.3
    You are using pip version 8.1.1, however version 8.1.2 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    New python executable in /root/.pyenv/versions/2.7.12/envs/env2712/bin/python2.7
    Also creating executable in /root/.pyenv/versions/2.7.12/envs/env2712/bin/python
    Installing setuptools, pip, wheel...done.
    Ignoring indexes: https://pypi.python.org/simple
    Requirement already satisfied (use --upgrade to upgrade): setuptools in /root/.pyenv/versions/2.7.12/envs/env2712/lib/python2.7/site-packages
    Requirement already satisfied (use --upgrade to upgrade): pip in /root/.pyenv/versions/2.7.12/envs/env2712/lib/python2.7/site-packages
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# python -V
    Python 3.5.2
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# pyenv activate env2712
    pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
    (env2712) [root@zabbix-server ~]# 
    (env2712) [root@zabbix-server ~]# python -V
    Python 2.7.12
    (env2712) [root@zabbix-server ~]# 
    (env2712) [root@zabbix-server ~]# pyenv deactivate 
    [root@zabbix-server ~]# 
    [root@zabbix-server ~]# python -V
    Python 3.5.2
    [root@zabbix-server ~]#

    如果你切换的虚拟环境不存在,你会遇到这样的错误:

    [root@zabbix-server ~]# pyenv activate not_exsist
    pyenv-virtualenv: version `not_exsist' is not a virtualenv
    [root@zabbix-server ~]#

    ——————————————
    Done。



沪ICP备19023445号-2号
友情链接