mac上安装多版本的Python

最近在学Python,在mac上装虚拟环境,搞了半天总于成功了,一下是笔记

安装 pyenv ,github地址https://github.com/yyuu/pyenv

# 安装pyenv
$ brew install pyenv

# 验证安装是否成功
$ pyenv -v

# 查看有哪些Python版本
$ pyenv install --list

# 安装需要安装的版本
$ pyenv install 3.6.0

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

# 查看安装的所有python版本 
$ pyenv versions

# 全局切换Python版本
$ pyenv global 3.6.0

# 只对当前目录生效
$ pyenv local 3.6.0

注意:
1 通过$ pyenv global 3.6.0 进行切换后使用Python验证,结果还是系统的2.7? 解决方法:
在.zshrc或.bashrc中加上

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

https://github.com/yyuu/pyenv/issues/228

2 pyenv install 安装失败 zipimport.zipImportError…错误时使用下面的安装方法
CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install -v 3.6.0

easy_install 和 pip区别

  • easy_install和pip都都是用来下载安装Python一个公共资源库PyPI
    的相关资源包的,pip是easy_install的改进版,提供更好的提示信
    息,删除package等功能。老版本的python中只有easy_install,没有pip。
  • easy_install 打包和发布Python
  • pip 是包管理

安装与用法

mac 自带easy_install , 可以使用 easy_install 安装pip

$ easy_install pip

easy_install 用法

# 安装一个包
$ easy_install 包名
$ easy_install "包名 == 包的版本号"

# 升级一个包
$ easy_install -U "包名 >= 包的版本号"

pip 用法

# 安装一个包

$ pip install 包名

$ pip install 包名 == 包的版本号


# 升级一个包 (如果不提供version号,升级到最新版本)
$ pip install --upgrade 包名 >= 包的版本号

# 删除一个包
$ pip uninstall  包名

mac安装pyenv的问题http://www.codeweblog.com/%E8%AE%B0%E5%BD%95mac%E4%B8%8B%E5%AE%89%E8%A3%85pyenv%E6%97%B6%E6%89%80%E9%81%87%E5%88%B0%E7%9A%84%E9%97%AE%E9%A2%98/

virtualenv

virtualenv用于创建独立的Python虚拟环境,多个Python相互独立,互不影响
比如安装了2.5, 2.7.13, 3.6.0 三个版本。 用户可以随意切换当前默认的python版本。 但这时候, 每个版本的环境仍是唯一的, 如果我们想在环境中安装一些库的话, 还是会导致这个版本的环境被修改。 这个时候, 如果我们用virtual env去建立虚拟环境, 就可以完全保证系统路径的干净。无论你在虚拟环境中安装了什么程序, 都不会影响已安装版本的系统环境

# 安装
$ sudo pip install virtualenv
# Ubuntu下
$ sudo apt-get install python-virtualenv

# 创建虚拟环境
# 先创建一个虚拟环境的目录
$ mkdir py_env
$ cd py_env
# 创建虚拟环境 3.6.0
$ virtualenv env360
# 默认情况下,虚拟环境会依赖系统环境中的sitepackages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,如果不想依赖这些package,可以加上参数 --no-site-packages
$ virtualenv --no-site-packages env360

# 启动虚拟环境
$ cd env360 
$ source bin/activate
# 退出虚拟环境
$ deactivate

如果没有启动虚拟环境,系统也安装了pip工具,那么套件将被安装在系统环境中,为了避免发生此事,可以在~/.bashrc文件中加上:
export PIP_REQUIRE_VIRTUALENV=true
或者让在执行pip的时候让系统自动开启虚拟环境:
export PIP_RESPECT_VIRTUALENV=true

Virtualenvwrapper

Virtualenvwrapper 和 virtaulenv不同
Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做:
1. 将所有虚拟环境整合在一个目录下
2. 管理(新增,删除,复制)虚拟环境
3. 切换虚拟环境

# 安装
$ sudo easy_install virtualenvwrapper  

# 接下来创建一个文件夹,用来存放所有的虚拟环境
$ mkdir ~/w 
orkspaces
$ cd ~/workspaces

在使用virtualenvwrapper之前,要运行/usr/local/bin/virtualenvwrapper.sh文件,所以在配置文件中加上

export WORKON_HOME=$HOME/.py_virtualenvs
# source /usr/bin/virtualenvwrapper.sh 网上好多人所是这个位置,但自己在mac上试过不对
if [[ -r /usr/local/bin/virtualenvwrapper.sh ]]; then        
    source /usr/local/bin/virtualenvwrapper.sh    
else        
    echo "WARNING: Can't find virtualenvwrapper.sh"    
fi
# 列出虚拟环境列表
$ workon
# 或者
$ lsvirtualenv -b

# 新建环境
$ mkvirtualenv env27

# 切换虚拟环境
$ workon env360

# 查看环境里安装了哪些包:
$ lssitepackages

# 进入当前环境
$ cdvirtualenv

# 进入当前环境的site-packages
$ cdsitepackages
$ cdsitepackages pip

# 退出虚拟环境
$ deactivate

# 删除虚拟环境
$ rmvirtualenv env360

所有的配置

export WORKON_HOME=$HOME/.py_virtualenvs

# ensure all new environments are isolated from the site-packages directory    
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'    

# use the same directory for virtualenvs as virtualenvwrapper    
export PIP_VIRTUALENV_BASE=$WORKON_HOME    

# makes pip detect an active virtualenv and install to it    
export PIP_RESPECT_VIRTUALENV=true    

if [[ -r /usr/local/bin/virtualenvwrapper.sh ]]; then        
    source /usr/local/bin/virtualenvwrapper.sh    
else        
    echo "WARNING: Can't find virtualenvwrapper.sh"    
fi