pipenv

Pipenvを使うと、個人開発の時だけではなく、複数人で開発する際にもパッケージ管理が楽になります。Pythonで作業環境を整えるのが非常に簡単になります。
公式によると

Pipenvは、手動でパッケージのインストールおよびアンインストールを行うのと同じように Pipfile に対してパッケージの追加および削除を行うのに加え、自動でプロジェクト用の仮想環境を作成し管理します。 またPipenvは、いかなるときも重要な Pipfile.lock を生成し、これを利用しビルドが常に同じ結果になるようにします。
Pipenvは主にアプリケーションのユーザーと開発者に、簡単に作業環境を作れる方法を提供するためのツールです。

とのことです。

Pipenvインストール

僕はMacを使っているので、Homebrewでインストールします。

brew install pipenv

プロジェクト作成&パッケージのインストール

Pipenvを試すためのプロジェクトを作成します。 今回はpipenv-testディレクトリをホームディレクトリに作成して、その配下にPythonの静的解析ができるflake8をインストールをします。

mkdir pipenv-test
cd pipenv-test
pipenv install flake8

インストールをするとターミナルに以下のような表示がされます。

Creating a virtualenv for this project…
Pipfile: /Users/ユーザーネーム/pipenv-test/Pipfile
Using /usr/local/Cellar/pipenv/2018.11.26_4/libexec/bin/python3.8 (3.8.2) to create virtualenv…
⠋ Creating virtual environment...created virtual environment CPython3.8.2.final.0-64 in 719ms
  creator CPython3Posix(dest=/Users/ユーザーネーム/.local/share/virtualenvs/pipenv-test-x1ZFqoq_, clear=False, global=False)
  seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/Users/ユーザーネーム/Library/Application Support/virtualenv/seed-app-data/v1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

✔ Successfully created virtual environment!
Virtualenv location: /Users/ユーザーネーム/.local/share/virtualenvs/pipenv-test-x1ZFqoq_
Creating a Pipfile for this project…
Installing flake8…
Adding flake8 to Pipfile's [packages]…
✔ Installation Succeeded
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success!
Updated Pipfile.lock (e8e061)!
Installing dependencies from Pipfile.lock (e8e061)…
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 5/5 — 00:00:01
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.

Pipfileでインストールしたパッケージなどを管理していて、プロジェクトを他の人に共有するときに依存関係が分かります。 Pipfileの中身はこんな感じになります。

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
flake8 = "*"

[requires]
python_version = "3.8"

インストールしたパッケージを使う

Pythonコードを静的解析したの記事で使ったtest.pyと同じ内容のファイルをプロジェクト配下に作成します。

test.py

def example(num_a,num_b,num_c,num_d,num_e,num_f,num_g,num_h):
    print(num_a+num_b+num_c+num_d+num_e+num_f+num_g+num_h)
num_a,num_b,num_c,num_d,num_e,num_f,num_g,num_h = 1,   2,  3,  4, 5,  6,  7,   8
example(   num_a,     num_b,      num_c, num_d,num_e,   num_f,  num_g,   num_h  )

このファイルをflake8を使って静的解析します。

pipenv run flake8 test.py

すると、ターミナルに以下表示がされます。

test.py:1:18: E231 missing whitespace after ','
test.py:1:24: E231 missing whitespace after ','
test.py:1:30: E231 missing whitespace after ','
test.py:1:36: E231 missing whitespace after ','
test.py:1:42: E231 missing whitespace after ','
test.py:1:48: E231 missing whitespace after ','
test.py:1:54: E231 missing whitespace after ','
test.py:3:1: E305 expected 2 blank lines after class or function definition, found 0
test.py:3:6: E231 missing whitespace after ','
test.py:3:12: E231 missing whitespace after ','
test.py:3:18: E231 missing whitespace after ','
test.py:3:24: E231 missing whitespace after ','
test.py:3:30: E231 missing whitespace after ','
test.py:3:36: E231 missing whitespace after ','
test.py:3:42: E231 missing whitespace after ','
test.py:3:80: E501 line too long (80 > 79 characters)
test.py:4:9: E201 whitespace after '('
test.py:4:47: E231 missing whitespace after ','
test.py:4:80: E501 line too long (81 > 79 characters)
test.py:4:80: E202 whitespace before ')'

pipenv runを使うことで、インストールしたパッケージがスクリプトから使うことが保証されて、実行をすることができます。