[Python] 在 Mac 上用 virtualenvwrapper 安裝 TensorFlow
最近 AlphaGo 擊敗南韓圍棋冠車的新聞相當火紅,
公司也舉辦了關於機器學習 (machine learning) 的內部比賽,正好藉這個機會來學習一下~
就先來安裝 Google 推出的 machine learning 軟體 TensorFlow 吧~
參考一下 TensorFlow: Download and Setup 這篇官方文章,有詳細的安裝介紹,
裡面提到了三種安裝方式,分別是 pip, virtualenv, 和 docker~
用 pip 安裝的話,會有點擔心 TensorFlow 會不會裝一些模組進來,打擾現有的 python 程式;
而 docker 的話是先不考慮,畢竟在 Mac 上的 docker 是跑在一個 Linux 的 VM 裡…
因此就來使用 virtualenv 的方式吧,之前就看過這東西了,正好來學一下如何使用 virtualenv~
一開始先裝了 virtualenv,
但在看了 Python 的虛擬環境及多版本開發利器─Virtualenv 與 Pythonbrew 這篇之後,
決定移掉 virtualenv,改裝 virtualenvwrapper 這個套件,
這個套件裡面也包含了 virtualenv,但是包裝起來變的更好用~
1. 使用 pip 安裝 virtualenvwrapper
pip install virtualenvwrapper
2. 使用 virtualenvwrapper 建立虛擬 python 環境
選擇好一個目錄,執行 mkvirtualenv <name> 來建立一個虛擬的 python 環境~
這樣就會在目前目錄下,建立一個名為 <name> 的目錄,然後把相關的東西都放在裡面,
像是 python, pip, python 的 package 等等~
例如,我是在 ~/MyProjectsLocal/VirtualEnv 目錄下,執行 mkvirtualenv,
來建立一個叫作 TensorFlow 的環境:
testuser@localhost ~/MyProjectsLocal/VirtualEnv $ mkvirtualenv TensorFlow
New python executable in /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/python2.7
Also creating executable in /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/bin/get_env_details
可以看到 virtualenvwrapper 幫我們在目錄裡面放了 pip, python 等等東西,
當環境建立好之後,平常就可以用 workon <name> 來切換虛擬 python 環境,
但得先執行下面兩行,用來設定 WORKON_HOME 這個環境變數,
同時讀入 virtualenvwrapper 定義的一些 shell function:
# Initialize virtualenvwrapper export WORKON_HOME=~/MyProjectsLocal/VirtualEnv source /usr/local/bin/virtualenvwrapper.sh
我是將上面兩行加在 Mac 的 ~/.bash_profile 檔案裡,這樣每次開 terminal 都會自動設定好~
3. 切換虛擬 python 環境
執行 workon <name> 來切換到想要的虛擬 python 環境,例如:
testuser@localhost ~ $ workon TensorFlow (TensorFlow) testuser@localhost ~ $
在切換環境後,shell prompt 前面會加上 (<name>),提醒你現在是在虛擬 python 環境之下~
可以執行 lsvirtualenv 看看現在有哪些環境可用:
(TensorFlow) testuser@localhost ~ $ lsvirtualenv TensorFlow ==========
用 virtualenvwrapper 的一個好處是有 tab 補完的功能,
所以像是在打 workon 之後,可以直接按 tab 鍵,就會列出所有的虛擬環境名稱,
如果只有一個的話,還會直接打上去,相當方便~
要離開虛擬環境的話,打 deactivate 就可以了:
(TensorFlow) testuser@localhost ~ $ deactivate testuser@localhost ~ $
4. 在虛擬 python 環境中安裝 TensorFlow
在虛擬 python 環境下安裝東西一樣用 pip 就可以了,套件會安裝到虛擬環境的目錄下,
因此會跟系統原有的 python 分開,就不會影響到系統現有的 python 程式了~
參照 TensorFlow: Download and Setup 這邊的說明,用 pip 來安裝 TensorFlow:
(TensorFlow) testuser@localhost ~ $ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.1-cp27-none-any.whl Collecting tensorflow==0.7.1 from https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.1-cp27-none-any.whl Downloading https://storage.googleapis.com/tensorflow/mac/tensorflow-0.7.1-cp27-none-any.whl (11.6MB) 100% |████████████████████████████████| 11.6MB 103kB/s Collecting six>=1.10.0 (from tensorflow==0.7.1) Downloading six-1.10.0-py2.py3-none-any.whl Collecting protobuf==3.0.0b2 (from tensorflow==0.7.1) Downloading protobuf-3.0.0b2-py2.py3-none-any.whl (326kB) 100% |████████████████████████████████| 327kB 1.1MB/s Requirement already up-to-date: wheel in ./MyProjectsLocal/VirtualEnv/TensorFlow/lib/python2.7/site-packages (from tensorflow==0.7.1) Collecting numpy>=1.10.1 (from tensorflow==0.7.1) Downloading numpy-1.11.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.9MB) 100% |████████████████████████████████| 3.9MB 327kB/s Requirement already up-to-date: setuptools in ./MyProjectsLocal/VirtualEnv/TensorFlow/lib/python2.7/site-packages (from protobuf==3.0.0b2->tensorflow==0.7.1) Installing collected packages: six, protobuf, numpy, tensorflow Successfully installed numpy-1.11.0 protobuf-3.0.0b2 six-1.10.0 tensorflow-0.7.1
安裝好之後,用 pip freeze 看一下,
可以發現 TensorFlow 除了會安裝 tensorflow 模組外,
還會安裝像 numpy, protobuf, six 這幾個關聯模組:
(TensorFlow) testuser@localhost ~ $ pip freeze numpy==1.11.0 protobuf==3.0.0b2 six==1.10.0 tensorflow==0.7.1
可以用 tensorflow.__file__ 看一下 TensorFlow 安裝的位置,
在我的電腦上,是在虛擬環境目錄下的 lib/python2.7/site-packages/tensorflow:
(TensorFlow) testuser@localhost ~ $ python -c 'import tensorflow; print tensorflow.__file__' /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/lib/python2.7/site-packages/tensorflow/__init__.pyc
5. 執行 TensorFlow 的 Demo 程式
進到 tensorflow/models/image/mnist 目錄下,
執行 convolutional.py,就可以開始跑一個數字辨識的 demo 程式,
可以看到 Validation error 從原本的 84.6% 一路降低,
最後到 0.8% 就是這個演算法對這個測試集的極限了:
(TensorFlow) testuser@localhost ~ $ cd /Users/testuser/MyProjectsLocal/VirtualEnv/TensorFlow/lib/python2.7/site-packages/tensorflow/models/image/mnist/ (TensorFlow) testuser@localhost ~/MyProjectsLocal/VirtualEnv/TensorFlow/lib/python2.7/site-packages/tensorflow/models/image/mnist $ python convolutional.py Extracting data/train-images-idx3-ubyte.gz Extracting data/train-labels-idx1-ubyte.gz Extracting data/t10k-images-idx3-ubyte.gz Extracting data/t10k-labels-idx1-ubyte.gz Initialized! Step 0 (epoch 0.00), 4.9 ms Minibatch loss: 12.054, learning rate: 0.010000 Minibatch error: 90.6% Validation error: 84.6% ...... ......
以上就是用 virtualenvwrapper 來安裝 TensorFlow 的步驟,
感覺上 virtualenvwrapper 還蠻好用的,應該可以善用來區別不同的開發環境囉~
參考資料:
Python 的虛擬環境及多版本開發利器─Virtualenv 與 Pythonbrew