macOSでHomebrewを利用してのPython環境構築。
pip
で管理pip freeze
かpipenv
pyenv
は不要で本当に必要ならDockerへpyenv
ではなくてvenv
、実用上はpipenv
pipenv
も問題はあるようでpoetryとかになっていくのかもしれないpip
で入れてVSCodeで利用可能にするpip
wheel
になり、以前はAnacondaを利用しないと面倒だったデータサイエンス系のパッケージであるnumpy
、scipy
、scikit-learn
なども対応しているvenv
、Python2も使う必要があればvirtual-env
も利用すれば良い最近はpipenv
によりpip
とvirtual-env
を組み合わせたようなプロジェクト単位での再現可能性込みのdependency管理ができる
Anaconda。統計・データサイエンス形で使用するパッケージをひとまとめにできることが特徴で、独自のパッケージ管理コマンドであるconda
が使用できる。R関連も同時に管理できるのかな?可視化ライブラリであるBokehもこちらのプロダクト。特にWindows環境では環境構築が大変らしく、これで足りるならオススメの模様。ただし2018年現在では以前は面倒だった各種パッケージのインストールがwheel
によるパッケージングへの対応が進んだためpip
などで行いやすくなっており、非標準であるデメリットの側面が大きくなりつつある。Anaconda外のものも使う可能性がある場合(pip
との併用)は使用しないほうがよさそう。
Homebrewはインストールされている前提。
macOS mojaveのデフォルトのpythonは
$ /usr/bin/python --version
Python 2.7.10
となっている。homebrew
でインストールできるpythonはpython3系のpython
とpython2系のpython@2
がある。基本的にはpython3系だけあれば良いのだが、fontforge
の依存パッケージとしてpython@2
がインストールされる模様。明示的には以下のようにインストールすれば良い。
brew install python
# 必要なら
brew install python@2
homebrew
でpython
(python3)をインストールした状態では、コマンドとしてのpython
で呼ばれるのはpython@2
(あるいはmacOSのデフォルト)になることに注意。pip
も同様。
$ type python
python is hashed (/usr/local/bin/python)
$ python --version
Python 2.7.15
python3
と明示的に指定することでpython3系列が使用できる。pip3
で同様にpython3系列のpip
が使用できる。
$ type python3
python3 is hashed (/usr/local/bin/python3)
$ python3 --version
Python 3.7.1
python
コマンドでpython3
を呼んでくれればいいのに、と正直思うが、実は一時的にhomebrew
でのインストール時はそのような処理がされていたとのこと。ただしそれに伴う混乱や不具合があったために元に戻っているとのこと。
Homebrewでインストールされる/usr/local/bin/pythonが再びPython2に変更
とはいえ毎回pytho3
やpip3
とやるのは面倒(かつきっと間違える)なため、上記解説中にもあるように、python3
へのシンボリックリンクが置かれているディレクトリをパスの先頭に加えることで対応する。
export PATH=$(brew --prefix)/opt/python3/libexec/bin:$PATH
$ type python
python is hashed (/usr/local/opt/python3/libexec/bin/python)
$ python --version
Python 3.7.1
$ type pip
pip is /usr/local/opt/python3/libexec/bin/pip
$ pip --version
pip 18.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
pip
によるパッケージ管理普段は個人で便利に使うのでpip
でグローバルに使いたいパッケージをインストールし、プロジェクト単位で再現可能性を管理したい場合にはpip freeze
などを元に必要なパッケージを確認してpipenv
で依存含めて管理。
pip list
とpip freeze
# 初期状態
$ pip list
Package Version
---------- -------
pip 18.1
setuptools 40.5.0
wheel 0.32.2
初期のpip
、setuptools
、wheel
が含まれている。pip freeze
はこれらのパッケージ管理用のパッケージは表示されないので何も出力されない。出力フォーマットは<package_name>==<version>
の形式になる。伝統的にpip freeze
の出力ファイルはrequrements.txt
にすることが多いらしい。
pip freeze > requirements.txt
でファイル出力しておき、他のマシンで
pip install -r requirements.txt
で環境の再構築ができる。
pip
のオプション-o
、--outdated
pip list -o
-u
、--uptodate
pip list -u
--not-required
pip list --not-required
pip
で一括アップデートpip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U pip
pip check
で依存による問題確認pip check
で依存関係で問題がある場合は表示してくれる。パッケージがうまく動かなくなった時に。
pipenv
による仮想環境管理pyenv
が利用できる場合はPython本体のバージョン管理・インストールもやってくれるinstall
、uninstall
、lock
が主要コマンドPipfile
に記録されるPipfile
とPipfile.lock
をGitやDropboxで管理しておけば再現可能性が保てるpipenv shell
で仮想環境シェルに入り、exit
で出るという(venv
のactivate/deactivateに比べて)わかりやすさpipenv graph
でパッケージ依存関係のツリーを作ってくれるPythonでの仮想環境作成のための標準機能はvenv
だが、いちいちactivate/deactivateが必要になったりして煩雑。自分が必要とするのはプロジェクトでの再現可能性になるため、基本的にはグローバル環境にpip
で構築した環境で行い、プロジェクトを固めたい(解析・研究の終了)時点でpipenv
で依存関係含めたパッケージ状態の固定を行えばよさそう。pipenv
はpip
とvirtualenv
を組み合わせた機能を持っている。
Managing Application Dependencies — Python Packaging User Guide
2018年のPythonプロジェクトのはじめかた - Qiita
pipenv
環境の利用.venv
を作成するPIPENV_VENV_IN_PROJECT
を.bash_profile
でexportしておくことでプロジェクトのルート以下に.venv
が作られてそこに仮想環境が構築される形になる。設定していないとグローバルに作られて管理や確認が面倒だしVSCodeから利用できない。
export PIPENV_VENV_IN_PROJECT=True
python.venvPathの設定
eval "$(pipenv --completion)"
を追加する。
poetry
による仮想環境管理GitHub - sdispater/poetry: Python dependency management and packaging made easy.
現状では公式推奨でもあるpipenv
を使えばよさそうだが、問題点もあるようで今後こちらが主流になる可能性もあるためメモ。ただし自分の使い方では仮想環境管理が必要になるのは限られた状況のみのため当面はpipenv
で再現可能性を高めるだけでよさそう。
VSCodeのPython開発環境でpylintの代わりにflake8を導入し自動整形を設定する - Qiita
pip install flake8
pip install autopep8
自動整形ツールであるautopep8
も一緒に。
// pythonのlint昨日は有効に
"python.linting.enabled": true
// pylintは使用しない
"python.linting.pylintEnabled": false
// flake8を使用する
"python.linting.flake8Enabled": true
// 保存時にlintingする
"python.linting.lintOnSave": true
// 整形ツールにautopep8を使用
"python.formatting.provider": autopep8
// 保存時に自動整形する
"editor.formatOnSave": true
pipenv
safety
pyupio/safety: Safety checks your installed dependencies for known security vulnerabilities
pipenv
には組み込まれているが、普段はpip
で使用するため。
Flake8
autopep8
プログラミング言語である +Pythonを用いて統計処理をする際のノート。 +統計学 も参照
チートシート6種 for Python http://qiita.com/SaitoTsutomu/items/6d1efbc86d6e0468905e
Scipy Lecture Notes http://www.turbare.net/transl/scipy-lecture-notes/index.html
Pythonでデータサイエンス http://pythondatascience.plavox.info/
Pythonで統計学入門http://tokeigaku.blog.jp/python%E3%81%A7%E7%B5%B1%E8%A8%88%E8%A7%A3%E6%9E%90
org-技術 (前の記事 15ページ目) | org-技術 http://org-technology.com/index-15.html
Python による科学技術計算 基礎編 | org-技術 http://org-technology.com/books/SCP01.html
分析結果を楽にカッコよく可視化する方法2016年版 | RECRUIT TECHNOLOGIES Member’s blog http://blog.recruit-tech.co.jp/2016/03/01/visualization_2016/
データサイエンティストに向けたコーディング環境Jupyter Notebookの勧め - Qiita http://qiita.com/y__sama/items/17aedf0c05187edd61c3
pythonで美しいグラフ描画 -seabornを使えばデータ分析と可視化が捗る その1 - Qiita http://qiita.com/hik0107/items/3dc541158fceb3156ee0
PythonでPandasのPlot機能を使えばデータ加工からグラフ作成までマジでシームレス - Qiita http://qiita.com/hik0107/items/de5785f680096df93efa?utm_source=Qiita%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%B9&utm_campaign=d7bd1173bf-Qiita_newsletter_198_03_09_2016&utm_medium=email&utm_term=0_e44feaa081-d7bd1173bf-32912021