文章 56
评论 99
浏览 272355
Mac开发系列之python多版本和环境管理(pyenv和virtualenv安装配置使用)

Mac开发系列之python多版本和环境管理(pyenv和virtualenv安装配置使用)

系统版本:Mac OS X El Capitan(10.13)
预先安装:homebrew 安装方法:运行 Ruby 脚本:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

pyenv 依赖:python 2.5+ , Git

pyenv 安装

推荐使用 pyenv-installer 这个插件安装 pyenv,这种方式安装会多安装几个是实用的插件,比如:

pyenv-virtualenv 用于整合virtualenv

pyenv-pip-rehash 用于使用pip安装包之后自动执行rehash

pyenv-update 用于升级pyenv

使用python-installer方式安装:确保你的电脑可以访问Github,然后在终端运行:
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

即可自动安装 pyenv,安装完成后,pyenv 默认安装地址是:/.pyenv,但是如果你的系统的环境变量中存在 PYENV_ROOT 则会被安装到 PYENV_ROOT 目录下(当使用 homebrew 等其他工具安装后)信息,在你电脑使用的对应的 shell 的配置文件中添加环境变量(如使用的 shell 是 bash 则在/.bashrc 中添加,若是 zsh 则在 ~/.zshrc 中添加,etc):

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

至此,完成 pyenv 的安装和基本配置。

ps:pyenv 默认安装地址是 ~/.pyenv,但是如果你的系统的环境变量中存在 PYENV_ROOT 则会被安装到 PYENV_ROOT 目录下(当使用 homebrew 等其他工具安装后)

pyenv 工作原理:

系统运行 python 的时候会检测环境变量 PATH, 如在以下路径查找:

/usr/local/bin:/usr/bin:/bin

系统会检测/usr/local/bin 是否存在 python,如果不存在则继续搜索/usr/bin,以及类推 pyenv 的工作原理是在 PATH 中添加 shims 目录:

~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin  

卸载 pyenv

pyenv 的卸载比较简单,只需要删除对应的目录即可,默认目录是:~/.pyenv。

pyenv 使用

查看可安装的包:

$ pyenv install -l

查看已安装的 python:

versions 和 version 命令

versions 命令列出你已经安装的 Python 版本以及当前使用的版本

pyenv versions

如下图:

version 命令打印你当前使用版本。version 命令的输出类似 versions 命令,但是它只包含了当前版本那一行,并且没有前导的。

版本名称为 system 代表的是系统预装的 Python 版本。

安装 2.7.11:

$ pyenv install 2.7.11
$ pyenv rehash (这一步是更新pyenv中的python版本数据,每次安装新的python版本后需执行此命令。)

安装指定版本的 python 只需使用 pyenv install 版本号即可。

卸载 python 版本:

使用 pyenv uninstall {版本号}

pyenv rehash

切换当前目录的 python 版本:

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

global 和 local 命令:

global 命令和 local 命令都是用来切换当前 Python 版本的命令。不同之处在于,global 的切换是全局的,而 local 的切换是局部的。

pyenv local 2.7.11

以上命令:会在当前目录下创建一个。pyenv-version 文件,文件内容为 2.7.11,pyenv 通过这种形式,标记当前目录使用 Python-2.7.11。如果其子目录下面没有。pyenv-version 文件,那么此版本讲继承到子目录。

pyenv global 2.7.11

以上命令:会修改 $PYENV_HOME/version 文件的内容,标记全局 Python 版本,如何理解全局 Python 版本,可以认为全局版本是一个默认值,当一个目录及其父目录下面都没有。python-version 文件的时候,会使用全局版本。

一般的,我们不修改全局版本,而使用期默认值 system,因为在 unix 系统上,很多系统工具依赖于 Python,如果我们修改了 Python 的版本,会造成绝大多数的依赖 Python 的系统工具无法使用,如果你不小心修改了,也不要紧张,使用 global 命令修改回来就可以了,有时候,你发现部分系统工具无法使用,你也可以看看你当前的 Python 版本。

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

pyenv global system

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

pyenv local 2.7.11

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

pyenv shell 3.5.1

取消某版本切换

pyenv local 3.5.1 --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.11 和 Python3.5.1 版本分别创建虚拟环境?

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

为确保切换成功,我建议 source .zshrc 一下在切换(如果是使用 pyenv-installer 安装的,则不需要,若是直接安装的 pyenv 则需要,具体原因仍不清楚。)

#安装全新的Python2.7.11版本
pyenv install 2.7.11
pyenv rehash

#切换到刚安装的这个版本
pyenv local 2.7.11
#确保切换成功
source .zshrc
#验证一下版本,pip发现里面包很少
pip list
#验证版本
python -V
#务必在这个新的2.7.11中安装
pip install virtualenv
pip install virtualenvwrapper
#务必
source .zshrc
#创建2.7.11的开发环境
mkvirtualenv py2dev
#创建完某版本的开发环境后务必退出,当前虚拟环境,不然就是虚拟环境中在创建了。
deactivate
#退出2.7.11环境
pyenv local --unset 2.7.11
source .zshrc

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

(py3dev) ~  deactivate
~  workon py2dev
(py2dev)~  python -V
Python 2.7.11
(py2dev)~  deactivate
~  workon py3dev
(py3dev)~  python -V
Python 3.5.1
(py3dev)~  deactivate
~

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

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

pyenv 与 virtualenv

pyenv 通过插件,可以很好的和 virtualenv 一起工作,通过整合 virtualenv,pyenv 实现了真正意义上的环境隔离,每个项目都相当于使用一个单独的解释器。

通过 pyenv-installer 安装的 pyenv,已经安装好 virtualenv 插件了,如果不是通过 pyenv-installer 安装的 pyenv,你可能需要自己安装 virtualenv 插件,安装方法也很简单:

cd $PYENV_ROOT/plugins
git clone https://github.com/yyuu/pyenv-virtualenv.git

直接把插件 clone 下来就安装完成了。
安装完成之后,我们可以通过 virtualenv 命令即可创建虚拟环境,virtualenv 的一般用法如下:

pyenv virtualenv \[-f|--force\] \[-u|--upgrade\] \[VIRTUALENV_OPTIONS\] <version> <virtualenv-name>

选项-f 表示强制的,也就是如果已经存在这个虚拟环境,那么将会覆盖这个虚拟环境 选项-u 表示 upgrade,用于修改已经存在的虚拟环境的 Python 版本 VIRTUALENV_OPTIONS 是传递给 virtualenv 的选项,可以通过 virtualenv 的帮助获取选项的含义 version 表示 Python 版本 virtualenv-name 是我们给虚拟环境指定的名字

例如:

pyenv virtualenv 2.7.11 my_project

以上命令就创建了一个基于 Python-2.7.11,名为 my_project 的虚拟环境。创建好的虚拟环境犹如一个单独 Python 版本一样,我们可以通过 local 或者 global 命令切换过去。

由于每个解释器间是完全隔离的,所以强烈建议你的每个项目,都放置在单独的虚拟环境中。

virtualenv 插件还提供了 virtualenvs 命令,用于列出所有已经创建的虚拟环境,

pyenv virtualenvs

以上命令列出我们所有已经创建的虚拟环境,已经虚拟环境基于那个 Python 版本。
当我们的一个项目生命周期结束的时候,我们或许会想要删除虚拟环境以释放我们的硬盘空间,删除虚拟环境非常简单,直接用 uninstall 命令像删除正常的 Python 版本一样就可以了。

事实上,虚拟环境一旦创建,你就可以把他当成一个独立的版本来使用和维护了。

删除、设置当前目录 python 以及取消设置版本使用下面的命令

# 创建一个基于`python 2.7.10`版本的名字叫做`env27`的虚拟环境, 使用`--no-site-packages`参数来隔离系统的site-packages
$ pyenv virtualenv 2.7.10 env27 --no-site-packages
# 指定目录使用evn27的虚拟环境
$ cd code
$ pyenv local env27
# 取消设定
$ pyenv local env27 --unset
# 删除
$ pyenv uninstall env27

微信公众号

潘建锋

关于版权和转载

本文由 潘建锋 创作,采用 署名 4.0 国际 (CC BY 4.0) 国际许可协议进行授权。
本站文章除注明转载/出处外,均为本站原创或翻译,转载时请务必署名,否则,本人将保留一切追究责任的权利。
署名 4.0 国际 (CC BY 4.0)

转载规范

标题:Mac开发系列之python多版本和环境管理(pyenv和virtualenv安装配置使用)
作者:潘建锋
原文:https://taohuawu.club/management-multi-pythons

关于留言和评论

如果您对本文《Mac开发系列之python多版本和环境管理(pyenv和virtualenv安装配置使用)》的内容有任何疑问、补充或纠错,欢迎在下面的评论系统中留言,与作者一起交流进步,谢谢!(~ ̄▽ ̄)~

鲜衣怒马提银枪,一日看尽长安花,此间少年。