課題
依存関係の管理がほしくなりました。
経緯としては、もともとvenv+pyenvでpython環境構築していました。
ただ、Githubで管理したいがパッケージがおもすぎてpushできない問題がおこります。
そしてパッケージをgitignoreすると、localにしか依存関係を残すパッケージデータがありません。
つまり、何をインストールしたかの記録がないのです。
そこで依存関係を記録するrequirements.txtなんですが、、
venvだとPythonのパッケージ管理ツールがないので、手動で毎回下記コマンドによって、依存関係を作らないといけないです
pip freeze > requirements.txt
これ毎回やってたのですが、面倒で忘れそうでした。。
Nodeのpackage.jsonやpackage.lock.jsonのように自動で管理してほしかったのです。
対策
pipenvで仮想環境を作り直しました。
pipenvはvevnを内包していて、かつ自動でパッケージ管理してくれます。
-
pipenv
で作成される仮想環境の特徴:- プロジェクトごとに独立した仮想環境が作成されます。
- 仮想環境にインストールしたパッケージは、そのプロジェクト専用のものとして管理されます。
-
仮想環境にパッケージをインストールする方法:
-
pipenv install パッケージ名
を プロジェクトディレクトリで実行 すれば、対応する仮想環境にパッケージがインストールされます。 - 仮想環境を直接アクティブにしなくてもよい。
-
明らかにvenv環境の強化番だと思い試してみました。
試してみる
brew経由でインストール
brew install pipenv
システム環境を汚さず、安全にpipenv
を利用します!
パッケージのインストール
-
パッケージのインストールや管理:
-
pipenv install
でパッケージをインストールし、仮想環境に追加できますpipenv install demucs
-
そうすると、Pipfile
に直接必要なパッケージが記録され、Pipfile.lock
で依存関係が固定化されます!
#Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
demucs = "*"
[dev-packages]
[requires]
python_version = "3.9"
python_full_version = "3.9.6"
再インストール
git cloneして、別の端末で環境構築してみました。
Pipfile
と Pipfile.lock
をプロジェクトに含めれば、以下のコマンドで同じ環境を再現可能です!
pipenv install
これだけで、仮想環境とパッケージ管理できるの超便利です!
仮想環境内でのPythonスクリプト実行
2種類あります。
私はBが便利なので、Bを採用してます。
-
仮想環境内でスクリプトを実行する方法:
-
A 仮想環境をアクティブにして実行:
pipenv shell python your_script.py
実行後、
deactivate
で仮想環境を終了できる。 -
B 仮想環境をアクティブにせず直接実行:
bash コピーする編集する pipenv run python your_script.py
-
Bのほうがシンプルで効率的でした!
まとめ・感想
pipenvはパッケージの依存関係と、仮想環境を両方管理することができます。
Dockerfile書くより仮想環境がお手軽で、かつパッケージ管理自動化できるので、しばらくはこの方法で開発しようと思います!