简介
提到 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
手动安装
- 将 pyenv 检出到你想安装的目录。建议路径为:$HOME/.pyenv
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
- 添加环境变量。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
- 向 shell 添加 pyenv init 以启用 shims 和命令补完功能
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
- 重启 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
- 先把源码下载到本地
$ 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
下载到本地
- 计算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位码
- 终端进入python安装文件所在的文件夹, 运行
python3 -m http.server
或者
python2 -m SimpleHTTPServer
- 新开一个终端窗口,运行
export PYTHON_BUILD_MIRROR_URL="http://127.0.0.1:8000/"
或者
export PYTHON_BUILD_MIRROR_URL="http://0.0.0.0:8000/"
- 运行
pyenv install 3.5.0
很快就安装完成了.