pipenvはPythonの環境構築用ツール。
これまでのPythonにおける環境構築用ツール
- easy_install(egg)
- pip
- virtualenv
- pyenv
- venv
パッケージ管理だの、Python処理系だの、それぞれ用の管理ツールだの。そういったものがたくさんある。おかげで大混乱。
pipenv
今回、さらに新しいツールpipenvを知ったので調べてみた。
どうやらpipenvは、pyenv
でPython処理系をインストールし、venv
でパッケージ仮想環境をつくり、pip
でパッケージをインストールする管理ツールらしい。ようするに既存のツールを組み合わせて包括的な環境構築をするものっぽい。
インストール
pip3 install pipenv
使ってみる
コードを書く
mkdir test_project cd test_project vim a.py
a.py
#!/usr/bin/env python3 # coding: utf8 import requests if __name__ == '__main__': response = requests.get('http://www.google.co.jp/') print(response.text)
chmod +x a.py
仮想環境を有効化する
pipenv shell
ログ
Creating a virtualenv for this project... Pipfile: /tmp/work/test_project/Pipfile Using /usr/bin/python3 (3.7.3) to create virtualenv... ⠇ Creating virtual environment...created virtual environment CPython3.7.3.final.0-32 in 1835ms creator CPython3Posix(dest=/home/pi/.local/share/virtualenvs/test_project-KUGFn0Qp, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/pi/.local/share/virtualenv) added seed packages: pip==21.2.4, setuptools==58.1.0, wheel==0.37.0 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator ✔ Successfully created virtual environment! Virtualenv location: /home/pi/.local/share/virtualenvs/test_project-KUGFn0Qp Creating a Pipfile for this project... Launching subshell in virtual environment... . /home/pi/.local/share/virtualenvs/test_project-KUGFn0Qp/bin/activate bash: pyenv: コマンドが見つかりません $ . /home/pi/.local/share/virtualenvs/test_project-KUGFn0Qp/bin/activate
仮想環境が有効化されると、ターミナルが以下のように表示される。
(test_project) $
カレントディレクトリに以下Pipfile
ファイルができる。
Pipfile
[[source]] url = "https://pypi.org/simple" verify_ssl = true name = "pypi" [packages] [dev-packages] [requires] python_version = "3.7"
処理系のバージョン指定
pipenv --python 3.7
Pythonのバージョンを指定したいときは上記のようにする。
パッケージをインストールする
仮想環境を有効化した状態で、以下のようにインストールする。
pipenv install requests
Pipfileにパッケージの情報が追記される。
Pipfile
[packages] requests = "*"
パス
インストールパスは以下コマンドで判明する。
$ pipenv --venv
/home/pi/.local/share/virtualenvs/test_project-KUGFn0Qp
いやいや、カレントに作ってくれよ。
更新
pipenv update
削除
削除するときは以下。
pipenv --rm
開発用パッケージをインストールする
pipenv install --dev autopep8 flake8
Pipfile
[dev-packages] autopep8 = "*" flake8 = "*"
Pipfileから再現する
ここが本番。Pipfile
から一発で環境構築する。
pipenv install --dev
開発用パッケージが不要なら以下。
pipenv install
Pipfile.lockから再現する
pipenv sync --dev
pipenv sync
.lockファイルは厳密なバージョン指定がされている。
Pipfileのほうはたぶん最新をインストールするのだろう。
Pipfileのほうで再現し、もし問題があればPipfile.lockで再現する。そうすれば絶対に再現できるはずだ。
スクリプト
Pipfile
[scripts] start = "python main.py runserver" test = "python -m unittest discover -v" format = "autopep8 -ivr ." lint = "flake8 --show-source ."
pipenv run start pipenv run test pipenv run format pipenv run lint
情報源
所感
- 遅い
- へんなところにインストールされる(カレントじゃない!)
包括的に管理できるのはいいと思う。でも、遅い。
今すでにインストールしてあるんだったら、それだけをPipfileに出力して、新たにインストールはしないでほしい。
以下のような記事もあった。
pipenvは微妙だな。pip freeze
でパッケージを管理できればそれでいい気がする。venv
さえいらない場合がほとんど。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
$ uname -a Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux