Python&Docker環境でPipenvを使用してパッケージ管理を行う

Dockerの環境構築の手順は以下の記事を参照ください

DockerでPythonの動作環境を構築する
本記事では、Dockerを用いたPythonの動作環境を構築する方法について紹介しています。

環境

  • Windows 10
  • Python 3.10.1
  • VSCode

使用するソースコード

以下の公開リポジトリに置いています

GitHub - masayan1126/tao-py-py: 作業自動化用 Python ライブラリ
作業自動化用 Python ライブラリ. Contribute to masayan1126/tao-py-py development by creating an account on GitHub.

Pipenvとは?

きほん

  • プロジェクトのパッケージ管理や仮想環境を簡単に実現できるツール
  • pipとvirtualenvを組み合わせたもの

pipとの違い

  • pip(Python 3.4 からPythonインストーラに最初から付属するようになっている)は最初から使用できるパッケージ管理ツールですが、色々とつらみがあり、pipenvはそれらを解決するべく登場したものです。
  • pipは、requiments.txtというファイルに、インストールしたライブラリとそのライブラリが依存しているライブラリもまとめて列挙するだけで可視性がとても悪いものでしたが、pipenvでは実際に使用するライブラリはPipfileに、ライブラリを使用するための依存ライブラリはPipefile.lockに棲み分けがされ、扱いやすくなっています。
  • 例えばpandasというライブラリの利用には、numpyも必要ですが、この場合pandasはPipfileとPipefile.lockに、numpyはPipefile.lockのみに記録されます
masayan
masayan

pipやpipenvはこの依存関係を認識し、使いたいパッケージをインストールすると、動作に必要なパッケージもインストールするという点では共通しています。

ただ、 pipは指定されただパッケージをただインストールするだけですが、 pipenvは「使いたいパッケージ」と「それに依存しているパッケージ」を分けて管理できるようになっています

Pipenvのインストール

pip install pipenv

コマンドとしては上記ですが、Dockerを使用する場合は、Dockerfileの以下の箇所でイメージビルド時にインストールできるため、コンテナ内での実行は不要です。

RUN pip install --upgrade pip && \
pip install pipenv

プロジェクトの初期化

pipenv --python 3 # Python3系で初期化

上記を実行すると、自動で仮想環境が作成され、Pipfileが作成されます

masayan
masayan

pipenv –python 3.10のように詳細なバージョン指定も可能です。なお、指定したバージョンのpythonがPC自体にインストールされていない場合はインストールするかメッセージが表示されます

各種パッケージのインストール

前述のプロジェクトの初期化がされていなくても以下のコマンドは実行できます。その場合、このタイミングで自動で仮想環境が作成され、Pipfileが作成されます

また、パッケージの追加等は仮想環境に入っていてもいなくてもどちらでも可能です

pipenv install pandas

上記を実行するとPipfileが更新(Pipfileの[packages]にpandas が追加)され、Pipfile.lockが自動で生成(追加したライブラリとその依存ライブラリがあればそちらも)され,実際にインストールされたパッケージの詳細なバージョンや依存パッケージの情報などが記録されます

仮想環境は、例えばmacであれば、/Users/ユーザー名/.local/share/virtualenvs/プロジェクト名のように作成され、インストールされたライブラリはその下の階層の/Lib/python3.XX/site-packagesに追加されていきます

ただ、プロジェクト直下に作成しないと管理がしにくいので.zshrcや.bashrcなどに以下のように設定しておくことでプロジェクト直下の.venv内に仮想環境を作成する事が可能です

export PIPENV_VENV_IN_PROJECT=1

なお、通常のパッケージのインストールの他に--devオプションを使うことで,開発環境のみで使うパッケージを別枠(dev-packages)で管理しながらインストールすることができます

pipenv install --dev mypy # mypyはコードの静的解析用のライブラリです

Pipfile

[[source]]

url = "https://pypi.org/simple"

verify_ssl = true

name = "pypi"

[packages]

pandas = "*"

[dev-packages]

mypy = "*"

[requires]

python_version = "3.10"

パッケージの削除

pipenv uninstall pandas

仮想環境の削除

Pipfileがあるディレクトリで以下を実行する

pipenv --rm

環境の再現

Pipfile.lockからの厳密な再現

Pipfile.lockを元にしてライブラリをインストールする。つまり、lockファイルに記載のバージョンと同じバージョンのライブラリがインストールでき他の開発者と同じ環境を再現できる

pipenv sync

pipenv sync --dev # 開発用パッケージもインストールしたい場合

Pipfileからの再現

Pipfileを元にして、インストールするライブラリの最新バージョンがインストールされ、Pipfile.lockの内容もそれに合わせて更新される

pipenv install

pipenv install --dev # 開発用パッケージもインストールしたい場合

プログラムの実行

仮想環境に入らず、直接実行

dockerを使用していれば、pipenvで作られた仮想環境内ではなくても以下のコマンドでpythonを実行できます

pipenv run python main.py

仮想環境に入って実行

pipenv shell
python main.py

Python学習におすすめの書籍

独習Python/山田祥寛【3000円以上送料無料】
bookfan 1号店 楽天市場店
¥ 3,300(2023/01/31 18:22時点)
タイトルとURLをコピーしました