作者ccwang002 (亮)
看板Python
标题[心得] pyenv + Py3.4 + numpy 在 OSX 10.9
时间Mon Jan 27 15:23:52 2014
先前有朋友提到怎麽样在 mac 设定 Python 科学计算环境,
虽然有 anaconda 或用官方 dmg 安装的方式,这边提供的是
透过 Homebrew + pyenv 来做多个独立 Python 版本的控制。
==============================
= 给不想看说明文的快速安装法 =
==============================
在全新安装的 Mac OSX 10.9 Mavericks 上测试,使用 BASH。
安装 Python 3.4.0 与 Numpy 1.8
# 安装 Xcode command line tool,已安装可跳
xcode-select --install
# 安装 Homebrew,已安装可跳
ruby -e "$(curl -fsSL
https://raw.github.com/Homebrew/homebrew/go/install)"
brew doctor # 测试 homebrew 是否有问题
brew install `brew deps python3` # 安装 Python 相依套件
vim ~/.bash_profile # 新增 pyenv 环境。新增以下内容
# For pyenv
export PYENV_ROOT=/usr/local/opt/pyenv
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv > /dev/null; then eval "$(pyenv init -)"; fi
source ~/.bash_profile # 使用上面定义好的设定档
brew install pyenv # 安装 pyenv
pyenv install 3.4.0 # 安装 Python 3.4.0 setuptools 3.1 pip 1.5
brew tap Homebrew/python
brew tap homebrew/science
pyenv local 3.4.0 # 仅在本目录下以 3.4 作为预设版本
pip3 install nose # Numpy 测试用
brew install `brew deps numpy` # Numpy 相依套件
pip3 install numpy
python3 -c "import numpy; numpy.test()" # 测试 numpy 安装
========
= 说明 =
========
细节可以参考
https://github.com/yyuu/pyenv 的说明。
他同样可以搭配 pyenv-virtualenv 使用。
如果之前有使用过 brew install python3 之类的方式安装的话,
对 pyenv 来说,这是 system 的设定,所以想要停用 pyenv 的版本话
pyenv [global|shell|local] system
就会换回去了,global/shell/local 差别在这个更动适用到全系统还是这个环境等。
我自己的测试情况是不会有冲突。
不过需要特别注意的是,brew install numpy 这会安装给 brewed 版本的 python
即便使用了 pyenv global 3.4.0 行为仍旧一样。
brew deps xxx 会把 xxx 相依的套件列出,我自己是偏好用 brew 管理套件,
虽然说,不装 pyenv 似乎也会去下载需要的 source,但我并没有测试这部份。
如果照上面方式设定的话,并不会跑到预设的 ~/.pyenv 底下,
而是到 homebrew 常用的 /usr/local/opt/pyenv 底下,
不喜欢可以这个路径改掉。
pyenv 会对经常要切换测试不同 python 版本的人来说,更为方便
搭配 virtualenv 就可以隔离出不同的套件群。
如果是使用 fish SHELL 的话,预设设定档路径在 ~/.config/fish/config.fish
设定档要加入
# Update PATH for homebrew
set -x PATH /usr/local/bin $PATH
# For pyenv
set -x PYENV_ROOT /usr/local/opt/pyenv
set -x PATH $PYENV_ROOT"/bin" $PATH
if begin; status --is-interactive; and type -f pyenv > /dev/null; end
. (pyenv init -|psub)
end
记得把 brew install `brew deps numpy`
改成合法的语法 brew install (brew deps numpy)
====================
= Link brewed libs =
====================
OS X 提供的 OpenSSL, SQLite3 版本都蛮旧的,也许你会想连接新的版本,
而且预设是用 gcc 来编译,跟 brewed python 用 clang 不同。
如果想要仿造 homebrew 设定的话,在 pyenv install 前加上
brew install sqlite
brew install openssl
export CONFIGURE_OPTS="CC=clang"
export CFLAGS="-I/usr/local/opt/openssl/include"
export CFLAGES="$CFLAGS -I/usr/local/opt/sqlite/include"
export LDFLAGS="-L/usr/local/opt/openssl/lib -L/usr/local/opt/sqlite/lib"
pyenv install 3.4.0 # 已知 2.x 版会失败
失败的话,可以强制 link 到 /usr/local 并且把 FLAGS 设定修改成
brew link --force sqlite openssl
export CFLAGS="-I/usr/local/include"
export LDFLAGS="-L/usr/local/lib"
可以用以下的命令来测试连结的 lib 是不是要的版本
`pyenv prefix 3.4.0`/bin/python -c \
"import ssl; print(ssl.OPENSSL_VERSION)" # OpenSSL
`pyenv prefix 3.4.0`/bin/python -c \
"import sqlite3 as s; print(s.sqlite_version_info)" # SQLite3
=========
= Numpy =
=========
有人可能会连结到 Intel MKL,最常的问题是不知道连到哪个 BLAS lib
python -c "import numpy as np; np.__config__.show()"
==============
= virtualenv =
==============
由於 Python 套件常常有相依的状况,为不同专案就可以使用 virtualenv
来独立出一个环境,每个 virtualenv 互相独立不干扰。十分方便。
pyenv 的作者贴心写了 pyenv-virtualenv 以及 pyenv-virtualenvwrapper
这看官网的说明就会使用了。
这边主要是补充比较 tricky 的部份。我自己是用 fish shell + virtualfish,
建立一个新的环境,使用特定版本的 Python 指令如下:
vf tmp -p (pyenv prefix 3.4.0)/bin/python3
pip install .......
vf deactivate
我初次使用竟然不成功,後来发现是 virtualenv 版本太旧的关系
请升级至 1.11+ 就没有问题。讨论可见
https://github.com/pypa/virtualenv/issues/463
与 3.4 有关
欢迎大家指教~
--
============================================
= PyCon APAC 2014, May 15-18 @中研院人社馆 =
============================================
如果对 Python 在科学计算上有什麽有趣的进展/研究/套件,
都很欢迎各位参加 PyCon APAC 2014!
大家有兴趣可以参考官网
http://tw.pycon.org/2014apac/zh/
也欢迎来 PyConTW FB 粉丝页按个赞!
https://www.facebook.com/pycontw
如果你也想为 Python 社群尽一份力量,我们也在徵求志工朋友!欢迎站内信!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.129.5
1F:推 Equalmusic:非常详尽的说明,太感谢了! 02/03 14:06
EDIT: 增加 fish 的设定,以及 virtualenv 相关介绍
2F:推 keitheis:朝圣推 02/11 22:24
EDIT: fix typo, which pyenv --> command -v pyenv (thanks concise!)
EDIT: fix pyenv not found detection in fish
EDIT: use brewed openssl and sqlite3 in pyenv, add get numpy info
EDIT: 3.4.0 released!
※ 编辑: ccwang002 来自: 140.112.25.107 (03/17 16:35)