lisz-works

プログラミングと興味を貴方に

venvの情報をgitで管理/共有する

【スポンサーリンク】

Git

こんにちは、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

作成したプロジェクトの環境構築をしていきます。

  1. 適当なファイル(main.py)の作成
  2. venv環境の追加とactivate
  3. 適当なパッケージ(numpy)の追加
  4. .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した方がいい気がします)

github.com

パッケージ情報を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したプロジェクトで環境を復元していきます。

まずやることは

  1. clone
  2. 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が入りましたね!

参考

コチラを参考にしました。ありがとうございました!

ja.stackoverflow.com

あとがき

venvの情報をgitで管理/共有するでした!

これでコマンドをちょちょっと叩けばパッケージがgit管理できるようになりました。

www.lisz-works.com

www.lisz-works.com

www.lisz-works.com