Linux 下的 Python 多版本管理(pyenv)

简介
提到 Python 环境管理,更多人可能会首先想到 virtualenv。但与用于创建独立包环境的 virtualenv 不同,pyenv 的作用仅限于维护不同版本的 Python。它的使用不依赖于 Python,是一个简单、独立的纯 shell 脚本工具。pyenv 也以 pyenv-virtualenv 插件的形式支持 virtualenv,强烈建议使用。安装后比较方便的是可以在你 cd 到项目目录时自动切换相应的虚拟环境,而不用老是 source.

软件环境
Linux 下安装 pyenv 前需要做一些准备工作,详情参考 Requirements 页面。
Ubuntu(Deepin) 系统就需要先执行如下命令:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm

手动安装

  1. 将 pyenv 检出到你想安装的目录。建议路径为:$HOME/.pyenv
 $ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  1. 添加环境变量。PYENV_ROOT 指向 pyenv 检出的根目录,并向 $PATH 添加 $PYENV_ROOT/bin 以提供访问 pyenv 这条命令的路径
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
  1. 向 shell 添加 pyenv init 以启用 shims 和命令补完功能
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
  1. 重启 shell(因为修改了 $PATH)
$ exec "$SHELL"

pyenv主要的命令

pyenv versions
查看当前 pyenv 可检测到的所有版本,处于激活状态的版本前以 * 标示。

$ pyenv versions
 2.5.6
 2.6.8
*2.7.6 (set by /home/yyuu/.pyenv/version)
 3.3.3
 jython-2.5.3
 pypy-2.2.1

pyenv version
查看当前处于激活状态的版本,括号中内容表示这个版本是由哪条途径激活的(global、local、shell)

$ pyenv version
2.7.6 (set by /home/yyuu/.pyenv/version)

pyenv install
使用 python-build(一个插件) 安装一个 Python 版本,到 $PYENV_ROOT/versions 路径下。

$ pyenv install -v 2.7.3

建议添加 -v 参数用于显示细节。python-build 会首先尝试从一个镜像站点下载包,此时可以去 /tmp/python-build.xxx 里面关心一下下载速度。如果太慢,可以直接在 shell 里 ctrl-c 终止此次下载,然后 python-build 会自动去 python.org/ftp 下载。不一定哪个更快。

pyenv uninstall
卸载一个版本

$ pyenv uninstall 2.7.3

pyenv rehash
为所有已安装的可执行文件 (如:~/.pyenv/versions//bin/) 创建 shims,因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令

$ pyenv install 2.7.3
$ pyenv rehash

pyenv global
设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。

$ pyenv global 3.4.0

pyenv local
设置面向程序的本地版本,通过将版本号写入当前目录下的 .python-version 文件的方式。通过这种方式设置的 Python 版本优先级较 global 高。pyenv 会从当前目录开始向上逐级查找 .python-version 文件,直到根目录为止。若找不到,就用 global 版本。

$ pyenv local 2.7.3

取消设置本地版本

$ pyenv local --unset

pyenv shell
设置面向 shell 的 Python 版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。这个版本的优先级比 local 和 global 都要高。--unset 参数可以用于取消当前 shell 设定的版本。

$ pyenv shell pypy-2.2.1
$ pyenv shell --unset

安装本地Python

  1. 先把源码下载到本地
$ pyenv install 3.5.0                                                                                                                                                                           
$ Downloading Python-3.5.0.tgz...
$ https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz

https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz下载到本地

  1. 计算sha64位码(拷贝的别人的代码)
# -*- coding:utf-8 -*-
import os
import hashlib
import sys
__author__ = 'dave'
def get_hash(filepath):
    if not os.path.exists(filepath):
        print('File not exists.')
        return
    # algo = hashlib.md5()
    algo = hashlib.sha256()
    with open(filepath, 'rb') as f:
        while True:
            data = f.read(4096)
            if not data:
                break
            algo.update(data)
    return algo.hexdigest()
if __name__ == '__main__':
    md5sum = get_hash('Python-3.5.0.tar.xz')
    print(md5sum)
    print(len(md5sum))

然后把文件名改成sha64位码

  1. 终端进入python安装文件所在的文件夹, 运行
    python3 -m http.server
    或者
    python2 -m SimpleHTTPServer
  2. 新开一个终端窗口,运行
    export PYTHON_BUILD_MIRROR_URL="http://127.0.0.1:8000/"
    或者
    export PYTHON_BUILD_MIRROR_URL="http://0.0.0.0:8000/"
  3. 运行 pyenv install 3.5.0 很快就安装完成了.

你可能感兴趣的:(Linux 下的 Python 多版本管理(pyenv))