0%

Mac pyenv的安装使用以及虚拟环境的管理

简介

多python版本下的多环境在Mac上的安装,此处推荐的是pyenv,利用Mac包管理工具brew安装pyenv,pyenv用来管理所有的python版本。

安装pyenv

1
2
3
brew install pyenv
pyenv -v
pyenv 1.2.18

查看所有的python版本(pyenv管理的所有的版本)

1
2
3
4
5
6
pyenv versions

system
* 3.6.8 (set by /Users/xiexiang/.pyenv/version)
3.6.8/envs/api.mer.36
api.mer.36

(*)表示当前正在使用的版本,system标识用的是系统的python版本,如果初次安装pyenv,这里只会显示system这个版本

查看可安装的python版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
pyenv install --list

2.7.14
2.7.15
2.7.16
2.7.17
3.0.1
3.1.0
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
3.2.0
3.2.1
....

会列出很多的版本,这里列举部分

选择版本进行安装

1
2
3
4
5
6
7
8
$ pyenv install 3.5.5
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.5.5.tar.xz...
-> https://www.python.org/ftp/python/3.5.5/Python-3.5.5.tar.xz
Installing Python-3.5.5...
python-build: use readline from homebrew
Installed Python-3.5.5 to /Users/xxx/.pyenv/versions/3.5.5

ok,这里是墙内环境,初次安装会一直卡死在这里,以下推荐两种方式

1、利用搜狐提供的镜像网站先下载 (推荐方式)

可以先从搜狐的镜像网站下载指定的python版本到~/.pyenv/cache目录下,然后用pyenv install命令安装,就可以很快完成

1
wget http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tar.xz  -P ~/.pyenv/cache
1
2
3
4
root@localhost ~]# pyenv install 3.5.2
Installing Python-3.5.2...
patching file Lib/venv/scripts/posix/activate.fish
Installed Python-3.5.2 to /root/.pyenv/versions/3.5.2

2、使用国内镜像

1
v=3.5.5|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v

查看所有安装的版本

1
2
3
4
5
pyenv versions
system
* 3.6.8 (set by /Users/xiexiang/.pyenv/version)
3.6.8/envs/api.mer.36
api.mer.36

这里会列出所有的通过pyenv安装的python版本

切换版本

1
2
pyenv global system #全局切换
python -V # 查看是否切换成功

此处也可以用local,只对当前目录生效

1
2
yenv local 3.6.8 # 当前目录及其目录切
python -V # 验证一下是否切换成功

ok,这时候在操作的时候会发现并不能正常的切换成功,这时候需要设置环境变量,把以下内容加到~/.bash_profile中去

1
2
export PYENV_ROOT=~/.pyenv
export PATH=$PYENV_ROOT/shims:$PATH

执行source ~/.bash_profile 生效,这时候就可以成功切换了。

卸载python版本

1
pyenv uninstall 3.5.5

查看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
25
26
27
$ pyenv commands
--version
commands
completions
exec
global
help
hooks
init
install
local
prefix
realpath.dylib
rehash
root
shell
shims
uninstall
version
version-file
version-file-read
version-file-write
version-name
version-origin
versions
whence
which

使用pyenv-virtualenv插件管理不同项目

virtualenv本身是一个独立的工具,用户可以不使用pyenv单独使用virtualenv。但是,如果你使用了pyenv,就需要安装pyenv-virtualenv插件而不是virtualenv软件来使用virtualenv的功能。

pyenv-virtualenv pyenv-virtualenv

安装和使用pyenv-virtualenv插件如下:

1
2
3
4
5
6
7
$ git clone https://github.com/yyuu/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
Cloning into '/home/lmx/.pyenv/plugins/pyenv-virtualenv'...
remote: Counting objects: 1860, done.
remote: Total 1860 (delta 0), reused 0 (delta 0), pack-reused 1860
Receiving objects: 100% (1860/1860), 530.62 KiB | 213 KiB/s, done.
Resolving deltas: 100% (1274/1274), done.
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile # 写入环境变量

同样需要执行source ~/.bash_profile

不同python解释器,创建多个不同的工作环境

1
pyenv virtualenv 3.6.8 api.mer.36  #通过3.6.8创建一个环境
1
2
3
4
5
6
7
8
9
10
11
12
13
pyenv virtualenv system erp.27 #通过系统版本2.7创建一个环境

DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple/
Requirement already satisfied: virtualenv in /Library/Python/2.7/site-packages (16.4.3)
WARNING: You are using pip version 19.1.1, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
New python executable in /Users/xiexiang/.pyenv/versions/erp.27/bin/python
Installing setuptools, pip, wheel...
done.
Looking in links: /var/folders/g1/11wx0xn9003_cwy38pnp0qzc0000gn/T/tmp5N31aZ
Requirement already satisfied: setuptools in /Users/xiexiang/.pyenv/versions/erp.27/lib/python2.7/site-packages (44.1.0)
Requirement already satisfied: pip in /Users/xiexiang/.pyenv/versions/erp.27/lib/python2.7/site-packages (20.1.1)

查看工作虚拟环境

1
2
3
4
5
pyenv virtualenvs

3.6.8/envs/api.mer.36 (created from /Users/xiexiang/.pyenv/versions/3.6.8)
api.mer.36 (created from /Users/xiexiang/.pyenv/versions/3.6.8)
erp.27 (created from /System/Library/Frameworks/Python.framework/Versions/2.7)

激活工作虚拟环境

1
pyenv activate erp.27

** 自测遇到的问题,会报出如下的错误,这时候我重启了命令器也没有作用
python

解决方式:需要在~/.zshrc下加入以下内容

1
2
3
4
5
# pyenv config
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(/usr/local/bin/pyenv init -)"
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

添加后执行source ~/.zshrc生效,重新尝试激活

退出工作虚拟环境

1
pyenv deactivate

在不同的工作虚拟环境安装不同的Flask版本

1
2
3
4
5
6
7
pyenv activate first_project
pip install flask==0.8
pyenv deactivate

pyenv activate second_project
pip install flask==0.9
pyenv deactivate

删除虚拟环境

1
2
3
4
pyenv virtualenv-delete erp.27

pyenv-virtualenv: remove /Users/xiexiang/.pyenv/versions/erp.27? #后面输入y 回车