Romantist

Pythonで開発する前の基礎知識

by SaitoSoichi

Pythonのバージョンについて

Pythonの実行環境としては大きく2つのバージョンが存在しています。 それぞれ2系とPython3系で別れており最新のバージョンはPython3系です。 特別な事情がない限りは、Python3系の最新のバージョンを使用するのが良いと思います。

環境構築について

Pythonの環境構築するために最低限必要なものとしては、pyenvを用意するのが良いかと思います。これは、rubyにおけるrbenvのようなものでpyenvを通して必要なバージョンをマシンにインストールし適宜切り替えることが可能なツールです。

まずは、homebrew経由でpyenvをインストールします。


brew install pyenv

.bash_profileにpyenvのパスが通るようにします。


vi ~/.bash_profile

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

仮に、Pythonのバージョン2.7をインストールしたい場合は、pyenvのinstallコマンドを利用します。


pyenv install 2.7

pyenvで実行したいバージョンがインストールできたら、それをどの粒度で実行するかをpyenvに伝えます。実行粒度は以下のように3パターン存在します。

  1. system
    • pyenvを経由してインストールしていない元々入っていたPythonを利用する場合
  2. global
    • pyenv経由でインストールしたバージョンをdefaultとして利用する場合
  3. local
    • pyenv経由でインストールしたバージョンをディレクトリごとに切り替えたい場合

先程インストールしたPython2.7はinstallしただけでは利用することはできず、例えば現在のディレクトリのみで実行したい場合は、以下のようにpyenv localコマンドを実行します。


pyenv local 2.7

実行すると、実行したディレクトリに.Python-versionというファイルが作成され指定したバージョンが記載されています。このファイルがあるディレクトリはファイルに記載されたバージョンがpyenvによって呼び出されることになります。このコマンドによって、ディレクトリ毎に違うバージョンで実行することが可能になります。

ライブラリ管理について

Pythonをインストールするとpipというrubyでいうところのgemのようなライブラリ管理ツールも同時にインストールされます。pipはPythonバージョンごとに独立しており、

pip install XXX

というinstallコマンドでpipに登録されている3rdパーティのライブラリをインストールすることができます。

もしも、任意のライブラリの存在を確認したい場合は、

pip search XXX

というような形でpipに登録されているか確認することが可能です。

ただ、複数人で開発していたり、CI上で適切なライブラリをインストールできるようにしたいという要望がでてくるとプロジェクト内で使用するライブラリを個別にpipでインストールしていくのは手間がかかります。

rubyではbundlerとGemfile, Gemfile.lockという仕組みでそのプロジェクト内のライブラリを一括管理してくれますが、Pythonにも同様の仕組みが存在しています。pipenvというライブラリがあるので、pip経由でインストールします。rubyの

gem install bundler

に相当します。


pip install pipenv

pipenvがインストールできたらinstallコマンドでGemfile, Gemfile.lock相当のPipfile, Pipfile.lockを作成します。


pipenv install

Pipfileにライブラリを追記したい場合は、pipenvのinstallコマンドに追加したいライブラリ名を入れて実行します。


pipenv install boto3

そうすると、Pipfile, Pipfile.lockが更新されます。ライブラリのバージョン指定などもできるのでプロジェクト内で必要なライブラリをpipenv経由でインストールすれば、複数人で開発する際やCIで環境を作りたい場合に同様の実行環境を簡単に構築することができます。

まとめ

以上で、Pythonで開発をするための最低限の環境が構築できるようになっているはずです。
pyenvはPython自体のバージョン管理で、pipenvはvirtualenvのwrapperなので、正確にはvirtualenvを使うことにはなるのですが、virtualenvの利用をrubyのbundler, Gemfile, Gemfile.lockっぽい感じでいい感じに管理することができます。
この辺とっかかりのときほんとにわかりにくいですよね。