• pip環境の削除
  • condaでのパッケージ管理方法
  • condaでの環境アップデート方法
  • バージョン変える時の方法
  • Jupyter Notebook
  • Julia?
  • R on Anacondaの問題点

macOSでHomebrewを利用してのPython環境構築。

  • 出来るだけ標準的な方法を用いる→pipで管理
  • ある程度の再現可能性は確保したい→pip freezepipenv
  • Web構築とかをしたいわけではない→pyenvは不要で本当に必要ならDockerへ
  • 仮想環境はpyenvではなくてvenv、実用上はpipenv
    • pipenvも問題はあるようでpoetryとかになっていくのかもしれない
  • Jupyter Notebookもpipで入れてVSCodeで利用可能にする

2018年現在のPython状況

Anacondaについて

Anaconda。統計・データサイエンス形で使用するパッケージをひとまとめにできることが特徴で、独自のパッケージ管理コマンドであるcondaが使用できる。R関連も同時に管理できるのかな?可視化ライブラリであるBokehもこちらのプロダクト。特にWindows環境では環境構築が大変らしく、これで足りるならオススメの模様。ただし2018年現在では以前は面倒だった各種パッケージのインストールがwheelによるパッケージングへの対応が進んだためpipなどで行いやすくなっており、非標準であるデメリットの側面が大きくなりつつある。Anaconda外のものも使う可能性がある場合(pipとの併用)は使用しないほうがよさそう。

Python3のインストール

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

Python2とPython3の使い分け

homebrewpython(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に変更

とはいえ毎回pytho3pip3とやるのは面倒(かつきっと間違える)なため、上記解説中にもあるように、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 listpip freeze

# 初期状態
$ pip list
Package    Version
---------- -------
pip        18.1
setuptools 40.5.0
wheel      0.32.2

初期のpipsetuptoolswheelが含まれている。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で一括アップデート - Qiita

pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U pip

pip checkで依存による問題確認

pip check

で依存関係で問題がある場合は表示してくれる。パッケージがうまく動かなくなった時に。

pipenvによる仮想環境管理

Pipenv: 人間のためのPython開発ワークフロー

  • pyenvが利用できる場合はPython本体のバージョン管理・インストールもやってくれる
  • installuninstalllockが主要コマンド
  • パッケージのインストール・アンインストールはPipfileに記録される
  • PipfilePipfile.lockをGitやDropboxで管理しておけば再現可能性が保てる
  • pipenv shellで仮想環境シェルに入り、exitで出るという(venvのactivate/deactivateに比べて)わかりやすさ
  • pipenv graphでパッケージ依存関係のツリーを作ってくれる
  • VSCodeが連携してくれる

Pythonでの仮想環境作成のための標準機能はvenvだが、いちいちactivate/deactivateが必要になったりして煩雑。自分が必要とするのはプロジェクトでの再現可能性になるため、基本的にはグローバル環境にpipで構築した環境で行い、プロジェクトを固めたい(解析・研究の終了)時点でpipenvで依存関係含めたパッケージ状態の固定を行えばよさそう。pipenvpipvirtualenvを組み合わせた機能を持っている。

Managing Application Dependencies — Python Packaging User Guide

2018年のPythonプロジェクトのはじめかた - Qiita

VSCodeでのpipenv環境の利用

プロジェクトディレクトリ下に.venvを作成する

PIPENV_VENV_IN_PROJECT.bash_profileでexportしておくことでプロジェクトのルート以下に.venvが作られてそこに仮想環境が構築される形になる。設定していないとグローバルに作られて管理や確認が面倒だしVSCodeから利用できない。

export PIPENV_VENV_IN_PROJECT=True

VSCodeで仮想環境のパスを設定

python.venvPathの設定

python.venvPathの設定

bashで補完機能を使えるように

eval "$(pipenv --completion)"

を追加する。

venvでの仮想環境

一応メモだけ。pyvenvはPython3.5までで廃止予定。python -m venvの使用が推奨される。

venv: Python 仮想環境管理 - Qiita

poetryによる仮想環境管理

GitHub - sdispater/poetry: Python dependency management and packaging made easy.

現状では公式推奨でもあるpipenvを使えばよさそうだが、問題点もあるようで今後こちらが主流になる可能性もあるためメモ。ただし自分の使い方では仮想環境管理が必要になるのは限られた状況のみのため当面はpipenvで再現可能性を高めるだけでよさそう。

ライブラリ: Poetry - Life with Python

Flake8によるコードチェック

flake8

  • Pythonコーディングスタイルガイドチェック(元PEP8、現pycodestyle
  • エラーチェッカー(pyflakes
  • complexity checker(McCabe
  • pluginで拡張できる

VSCodeのPython開発環境でpylintの代わりにflake8を導入し自動整形を設定する - Qiita

Flake8のインストール

pip install flake8
pip install autopep8

自動整形ツールであるautopep8も一緒に。

VSCodeの設定

// 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で使用するため。

パッケージ依存関係: pipdeptree

pipdeptree · PyPI

pipenvには以下略

コードチェッカー: Flake8

flake8 · PyPI

自動修正: autopep8

autopep8 · PyPI

データサイエンス関連

視覚化

Pythonで統計

プログラミング言語である +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