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 包名
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