Pyenv 简介
在使用 python 进行编程时, 经常遇到多个编程环境共存问题. pyenv 可以很好的解决这个问题, 本教程根据是学习使用 pyenv 的记录.
安装
1
2
|
yaourt pyenv
yaourt pyenv-virtualenv
|
archlinux 系统安装上面命令直接安装, 其他版本可也从源中或者源代码安装.
安装完成后,pyenv 命令还没有加进系统的环境变量,需要将如下内容加到 ~/.zshrc 中,然后执行 source ~/.zshrc
1
2
3
4
|
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
|
Pyenv 基本操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
pyenv versions
* system (set by /home/lengyue/.python-version)
2.7.13
3.5.2
# 查看目前所有版本的 python
pyenv version
# 查看当前版本的 python
pyenv global system/3.5.2
# 设置全局的 python 环境
pyenv local system/3.5.2
# 设置局部的 python 环境, local 优先级高于 global
pyenv local --unset
# 重置 local 环境
pyenv shell system/3.5.2
# 设置 shell 的 python 环境, shell 环境又有限于 local
pyenv shell --unset
# 重置 shell python 环境
|
安装不同版本 python
1
2
3
4
5
6
7
8
9
10
11
|
pyenv install --list
# pyenv 支持的所有 python 列表
pyenv install 3.5.2
# 安装特定版本的 python
pyenv uninstall 3.5.2
# 卸载特定版本的 python
pyenv rehash
# refresh database
|
安装特定版本 python 出现错误:
1
|
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib
|
按照下帖解决, 用如下命令
1
2
3
|
CFLAGS=-I/usr/include/openssl-1.0 \
LDFLAGS=-L/usr/lib64/openssl-1.0 \
pyenv install 3.5.2
|
Pyenv-virtualenv python 不同项目虚拟环境的搭建
利用 pyenv-virtualenv 就可以管理多个依赖库环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
pyenv virtualenv PYTHON_VERSION PROJECT_NAME
# 创建新的环境,位于 ~/.pyenv/versions/, 其中,PYTHON_VERSION 是具体的 Python 版本号,
# 例如,3.6.0,PROJECT_NAME 是我们自定义的项目名称。比较好的实践方式是,
# 在 PROJECT_NAME 也带上 Python 的版本号,以便于识别。现假设我们有 XDiff 这么一个项目,
# 想针对 Python 2.7.13 和 Python 3.6.0 分别创建一个虚拟环境,那就可以依次执行如下命令。
pyenv virtualenv 3.6.0 py36_XDiff
pyenv virtualenv 2.7.13 py27_XDiff
pyenv virtualenvs
# 创建完成后,通过执行 pyenv virtualenvs 命令,就可以看到本地所有的项目环境
pyenv activate py36_XDiff
# 切换到新的环境
pyenv deactivate
# 退回到系统环境
pyenv uninstall py36_XDiff
# Removing the directories in $(pyenv root)/versions and
# $(pyenv root)/versions/{version}/envs will delete the virtualenv
# uninstall 的命令不能完全卸载完, 可以使用删除的方式
|
项目实践举例
假设现在有一个项目同时尝试 python 3.5.2 和 3.3.2 进行编写, 流程如下.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
cd ./Downloads
# 进入目录
mkdir Mao & cd Mao
# 创建项目目录并进入
# 接下来有两种方法, 一种用 local 变量, 另一种用 virtualenv 方式
# local 变量法
pyenv local 3.5.2 & pip install package
# 进入 3.5.2 的环境, 并安装必要的软件包, 进行测试
pyenv local 3.3.2 & pip install package
# 进入 3.3.2 的环境, 并安装必要的软件包, 进行测试
# virtualenv 法
pyenv virtualenv 3.6.0 py36_Mao
pyenv virtualenv 2.7.13 py33_Mao
# 创建两个虚拟环境
pyenv activate py35_Mao
# 进入 3.5 环境进行工作
pyenv activate py33_Mao
pyenv deactivate
# 进入 3.3 环境进行工作, 结束后离开虚拟环境
rm -rf ~/.pyenv/versions/py35_Mao/
rm -rf ~/.pyenv/versions/3.5.2/envs/py35_Mao
rm -rf ~/.pyenv/versions/py33_Mao/
rm -rf ~/.pyenv/versions/3.3.2/envs/py33_Mao
# 如果以后不再使用虚拟开发环境, 删除环境
|
参考资料