Pythonのパッケージ管理とsystemdでプロセスをずっと上げておく方法を書いておく
タイトルは半分当たっていて、半分は嘘。
Pythonをちゃんと環境作ってやったことが今までなかったので、今わかってる範囲の情報をまとめていく。
pip
Pythonのパッケージ管理システム。Pythonで作られたプロジェクトのインストールにもよく使われている。
依存パッケージの管理
pipにはfreeze
サブコマンドがあり、現在の環境で使っているパッケージとバージョンを出力できる。
このリストをrequirements.txt
で出力しておき、pipでこれをインストールするということがよく行われているらしい。
これらは後述するvirtualenv
やvenv
と組み合わせて使うとクリーンな環境を用意できる。
環境のパッケージを出力
pip freeze > requirements.txt
環境にパッケージをインストール
pip install -r requirements.txt
virtualenv
実行環境管理ツール。rvm
がツールとしては近い。
シェルと組み合わせて仮想環境を構築する。
仮想環境にpip
を使って必要なパッケージをインストールして、動作環境を作ることでpython環境を隔離できる。
と思ったけど、Python3.3からvenv
が公式に組み込まれたと聞きつけたので、virtualenvはもっぱらPython2系の環境を隔離したいときに使うことになる。
venv
Python3.3からバンドルされている環境管理ツール。 virtualenvと同様の機能を提供するが個別にインストールする必要はなく、Python3.3以降の環境であればデフォルトで使えると考えて良い。
python3 -m venv (環境名)
venvの実行例
python3 -m venv foo cd foo source bin/activate
venvが行うこと
他にもあるかもしれない。あんまりちゃんと読んではいない。
注意点
source
を使って追加のスクリプトをシェルに食わせているので、環境はディレクトリ以下でなくとも有効。- 解除するには
deactivate
を使うが、同じ名前の関数を用意しているとハマるので注意する- まあ大した問題ではない気もする
venv環境の切り方
この辺りから我流になってくるが、動作させたいプロジェクトのディレクトリを作ったらその名前でvenvを用意してもいいと思う。
共通で使えるvenvを用意するとすぐ書き始められる利点はあるが、依存パッケージの管理と言う面ではややとっ散らかりそうな雰囲気があるので慣れてくるまでは控える。
環境を揃える
インストール
brew install python3
PATHを通す
pipでインストールされるスクリプトを簡単に呼び出せるように PATH
に追加しておくと便利。
export PATH="$HOME/Library/Python/3.6/bin:$PATH"
PDB
Pythonのデバッグツール。とりあえず適当に試したいときに使えば便利っぽい。
インタラクティブコマンド
whatis
オブジェクトの型を調べるときに使う。
> whatis res[0] <class 'dict'>
venv環境でwebサーバのように永続的に動くものをsystemdで起動する
venv環境は環境変数を切り替えた上でシンボリックリンクやコピーを使って仮想環境を構築しているので
、仮想環境にpip
で依存ライブラリをインストールした後は、仮想環境内の /bin
以下に置かれた実行可能スクリプトを直接呼び出すだけで同様の動作にできる。
例えば以下のように systemd を使って起動できる。
[Unit] Description=Gunicorn instance to serve the falcon application After=network.target [Service] User=centos Group=centos PIDFile=/tmp/gunicorn.pid Environment="PATH=/home/centos/venv/project-name-env/bin" WorkingDirectory=/home/centos/project-name ExecStart=/home/centos/venv/project-name-env/bin/gunicorn index:app --bind=0.0.0.0:8000 --reload ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID
この点はRubyのbundlerと比較して簡単に書けるので好き。結婚したい。
その他
コーディングスタイルガイド
終わり
こんなところか。あとは適当にコード書いていけばいい気はする。
とりあえずPythonはマニュアル読めばだいたい書けそうだし、 ライブラリもそれなりに充実しているので、Webアプリケーションを作るくらいなら苦労はしなさそうだ。