💻
Pipenv を導入して requirements.txt を利用したパッケージ管理をやめる
前提
- 作業環境は Mac (macOS Monterey 12.6 Apple M2)
- Homebrew が既に使えるようになっていること
- pyenvは既にインストールされていること
requirements.txt を利用する方式の問題点
-
pip install
した後に反映し忘れる - 前項の反映に関して、
pip freeze > requirements.txt
ってしたら dev dependencies的なパッケージ(フォーマッターやテスティングフレームワークなど開発やテスト関係のパッケージで、本体の実行に必須ではないもの)も全部吐き出される- この兼ね合いで、本番環境にデリバリーする際に不要なパッケージが混入する
Pipenvとは
概要
- パッケージ管理ツール
- パッケージのインストール・アンインストール用のインターフェースの提供や、プロジェクト用の仮想環境を作成などを実施してくれる
-
pip
やvenv
をラッピングしている
-
特徴
-
pyenv
が使える場合は必要なバージョンのPythonを自動でビルドしてくれる - 仮想環境を自動で生成してくれる
- パッケージがインストール・アンインストールされたときは
Pipfile
を自動で更新してくれる -
.env
ファイルの自動読み込み
→ 冒頭で挙げた問題点は解消できる(= 今回導入した動機)
Pipenvのインストール
$ brew install pipenv
正常にインストールできたら以下でバージョンを取得できる
$ pipenv --version
pipenv, version 2022.9.21
Pipenvによる仮想環境構築
プロジェクトのルートに移動して pipenv
コマンドを実行する
$ cd /path/to/somewhere/project
$ pipenv --python 3
今回脱却しようとしている旧来の方式では以下のようなステップを踏む必要があった
- pyenv でPythonをビルド
- venv で仮想環境の作成
- 前項の環境で
pip install requirements.txt
を実行し、パッケージをインストールする
既出の pipenv
コマンドではこれらをまとめてやってくれる
(pyenv
がインストールしてあったら便利なのはこの辺の理由から)
パッケージのリストである Pipfile
もこの際に作られる
既に requirements.txt
がプロジェクトルートにあるなら、そこから内容の転記もしてくれるが、
この点に関しては以下のようなverboseなメッセージが出力されるので、それに則って適宜編集すればハマることもなかった
$ pipenv --python 3
Creating a virtualenv for this project...
Pipfile: /Users/k0kishima/work/fuji/boatrace/boatrace.official/Pipfile
Using /opt/homebrew/bin/python3 (3.10.6) to create virtualenv...
⠴ Creating virtual environment...created virtual environment CPython3.10.6.final.0-64 in 398ms
creator CPython3Posix(dest=/Users/k0kishima/.local/share/virtualenvs/boatrace.official-8L5PVWn-, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/k0kishima/Library/Application Support/virtualenv)
added seed packages: pip==22.2.2, setuptools==65.3.0, wheel==0.37.1
activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
✔ Successfully created virtual environment!
Virtualenv location: /Users/k0kishima/.local/share/virtualenvs/boatrace.official-8L5PVWn-
requirements.txt found in /Users/k0kishima/work/fuji/boatrace/boatrace.official instead of Pipfile! Converting...
✔ Success!
Warning: Your Pipfile now contains pinned versions, if your requirements.txt did.
We recommend updating your Pipfile to specify the "*" version, instead.
仮想環境構築での操作
Pipenv
は virtualenv
をラップすることによって仮想環境構築を行なっているようだが、プロジェクトをアクティベートするには以下を実行する
$ pipenv shell
パッケージの管理
本番環境で利用するパッケージのインストール
$ pipenv install numpy
開発やテストで利用するパッケージのインストール
$ pipenv install --dev pytest
Discussion