こんにちは、lisです!
Pythonのプロジェクトのパッケージ管理に、venv
を使っているのですが……
「venv内でいれたパッケージ情報ってgitで管理できないの?」
ということで試してみました!
やること概要
venvをgitで管理
gitで管理されたプロジェクト内で
venv
環境を作成してactivate
- パッケージインストール
pip freeze > requirements.txt
requirements.txt
をコミット
cloneしたプロジェクトでvenvを復元
cloneしたプロジェクト内で
venv
環境を作成してactivate
pip install -r requirements.txt
リポジトリ作成
今回試した流れを書いていきます。
まずリポジトリ作成です。
任意のディレクトリ内で作業していきます。
$ mkdir repo $ cd repo $ git init --bare . $ cd ..
venvをgitで管理
続いてプロジェクト作成。
リポジトリをclone。
$ git clone ./repo proja Cloning into 'proja'... warning: You appear to have cloned an empty repository. done. $ ls proja repo $ cd proja $ $ ls -a . .. .git
作成したプロジェクトの環境構築をしていきます。
- 適当なファイル(main.py)の作成
- venv環境の追加とactivate
- 適当なパッケージ(numpy)の追加
- .gitignoreの作成
$ vi main.py $ venv python -m venv env $ ls -a . .. .env .git main.py $ . .env/bin/activate $ pip install numpy Collecting numpy Using cached numpy-1.20.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (15.4 MB) Installing collected packages: numpy Successfully installed numpy-1.20.3 $ vi .gitignore
.gitignoreはこちらのものを使いました。
(ほんとならcurlした方がいい気がします)
パッケージ情報をrequirements.txt
に出力。
$ pip freeze > requirements.txt $ cat requirements.txt numpy==1.20.3 $ ls -a . .. .env .git .gitignore main.py requirements.txt
これで準備完了です。
全てgitにコミットします。
$ git add * $ git add .gitignore $ git commit -m "initial commit" [master (root-commit) 098a510] initial commit 3 files changed, 141 insertions(+) create mode 100644 .gitignore create mode 100644 main.py create mode 100644 requirements.txt $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (5/5), 1.38 KiB | 176.00 KiB/s, done. Total 5 (delta 0), reused 0 (delta 0) To /home/lis/work/Labo/venv-git/repo * [new branch] master -> master $ deactivate
cloneしたプロジェクトでvenvを復元
別のcloneしたプロジェクトで環境を復元していきます。
まずやることは
- clone
- venv環境の追加とactivate
$ git clone repo projb Cloning into 'projb'... done. $ cd projb $ venv python -m venv env $ . .env/bin/activate
パッケージ情報を復元します。
現状のパッケージは
$ pip list Package Version ------------- ------- pip 20.0.2 pkg-resources 0.0.0 setuptools 44.0.0
ですが、requirements.txt
を元にパッケージをインストールしてもらうと……
$ pip install -r requirements.txt Collecting numpy==1.20.3 Using cached numpy-1.20.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (15.4 MB) Installing collected packages: numpy Successfully installed numpy-1.20.3 $ pip list Package Version ------------- ------- numpy 1.20.3 pip 20.0.2 pkg-resources 0.0.0 setuptools 44.0.0
ちゃんとnumpyが入りましたね!
参考
コチラを参考にしました。ありがとうございました!
あとがき
venvの情報をgitで管理/共有するでした!
これでコマンドをちょちょっと叩けばパッケージがgit管理できるようになりました。