nozayasu-memo

プログラムのメモ

pyenvとpipenvによる環境構築

僕は業務上、開発と環境構築をrubypythonのどちらもやります。

そのためrubyだとこうでpythonだとこうと、頭の切り替えがよく起きるのです。

rubypythonの行き来する上で、操作感覚が似ていることはとても助かります。

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を切り分けていくとこを直感的にできるかをもう少し使ってみて確認したいところ

参考

github.com

github.com

qiita.com

utgwkk.hateblo.jp