pyenvとpipenvによる環境構築
僕は業務上、開発と環境構築をrubyとpythonのどちらもやります。
そのためrubyだとこうでpythonだとこうと、頭の切り替えがよく起きるのです。
rubyとpythonの行き来する上で、操作感覚が似ていることはとても助かります。
pyenvのおかげで、rbenvと似た感覚でversion managementをできるようになりました。
一方アプリケーション固有の依存package managementにおいては、bundlerと似た感覚で操作できるものに出会えていませんでした。
今回はpipenvが僕の悩みをある程度解決してくれそうだったので、試してみたメモです。
pyenvによるversion management
Install & setup pyenv
$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile $ source ~/.bash_profile
Install & set global version
global設定にするかは適宜変更してください
$ pyenv install -v 任意のversion $ pyenv global 任意のversion
pipenvによるpackage management
Install & setup pipenv
$ pip install pipenv $ pipenv install Creating a Pipfile for this project... Creating a virtualenv for this project... .... 中略(~/.local/share/virtualenvs以下にvirtualenv環境を作ります)....
PipfileとPipfile.lockが増えている
$ ls Pipfile Pipfile.lock
仮想環境での動作確認
動作確認様にboto3をimportするだけのsample.py作成
sample.py
1 # -*- coding: utf-8 -*- 2 3 import boto3
Pipfile内の[packages]にboto3を追加
Pipfile
1 [[source]] 2 url = "https://pypi.python.org/simple" 3 verify_ssl = true 4 5 [packages] 6 boto3 = "*"
再度pipenv install
$ pipenv install No package provided, installing all dependencies. Pipfile found at /path/to/Pipfile. Considering this to be the project home. Pipfile.lock out of date, updating... Locking [dev-packages] dependencies... Locking [packages] dependencies... Updated Pipfile.lock! Installing dependencies from Pipfile.lock... [================================] 7/7 - 00:00:03 ....
globalなpython使ってsample.py実行すると当然ImportError
$ python sample.py Traceback (most recent call last): File "sample.py", line 1, in <module> import boto3 ImportError: No module named 'boto3'
pipenv環境下なpython使ってsample.py実行するとimportできるのでエラーなし
$ pipenv run python sample.py
所感
rbenv -> pyenv、bundler -> pipenvと割と近い感覚で使えるようになったのは好感触
envによるpackageを切り分けていくとこを直感的にできるかをもう少し使ってみて確認したいところ