kapieciiのブログ

日々学んだことを残しておくためのブログです。このブログはGoogle Analyticsを利用しています。

複数人で使う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以降の場合はパスを通すだけで使えます。

pip - python.jp

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!

便利だ。

使ってみて気づいたことなど

ubuntumacの環境では、pipenv実行環境までのパスに日本語が含まれていると、pythonのバージョンを指定して仮想環境を作る際にエラーが発生しました。
windowsの場合は、作業環境までのパスに日本語が含まれていても仮、想環境を作ることができました。

感想

作ったツールを複数人で使いたい場合、利用者の心理的障壁を下げるためにgolangもしくはelectronを選択していました。
しかし、pipenvもかなり便利だったので、今後はpythonでツールを作る機会も増えそうです。

また、利用しているパッケージの脆弱性チェック機能がとても気に入りました。
外部公開しているアプリでpythonを利用している方は、積極的にpipenvに乗り換えると良いのではないでしょうか。

参照

Pipenvの進んだ使い方 — pipenv 2018.11.27.dev0 ドキュメント

2018年のPythonプロジェクトのはじめかた - Qiita

kapieciiのブログについてお問い合わせがある場合、下記のフォームからご連絡をお願い致します。
お問い合わせはこちら