在使用 Python 时,不同 pip library 相互之间的版本依赖关系,需要小心处理。如果同时间处理数个项目,使用不同版本的 python (2.x / 3.x), 各个项目又依赖不同版本的 pip library, 就会陷入无解的 dependency hell 了。

注: 以前使用 virtualenv,但是后来发现 pyenv + virtualenv 更方便

解决方式: 安裝 pyenv + virtualenv

pyenv: 分离出 python 各个版本

pyenv-virtualenv: 在 pyenv 的基础上,可以虚拟出不同的环境,使用不同的 pip packages

$ brew update
$ brew install pyenv
$ brew install pyenv-virtualenv

# fix an issue about brew openssl
$ xcode-select --install
# install python 3.x & 2.7.x
$ env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.5.2
$ pyenv install 2.7.12

# add 2 lines to bash profile script: ~/.bash_profile
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

使用

# 建立一個 python 版本為 3.5.2 的環境,環境名稱為 p3env
$ pyenv virtualenv 3.5.2 p3env

# 啟動 p3env 這個環境開始使用
pyenv activate p3env
# 離開 p3env 這個環境
pyenv deactivate

# 將 p3env 當成 目前路徑 的默認 python version
pyenv local p3env

# 列出现有的 virtualenv 环境
$ pyenv virtualenvs

# 移除现有的 virtualenv 环境
pyenv uninstall my-virtual-env

miniconda + spyder

安裝 spyder 需要 pyqt, 使用 miniconda 的基礎環境

pyenv install miniconda3-4.3.11
pyenv virtualenv miniconda3-4.3.11 mconda3
pyenv local mconda3
pip install PyQt5
pip install spyder
spyder3