Mac多Python版本共存,多个独立Python开发环境切换。

一、安装配置pyenv

经常遇到这样的情况:

系统自带的Python是2.x,自己需要Python 3.x,测试尝鲜;

系统是2.6.x,开发环境是2.7.x

由于Mac机器系统保护的原因,默认的Python中无法对PIP一些包升级,需要组建新的Python环境。

此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存。pyenv就是这样一个Python版本管理器。

1、安装pyenv

brew install pyenv

2、根据提示需要添加

if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

export PYENV_ROOT=/usr/local/var/pyenv

这里注意了,如果使用的zsh,务必不要在zshrc配置里面的插件开启pyenv。会导致终端无限循环退出,只需要在你的zshrc结尾处追加上面两行就行了。笔者亲测。

3、查看当前激活的是那个版本的Python

pyenv version

4、查看已经安装了那些版本的Python

pyenv versions

5、安装指定版本的Python

pyenv install 3.5.0

#安装完成后必须rehash

pyenv rehash

6、切换和使用指定的版本Python版本有3种方法:

λ ~/ pyenv

pyenv 20151006

Usage: pyenv <command> [<args>]

Some useful pyenv commands are:

  commands    列出所有pyenv可用的命令

  local      设置或显示本地应用程序特定的Python版本

  global      设置或显示系统全局的Python版本

  shell      设置或显示shell外壳的Python版本

  install    使用python-build安装指定Python版本

  uninstall  卸载已经安装的Python

  rehash      刷新 pyenv shims (安装之后运行这个)

  version    查看当前使用的版本

  versions    列出已经安装的Python版本,当前激活版本用*号标注

  which      显示的完整路径的可执行文件

  whence      列出包含给定的可执行所有的Python版本

See `pyenv help <command>' for information on a specific command.

For full documentation, see: https://github.com/yyuu/pyenv#readme

特别建议:

系统全局用系统默认的Python比较好,不建议直接对其操作

pyenv global system

用local进行指定版本切换,一般开发环境使用。

pyenv local 2.7.10

对当前用户的临时设定Python版本,退出后失效

pyenv shell 3.5.0

取消某版本切换

pyenv local 3.5.0 --unset

优先级关系:shell——local——global

二、利用virtualenv和Virtaulenvwrapper管理虚拟Python环境

virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:

在没有权限的情况下安装新套件

不同应用可以使用不同的套件版本

套件升级不影响其他应用

Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:

将所有虚拟环境整合在一个目录下

管理(新增,删除,复制)虚拟环境

切换虚拟环境

1、安装和使用方法

#安装

pip install virtualenv

pip install virtualenvwrapper

#创建虚拟环境

mkvirtualenv [虚拟环境名称]

此时还不能使用virtualenvwrapper,默认virtualenvwrapper安装在/usr/local/bin下面,实际上你需要运行virtualenvwrapper.sh文件才行,先别急,打开这个文件看看,里面有安装步骤,我们照着操作把环境设置好。

如果你使用的bash或者zsh

#创建目录用来存放虚拟环境

mkdir $HOME/.virtualenvs

#在. bash_profile 或者 .zshrc 追加两行

export WORKON_HOME=$HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

运行:

source ~/.bashrc

source ~/.zshrc

此时virtualenvwrapper就可以使用了。

2、创建虚拟环境例如:

#在当前的环境的Python版本下创建名称为py3dev的虚拟环境。

mkvirtualenv py3dev

默认情况下,虚拟环境会依赖系统环境中的site packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,如果不想依赖这些package,那么可以加上参数 –no-site-packages建立虚拟环境

例如:

mkvirtualenv --no-site-packages [虚拟环境名称]

mkvirtualenv --no-site-packages py3dev

3、查看创建的虚拟环境:

λ ~/ lsvirtualenv

py2dev

======

py3dev

======

λ ~/ workon

py2dev

py3dev

4、启动某虚拟环境:

works [虚拟环境名称]

workon py3dev

5、删除某个虚拟环境:

rmvirtualenv [虚拟环境名称]

rmvirtualenv py3dev

6、删除某个虚拟环境需要先退出这个环境

deactivate

三、融合 pyenv、virtualenv、Virtaulenvwrapper 管理Python版本和虚拟环境

如何对Python2.7.10和Python3.5.0版本分别创建虚拟环境?

有这三个工具其实非常简单,主要是确保环境切换成功后在创建虚拟环境。

#确保切换成功,我建议 source .zshrc 一下在切换

#安装全新的Python2.7.10版本

pyenv install 2.7.10

pyenv rehash

#切换到刚安装的这个版本

pyenv local 2.7.10

#确保切换成功

source .zshrc

#验证一下版本,pip发现里面包很少

pip list

#验证版本

python -V

#务必在这个新的2.7.10中安装

pip install virtualenv

pip install virtualenvwrapper

#务必

source .zshrc

#创建2.7.10的开发环境

mkvirtualenv py2dev

#创建完某版本的开发环境后务必退出,当前虚拟环境,不然就是虚拟环境中在创建了。

deactivate

#退出2.7.10环境

pyenv local --unset 2.7.10

source .zshrc

3.5.0的虚拟环境创建也是一样,因此验证2.7.10和3.5.0的虚拟环境

(py3dev)☁  ~  deactivate

☁  ~  workon py2dev

(py2dev)☁  ~  python -V

Python 2.7.10

(py2dev)☁  ~  deactivate

☁  ~  workon py3dev

(py3dev)☁  ~  python -V

Python 3.5.0

(py3dev)☁  ~  deactivate

☁  ~

至今没找到切换Python版本的时候要加载 source .zshrc。经过无数次试验,结果是务必这么干,不知道为什么。

#愉快无痛升级,一键升级所有PIP包

pip list --outdated | grep '^[a-z]* (' | cut -d " " -f 1 | xargs pip install -U

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352