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

環境
- Windows 10
- Python 3.10.1
- VSCode
使用するソースコード
以下の公開リポジトリに置いています
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のみに記録されます

pipやpipenvはこの依存関係を認識し、使いたいパッケージをインストールすると、動作に必要なパッケージもインストールするという点では共通しています。
ただ、 pipは指定されただパッケージをただインストールするだけですが、 pipenvは「使いたいパッケージ」と「それに依存しているパッケージ」を分けて管理できるようになっています
Pipenvのインストール
pip install pipenv
コマンドとしては上記ですが、Dockerを使用する場合は、Dockerfileの以下の箇所でイメージビルド時にインストールできるため、コンテナ内での実行は不要です。
RUN pip install --upgrade pip && \ pip install pipenv
プロジェクトの初期化
pipenv --python 3 # Python3系で初期化
上記を実行すると、自動で仮想環境が作成され、Pipfileが作成されます

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