[心得] pyenv + Py3.4 + numpy 在 OSX 10.9

看板Python作者 (亮)時間11年前 (2014/01/27 07:23), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/1
先前有朋友提到怎麼樣在 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

02/03 14:06, , 1F
非常詳盡的說明,太感謝了!
02/03 14:06, 1F
EDIT: 增加 fish 的設定,以及 virtualenv 相關介紹

02/11 22:24, , 2F
朝聖推
02/11 22:24, 2F
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)
文章代碼(AID): #1IvWcCVt (Python)