読者です 読者をやめる 読者になる 読者になる

c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programmingに分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡

音樂はSoundCloud等バラバラの場所に公開中です。申し訳ないがlinkをたどるなどして探してください。

考察は現在は主に此のblogで公表中です。

programmingは、ひろくみせるものはGitHubで、個人的なものはBitBucketで開発中です。

c4se

Pythonアプリケーション毎に環境を分ける (pyenv + virtualenv (or venv) + pip)

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) に任せやう。

ハイ。