自分の為のpython環境設定まとめ[mac][ubuntu]

無駄な記述が多かったので書き直しました。こっちの方が早くみ終わります。
http://qiita.com/miyamotok0105/items/5f26e4ae41f0e35ded16


deep learing勉強用に環境構築。
結構苦労したので自分用にまとめました。
あまり相性が良くないようですが、anacondaとpyenv両方を入れています。
condaで環境切り替えします。

####環境設定ツール
・pyenv,anyenv...pythonバージョンの切り替え
・virtualenv...pythonライブラリの独立環境構築
・anaconda...pyenvとvirturalenvの合体
・brew...macのライブラリ管理ツール
・pip...pythonのライブラリ管理ツール
・conda...pythonのライブラリ管理ツール
###環境構築でよくあるエラー
インストールされてない➡︎インストールする
pythonバージョンが違う➡︎切り替える
パスが指定されてない➡︎指定する
パスが間違ってる➡︎パスを正しくする
依存関係に問題がある➡︎アンインストールして再インストール


###大まかなインストール流れ
- macでの環境設定
brewでpyenvをインストール
pyenvでanacondaかminicondaかpythonバージョンを指定してインストール
condaでpython2系か３系の仮想環境を構築
pip,brewでライブラリをインストール
- ubuntuでの環境設定
pyenv公式ページでpyenvをgitから落とす。
pyenvでanacondaかminicondaかpythonバージョンを指定してインストール
condaでpython2系か３系の仮想環境を構築
pipでライブラリをインストール
- windowsでの環境設定
anaconda公式ページで２系か３系のインストール
pipでライブラリをインストール
https://www.continuum.io/downloads


#１、インストール
##brewのインストール
macのプログラム環境構築ツール
opencvなど。pipからインストールするツールとbrewからインストールするツールがある。
brewからインストールした場合はリンクを貼らないとpathが通らずにpythonから呼び出せないことがある。

```:bash【mac】
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

##setup tool
macデフォルトのpythonに入ってない場合に入れる。pipが入ってない場合などに必要。

```:bash【mac】
curl https://bootstrap.pypa.io/ez_setup.py -o - | python
```

setup toolsのアップグレード

```:bash【mac】
pip install --upgrade setuptools
```

##pyenvのインストール
pythonのバージョンを切り替えるツール

```:bash【mac】
brew install pyenv 
```

```:bash【ubuntu】
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
```

pyenvコマンドが反応することを確認


公式ページ
https://github.com/yyuu/pyenv

pyenvでインストールできる一覧を表示

```:bash【mac】【ubuntu】
pyenv install -l
```

pyenvからpythonをインストール

```:bash【mac】
pyenv install 2.7.12
```

インストール後にはpathを指定する


~~bashの場合は~/.bashrcに書きを追記。

~~anaconda3のみ使ってそこからpeenでバージョンを切り替えることをしない方法をとった。
conda createで新しいバージョンでpython2系などの環境を作成と切り替えをする。~~


```:bash【mac】【今使ってる例】
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
export PATH="$PYENV_ROOT/versions/anaconda3-4.1.1/bin/:$PATH"    

```


```:bash【mac】
#localの場合は実行したフォルタに.python-versionのファイルが出来る
pyenv local 2.7.12  #今いるフォルダ以下のバージョンを切り替え
pyenv global 2.7.12  #全体のフォルダでバージョンを切り替え
pyenv rehash #反映
```



#pipでライブラリをインストール
pipはpythonのライブラリ管理ツール
rubyではgem。C#ではnuget。

```:bash【mac】
pip install hogehoge
```
ライブラリをまとめてインストール

```:bash【mac】
pip install -r requirements.txt
```
pipを全削除

```:bash【mac】
pip freeze > piplist.txt
sudo pip uninstall -r piplist.txt
```
バージョン指定

```:bash【mac】
pip install six==“1.8.0”
```

pip自体をアップデート

```:bash【mac】
pip install -U pip
         or
pip install --upgrade pip
```
pip一括アップデート

```:bash【mac】
pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U
pip --version
```

pipのインストール先を指定する

```:bash【mac】
pip install --install-option="--prefix=$HOME/local" hoge
```

アンインストール

```
pip uninstall hogehoge
```

http://hacknote.jp/archives/19074/

##ipythonのインストール

```:bash【mac】
pip install ipython
```

ipythonの実行

```:bash【mac】
ipython notebook
```

##jupyter notebook
GUIベースでpythonを使いたい場合

```:bash【mac】
pip install -U jupyter
```

jupyterの実行

```:bash【mac】
jupyter notebook
```


##anacondaのインストール
anacondaは使いそうなライブラリがあらかじめ纏められたセット。
virtualenvと同じ機能もあり、元の環境を壊さない。

pyenvから特定のバージョンのanacondaをインストール

```:bash【mac】
pyenv install anaconda-hogehoge
```

anaconda環境複製(2系のpython環境)

```:bash【mac】
conda create -n py27 python=2.7 anaconda
```

同じ環境を複製

```:bash【mac】
Clone an environment
```

現在のanaconda環境から出る

```:bash【mac】
source deactivate
```

anaconda環境削除

```:bash【mac】
conda remove --name py27 --all
```

condaを再インストール

```:bash【ubuntu】
rm -rf ~/.conda
```

ファイルからanaconda環境を使う

```:bash【mac】
conda env create -f environment.yml
conda list
```

別のバージョンをインストール

```:bash【mac】
conda create --name snakes python=3
source activate snakes
conda info --envs
python —-version
```

conda内でpythonのアップデート

```:bash【mac】
conda update python
```

conda内でpythonのアップグレード

```:bash【mac】
conda install python=3.5
```

パッケージインストール

```:bash【mac】
conda install --name bunnies beautiful-soup
```

conda自体のアップデート

```:bash【mac】
conda update conda
conda update anaconda
```

全体一括アップデート

```:bash【mac】
conda update --all
```

anacondaのpipをinstalll

```:bash【mac】
~/.pyenv/versions/anaconda3-2.4.1/bin/pip install [パッケージ名]
```

anacondaのpipをアップデート

```:bash【mac】
~/.pyenv/versions/anaconda3-2.4.1/bin/pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs ~/.pyenv/versions/anaconda3-2.4.1/bin/pip install -U
```

アンインストール

```
conda uninstall hogehoge
```

##git


```:.gitignore
!.gitkeep
*.DS_Store
```


##opencvのインストール

```:bash【mac】【ubuntu】version2
試してないけど最近は -n [環境名]ってのが大事になったと思う。
conda install -c menpo opencv=2.4.11

conda install -c menpo opencv3=3.1.0 -n [環境名]
```

```:bash【mac】【ubuntu】version3
試してないけど最近は -n [環境名]ってのが大事になったと思う。
conda install -c menpo opencv3=3.1.0 -n [環境名]
```

conda install -c https://conda.binstar.org/jjhelmus opencv
公式ページ
https://anaconda.org/menpo/opencv
https://anaconda.org/menpo/opencv3


バージョンのチェック

```
import cv2 
cv2.__version__
```

アンインストール

```
何個も入っちゃってた場合は全部消す
conda uninstall -c menpo opencv=2.4.11
conda uninstall opencv
conda uninstall opencv3
全部消えたかを確認
conda list | grep opencv
```

リンクを貼る

```:bash【mac】
brew link opencv3 --force
```


contribをインストールしたい場合
※brewで入れた場合はパスを通す
http://blog.amedama.jp/entry/2015/10/01/223056


```:bash【mac】
brew install opencv3 --with-contrib   #python2系の場合
or
brew install opencv3 --with-contrib --with-python3  #python3系の場合
```


tapは公式ライブラリではないものを入れる時に使う。
pyenvで切り替えてるのでsourceでライブラリのpathも切り替えないとcvが読み込まれない。

```:bash【mac】
brew tap homebrew/science
brew install opencv
source ~/.bashrc 
```



```:bash【ubuntu】
git clone https://github.com/Itseez/opencv.git
cd opencv
mkdir build
cd build
cmake ..
make -j4 or make -j8
sudo make install
```

※ほんとうにハマった。makeから入れるとopencvがいたるところでエラーになって、一旦pyenvから入れ直したら動きました。
５時間くらいハマった。。。　うまくいかないときはcondaから入れましょう。

~~git clone https://github.com/jayrambhia/Install-OpenCV.git 
cd Install-OpenCV/Ubuntu
./opencv_latest.sh~~



opencv2.4を全部消す

```:bash【ubuntu】
sudo apt-get autoremove opencv-doc opencv-data libopencv-dev libopencv2.4-java libopencv2.4-jni python-opencv libopencv-core2.4 libopencv-gpu2.4 libopencv-ts2.4 libopencv-photo2.4 libopencv-contrib2.4 libopencv-imgproc2.4 libopencv-superres2.4 libopencv-stitching2.4 libopencv-ocl2.4 libopencv-legacy2.4 libopencv-ml2.4 libopencv-video2.4 libopencv-videostab2.4 libopencv-objdetect2.4 libopencv-calib3d2.4 
```

普通にmake uninstall

```:bash【ubuntu】
make uninstall
```

##opencvのビルドエラーの場合

```
libdc1394 error: Failed to initialize libdc1394
```

CMakeListsの中身を修正。-D WITH_1394=OFFにする。
https://github.com/opencv/opencv/blob/master/CMakeLists.txt

参照
http://worktoolsmith.com/ubuntu-opencv/


##dlibのインストール

```:bash【mac】
sudo pip install lib
```

エラーが出る場合condaで入れればいい
http://paper.hatenadiary.jp/entry/2016/09/04/173818

```
brew install cmake
brew install boost-python
conda install -c menpo dlib=18.18
```

##tensorflowのインストール


####パッケージ依存エラー。既にsetuptoolsが入ってるとエラーになる。
Cannot remove entries from nonexistent file /Users/user/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages/easy-install.pth

この場合は--upgradeをつける

```:bash【mac】
~/.pyenv/versions/anaconda3-4.1.1/bin/pip install --upgrade --ignore-installed $TF_BINARY_URL
```

####numpyの依存関係でエラーになる場合あり
ImportError: numpy.core.multiarray failed to import
http://qiita.com/LyricalMaestro0/items/fe5baa162978cb3f7030

#chainerをインストール

バージョン指定をしてインストール
sudo ~/.pyenv/versions/anaconda3-4.1.1/envs/py27/bin/pip install chainer==1.5.1


#２、バージョン切り替えと確認コマンド

##pythonのライブラリのパスを確認
インストールパスの確認

```:bash【mac】
python -c "from distutils.sysconfig import get_python_lib; print (get_python_lib())"
```

or

```:bash【mac】
python
>>> import sys
>>> sys.path
```

更新可能なパッケージ一覧を表示

```:bash【mac】
pip list -o
pip show <package>
```

バージョンの確認

```:bash【mac】
python --version
python -V
```

#pyenvでバージョンの切り替えと確認
現在選ばれているpythonバージョンの確認

```:bash【mac】
pyenv versions
```

pyenvで環境切替
※ここはあまり使わないでcondaで環境切り替えしたほうが良い。

```:bash【mac】
pyenv local anaconda3.4.1
```

pyenvで切り替えた後にするおまじない

```:bash【mac】
pyenv rehash
```

インストール済みライブラリ一覧の確認

```:bash【mac】
pyenv install -l
```

##anacondaでバージョンの切り替えと確認

ライブラリ一覧

```:bash【mac】
conda list
```

ライブラリを検索

```:bash【mac】
conda search <foo>
```

環境一覧

```:bash【mac】
conda info -e
conda info --envs
conda env list
```

環境切り替え

```:bash【mac】【ubuntu】
source activate hogehoge
```

※pyenvと衝突した場合

```:bash【mac】
source versions/anaconda3-2.5.0/bin/activate hogehoge
```

windowsはsourceコマンドがないのでactivateを直接実行

```:bash【windows】
activate hogehoge
```

環境を抜ける

```
source deactivate
```

anacondaごと消す場合はanacondaのフォルダーをそのまま削除


pythonバージョンをチェック

```:bash【mac】
conda search python
```

パッケージ一覧

```:bash【mac】
conda list
conda list -n snowflakes
```

####切り替え時に起きるエラー
※pyenvでバージョンを切り替えるときは、一度rootにcondaを戻してから切り替えると直る場合もあった。謎

Your PYTHONPATH points to a site-packages dir for Python 2.x bet you are running Python 3.x!
pythonpathを場合分けして解決
export PYTHONPATH="/usr/local/lib/python2.7/site-packages/:$PYTHONPATH"
export PYTHONPATH="/usr/local/lib/python3.5/site-packages/:$PYTHONPATH"


#学習

サーバー側で学習をさせる場合はnohupを使うとバックグラウンドで動いてくれるので便利
nohupはターミナルの接続が切れた場合にハングアップシグナル（SIGHUP, HUP）という強制終了の命令を無視する。
こんな感じで書く。

```
nohup sh run_minist.sh &
```

nohupの例

```
nohup ping 8.8.8.8 &
jobs
fg %1
```


#python基礎

上位階層ディレクトリのファイルをimportする
import sys,os
sys.path.append(os.pardir)
from a import *

#文字化け対策

##python3の場合
echo $LANG
をした場合にcになっていることがある。
export LANG=en_US.UTF-8
に変更すると日本語が表示される。


#以下はやらないほうがいい設定

~~【注意】pyenvとanacondaを共存させた場合に.pyathon-versionを見てpathを切り替えた。使っているバージョンの分だけ書き換えて使用を試みたがこのやり方をやめた。（結局パスが通らないエラーになったのでanacondaのみで環境切り替えしてpyenv切り替えを使わない方向へ。）~~

```:bash【mac】【良くない例】

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

if [ ! -e "./.python-version" ];
then
    echo not exits
else
    A=`cat ./.python-version`
    if [ "anaconda-2.4.0" = ${A} ];
    then
	echo switch anaconda-2.4.0
	export PYTHONPATH="/usr/local/lib/python2.7/site-packages/:$PYTHONPATH"
	export PATH="$PYENV_ROOT/versions/anaconda-2.4.0/bin/:$PATH"
    else
	echo switch anaconda3-4.1.1
	export PYTHONPATH="/usr/local/lib/python3.5/site-packages/:$PYTHONPATH"
	export PATH="$PYENV_ROOT/versions/anaconda3-4.1.1/bin/:$PATH"    
    fi
fi
```

##自動rehash
~~pyenvで切り替えるたびにrehashするのが面倒くさい場合~~

```:bash【mac】
brew install homebrew/boneyard/pyenv-pip-rehash
```

##どうしても消えない場合
~~ちょっと危険かもだけど。自己責任で。結局このあとpyenvから入れ直した。これもやらないほうがいい。
sudo find / -name "*opencv*" -exec rm -if {} \;~~



#windows編
コマンドラインから入れれるものと、インストーラから入れるものがバラバラで正直つらい。
python環境はanacondaインストーラで直接入れた。
windowsのubuntuでもインストール中。

##gfortran 
matplotlibがfortranに依存してたのでインストーラで入れた。
https://qiita.com/HirofumiYashima/items/846cd8e51408ab8c88f9

##SciPy

全然pipで入らないのでwhlの形式でgitから落として直接入れた。
scipy‑0.19.0‑cp36‑cp36m‑win_amd64.whl
python -m pip install D:\PythonInstaller\scipy-0.19.0-cp36-cp36m-win_amd64.whl

amdなのかx86なのか64なのか
winなのかlinuxなのかmacなのか
python2.7なのかpython3.5なのか
細かく気にしてダウンロードした。

http://mstn.hateblo.jp/entry/2017/04/13/014519


##dlib
condaもあった。boostってのが全然ビルド通らなかったので、condaに逃げた。

```
conda install -c conda-forge dlib=19.4
```

https://github.com/davisking/dlib


#condaについて(windows)

xcodeのcocoapodsなど、この手のツールにありがちなキャッシュを持ってる実装。
なので稀にcondaにも影響を与えるライブラリを
エラーの出るライブラリに上書きした場合はconda自体をアンインストールするかキャッシュを消す必要がある。pipすらこけたりして身動きが取れなくなる。


キャッシュの場所。この中を全部消すと再度取れる。

```
C:\Users\[ユーザー名]\AppData\Local\Continuum\anaconda3\pkgs
```

ちなみにcondaで作った環境は下記


```
C:\Users\[ユーザー名]\AppData\Local\Continuum\anaconda3\envs
```