madokaのブログ

勉強したことのoutput先として使ってます。内容はpythonがらみが多いかもです。

pythonのプロジェクトごとにパッケージを管理する

動機

Pythonをお仕事でも使うことになり、自分の環境だけでなく、他の環境でもすぐ動くようにする必要が出てきたので、pyenv-vertualenvを利用して環境構築をしました。その際の覚え書きです。  

まずはインストール(Mac)

Homebrewを使って、pyenvとpyenv-virtualenvをインストールします。

$ brew install pyenv

$ brew install pyenv-virtualenv

必要なpythonのバージョンをインストール

まずはpyenvでインストールできるPythonのバージョンを確認してみます。

$ pyenv install --list

先ほどの一覧からインストールしたいバージョンを選びインストールを行います。今回は3.6.5をインストールすることにしました。

$ pyenv install 3.6.5

インストールができたら、実際にpyenvに入ったかどうか確認します。

$ pyenv versions

ディレクトリにpythonの仮想環境を作る

これからpythonの開発を行おうとしているディレクトリに移動し、そのディレクトリで利用するpythonのversionを指定します。

$ cd projectのディレクトリ
$ pyenv local 3.6.5

#指定できたことの確認
$ python --version
Python 3.6.5

pythonの環境を現在のディレクトリ配下のvenv(2つ目のvenvがディレクトリ指定になっています)に作成します。

$ python -m venv venv --copies

現在のディレクトリにて先ほど作成した環境を適用する。

$ source venv/bin/activate
# 上記コマンド実行の結果、下記のようにvenvが現れれば成功です。
(venv) $

パッケージの管理

パッケージ管理に必要なツールのインストールを行います。

$ pip install pip-tools

requirements.inに利用しようと思っているパッケージを記入します。

Django

requirements.inに書かれたパッケージと依存関係のあるパッケージをrequirements.txtに書き出します。

(venv) $ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile --output-file requirements.txt requirements.in
#
django==2.1.2
pytz==2018.5              # via django

djangoと依存関係があるらしいpytzも記入してくれました。

最後に書き出したパッケージのインストールを行います。

(venv) $ pip-sync

   

思ったこと

自分のPCでプロジェクトディレクトリにpythonコピーして、最終的にpip-syncをしたら、Uninstallが恐ろしいほど出てきました。今までこれだけのパッケージを統一的に扱っていたと思うと恐怖でしかありません。。