複数人で使うpython製ツールの実行環境構築にpipenvを使ってみたら、とても便利だった
ちょっとしたpythonのツールを作ることになったので「せっかくだから以前から気になっていたpipenvを使ってみよう!」ということでpipenvデビューしました。
今後自分が使う時用にメモを残しておきます。
目次
pipenvとは?
パッケージ管理ができる「pip」と、仮想環境管理ができる「 virtualenv」が合体したツールです。
pipenvが管理するPipfileを共有することで、どこでも同じ開発環境を準備することができます。
Pipenv: 人間のためのPython開発ワークフロー — pipenv 2018.11.27.dev0 ドキュメント
pipenvを使うメリット
仮想環境
仮想環境を使うので、環境が汚れません。
パッケージ管理が楽
Pipfileでパッケージのバージョンを管理することができます。
セキュリティ面
pipenvでは、$ pipenv check
で利用しているパッケージに既知の脆弱性があるかチェックしてくれます。
定期実行してslackなどに通知することで、作ったアプリケーションのセキュリティ運用に役立ちます。
使い方
インストール
pipが使える環境であれば、コマンド一発でインストール完了です。
$ pip install pipenv
python3.4以降ではpipが標準で付属しているそうですので、python3.4以降の場合はパスを通すだけで使えます。
windowsの場合は、このあたりにパスを通しておけばpipが使えるはずです。
C:\Users\{user name}\AppData\Local\Programs\Python\Python37\ C:\Users\{user name}\AppData\Local\Programs\Python\Python37\Scripts
pythonのバージョンを指定
$ pipenv --three # Python 3.x $ pipenv --two # Python 2.x $ pipenv --python 3.7.2 # バージョン指定
パッケージの追加
$ pipenv install {パッケージ名}
$ pipenv install requests
の場合
$ cat Pipfile [[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] requests = "*" [requires] python_version = "3.7"
のような内容がPipfileに記録されます。
$ pipenv install requests==2.21.0
のようにすることで、パッケージのバージョンを指定することも可能です。
仮想環境での実行方法
$ pipenv run python foo.py
で実行します。
毎回「$pipenv run 〜」コマンドを実行するのが面倒な場合は、下記のコマンドで仮想環境のシェルに入ることができます。
$ pipenv shell
既存のPipfileやrequirements.txtから環境構築
作成済みのPipfileやrequirements.txtを作業ディレクトリにコピーし、
$ pipenv install
脆弱性のスキャン
パッケージに既知の脆弱性が無いかチェックできます。
$ pipenv check Checking PEP 508 requirements… Passed! Checking installed package safety… All good!
脆弱性がある場合はCVE番号も出してくれるみたいです。
参照: Pipenvの進んだ使い方 — pipenv 2018.11.27.dev0 ドキュメント
開発環境とリリース環境を分ける
--dev オプションをつけると、開発環境でのみパッケージを追加できます。
$ pipenv install --dev ipython $ cat Pipfile [[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] ipython = "*" [packages] requests = "==2.21.0" [requires] python_version = "3.7"
requirements.txt の生成
$ pipenv lock -r -i https://pypi.org/simple certifi==2018.11.29 chardet==3.0.4 idna==2.8 requests==2.21.0 urllib3==1.24.1
開発用のrequirements.txtの場合は
$ pipenv lock -r --dev
起動スクリプト登録
Pipfileの[scripts]に実行スクリプトを登録することができます。
$ cat Pipfile [[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] ipython = "*" [packages] requests = "==2.21.0" [requires] python_version = "3.7" [scripts] hello = "python hello.py"
$ cat hello.py print("hello pipenv!")
$ pipenv run hello hello pipenv!
便利だ。
使ってみて気づいたことなど
ubuntuとmacの環境では、pipenv実行環境までのパスに日本語が含まれていると、pythonのバージョンを指定して仮想環境を作る際にエラーが発生しました。
windowsの場合は、作業環境までのパスに日本語が含まれていても仮、想環境を作ることができました。
感想
作ったツールを複数人で使いたい場合、利用者の心理的障壁を下げるためにgolangもしくはelectronを選択していました。
しかし、pipenvもかなり便利だったので、今後はpythonでツールを作る機会も増えそうです。
また、利用しているパッケージの脆弱性チェック機能がとても気に入りました。
外部公開しているアプリでpythonを利用している方は、積極的にpipenvに乗り換えると良いのではないでしょうか。