Ruby では rbenv + Bundler でやる。Haskell では Stack で。Elixir では exenv + Hex で。Node.js では ndenv + npm で。PHP では phpenv + composer で。
API Gateway と Lambda の組み合はせでリリースするバージョンを制御する の樣に Lambda で色々やってゐるので此の邊りを整へた。
Ruby | Python | |
---|---|---|
実行環境のバージョンを分ける | rbenv | pyenv + virtualenv |
依存ライブラリをインストールする | gem | pip |
依存ライブラリのバージョンを固定する | Bundler | pip + virtualenv |
依存ライブラリを更新する | Bundler | pip |
pip の色んなオプションを駆使する事に成る。
実行環境のバージョンを分ける
ではやる。
システムには Python2 と Python3 を入れてある。此れは開發には使はないが、システムの色んな何かが依存してゐるので、其の儘にしておく。必ず其の儘にしておく。
pyenv を入れる。anyenv を入れてあるので其れを使ふ。
anyenv install pyenv exec $SHELL -l
Python の 2 系と 3 系を両方入れる。本日の最新版は 3.5.2 と 2.7.12 だ。
pyenv install 2.7.12 pyenv install 3.5.2
pyenv は pip も入れてくれる。
virtualenv を入れる。pyenv のプラグインが在るので此れを使ふ。
git clone https://github.com/yyuu/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zprofile exec $SHELL -l
example と云ふプロジェクトを開發するとしやう。AWS Lambda なので 2 系である。つらい。
mkdir example cd example pyenv virtualenv 2.7.12 example pyenv local example
此れで example と云ふ環境が virtualenv 側に作られた。virtualenv のオプションに渡した example と云ふ名は、システムの中では一意でなければならない。此の名は他人と共有しないので、自分の事だけを考へて附ければよい。環境の設定を共有しないのは Ruby からの Python の違ひだ。開發環境を閉じ込めるのは Ruby では Bundler だけでやるが、Python では virtualenv と pip に分離されてゐる。環境を閉じ込めるのは virtualenv でやり、環境の設定は pip で行なふ。pip で設定したところは、他人と共有する。
pyenv-virtualenv は virtualenv を pyenv と協働させてくれる。example ディレクトリの .python-version に virtualenv で作った環境の名が書かれてある。此のディレクトリ下に cd してくる度に virtualenv の環境が切り替はる。べんり。また 2 系では virtualenv を、3 系では Python 附属の venv を使って呉れるらしい。べんり。
環境を消すには、
pyenv uninstall example
する。
依存ライブラリをインストールする
依存ライブラリを入れてゆく。virtualenv で環境が閉じ込められてゐるので、何も考へず example ディレクトリ下でインストールすればよい。
pip install boto3
pip install invoke
pip install watchdog
pip install unittest2
# 等
AWS Lambda では依存ライブラリを纏めて zip に入れて上載しなければならない。Lambda の実行時に使ふ依存ライブラリは、virtualenv の環境ではなく、プロジェクトのディレクトリにインストールしなければならない。
pip install pytz -t . # 等
boto3 は AWS 環境に既に在るので、開發時の依存関係扱ひである。
import boto3 from pytz import timetone def lambda_handler(event, context): # ゴニョゴニョ
序でに云ふと、
rm -f ~/Desktop/example.zip zip -r ~/Desktop/example.zip .
で AWS Lambda に上載できる zip が作られる。
依存ライブラリのバージョンを固定する
pip freeze
と云ふコマンドで Gemfile.lock 相当のものが出力される。
pip freeze > requirements.txt
argh==0.26.2 boto3==1.3.1 botocore==1.4.41 docutils==0.12 futures==3.0.5 invoke==0.13.0 jmespath==0.9.0 linecache2==1.0.0 pathtools==0.1.2 python-dateutil==2.5.3 PyYAML==3.11 six==1.10.0 traceback2==1.4.0 unittest2==1.1.0 watchdog==0.8.3
ファイル名は任意である。requirements.txt や requirements-dev.txt, requirements-test.txt, requirements27.txt 等のファイル名にする場合が多いやうだ。
requirements.txt を git に含める。記録したライブラリをインストールするには、
pip install -r requirements.txt
とする。
依存ライブラリを更新する
全て更新する場合は、
pip install --upgrade -r requirements.txt pip freeze > requirements.txt
一つだけ更新する場合は、
pip install --upgrade boto3 pip freeze > requirements.txt
アンインストールするには、
pip uninstall boto3
pip freeze > requirements.txt
総括
安心して virtualenv (or venv) に任せやう。
ハイ。