【Python/Django】よく使うコマンドのまとめ(2) <パッケージのインストール>

#### 背景
Python/Djangoで開発をすすめるにあたり、よく使うコマンドをまとめておきます。

先人たちの知恵をお借りするなどして解決できたことを、この場をお借りして感謝するとともに、大変恐縮ですが自分のメモとしても、こちらへまとめておきます。

#### 環境
（本番環境）

- AWS EC2 (Amazon Linux 2)
- Python 3.7.9　　　　※2020/12/10時点のAmazon Linux2でのデフォルト
- Django 3.1.3
- PostgreSQL 11.5　　※同上
- Nginx 1.12　　　　　※同上
- Gunicorn
- Putty 0.74


（開発環境）

- Windwos 10 Pro
- Python 3.9.0
- Django 3.1.3
- PostgreSQL 13.1
- Nginx 1.19.5
- Gunicorn
- Putty 0.74


## 1. パッケージソフトウェアのインストール

Pythonは「pip」コマンドを用いて、多種多様なパッケージソフトウェアをインターネット経由で簡単にインストールできます。
なお、どのようなパッケージソフトがあるかは、[PyPI(The Pyhon Package Index)](https://pypi.org/) にて確認ができます。

Python仮想環境に入り、下記を実行します。

```:ターミナル
(venv_＜プロジェクト名＞)$ pip install django                  最新バージョンをインストールする場合
(venv_＜プロジェクト名＞)$ pip install django==3.1.3           指定するバージョンをインストールする場合
```

インストールしたパッケージのバージョンは、下記で確認できます。

```:ターミナル
(venv_＜プロジェクト名＞)$ python -m django -- version

3.1.3
```

#### 他のパッケージのインストール（例）

```:ターミナル
(venv_＜プロジェクト名＞)$ pip install psycopg2-binary
(venv_＜プロジェクト名＞)$ pip install django-allauth
(venv_＜プロジェクト名＞)$ pip install pillow
(venv_＜プロジェクト名＞)$ pip install selenium
(venv_＜プロジェクト名＞)$ pip install boto django-ses
(venv_＜プロジェクト名＞)$ pip install gunicorn
```

|モジュール名|説明|
|:---|:---|
|[psycopg2-binary](https://www.psycopg.org/)|PostgreSQLへPythonから接続する際に用いるドライバ　※2020/12時点では、psycopg3 を開発中とのこと|
|[django-allauth](https://www.intenct.nl/projects/django-allauth)|ローカルおよびソーシャル認証をサポートする認証機能パッケージ|
|pillow|WEBアプリケーションを通してアップロードされた静的ファイルを扱う際に用いるパッケージ|
|selenium|Live Server Test Caseクラスを使ったテスト方法で用いるパッケージ　※別途[Chrome用ドライバ](https://sites/google.com/a/chromium.org/chromedriver/home)が必要|
|django-ses|Amazon SES(Simple Email Service)を利用する際に必要なパッケージ|
|[gunicorn](https://gunicorn.org/)|(Green Unicornの略) Pythonのwsgi(Web Server Gateway Interface)HTTPサーバー|

#### 番外編：pip自体のアップグレード

ときどき、pip自体もバージョンアップしているため、pipコマンドを実行すると『アップグレードしてね！』とお願いされます。
そのようなときは、下記を実行します。

```:ターミナル
$ python -m pip install --upgrade pip
```


## 2. インストール済みモジュール一覧の作成

Python開発環境にインストールしたモジュールをファイルに書き出します。
その後、その書き出したファイルを基に、本番環境へモジュールをインストールします。

### 2-1. インストールしたモジュール一覧をファイルに出力する。

```:ターミナル
(venv_＜プロジェクト名＞)$ pip freeze > requirements.txt
```

```:requirements.txt(例)
appdirs==1.4.4
astroid==2.4.2
beautifulsoup4==4.9.3
certifi==2020.11.8
chardet==3.0.4
colorama==0.4.4
distlib==0.3.1
filelock==3.0.12
idna==2.10
isort==5.6.4
lazy-object-proxy==1.4.3
mccabe==0.6.1
numpy==1.19.4
pandas==1.1.4
Pillow==8.0.1
pipenv==2020.11.15
pylint==2.6.0
python-dateutil==2.8.1
pytz==2020.4
requests==2.25.0
selenium==3.141.0
six==1.15.0
soupsieve==2.0.1
toml==0.10.2
urllib3==1.26.2
virtualenv==20.1.0
virtualenv-clone==0.5.4
wrapt==1.12.1
```

### 2-2. 書き出した requirements.txt を、本番運用環境のホームディレクトリへ転送する。

※ [PuTTY](https://www.putty.org/)や、[WinSCP](https://winscp.net/eng/index.php) を用います。
※ PuTTY を利用して、Amazon EC2(Elastic Compute Cloud)へ接続する際は、「[PuTTY を使用した Windows から Linux インスタンスへの接続](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/putty.html)」をご参照ください。

### 2-3. python仮想環境に入り、下記を実行し、インストールを実行する。

```:ターミナル
(venv_＜プロジェクト名＞)$ pip install -r requirements.txt
```

---
#### (関連)
[【Python/Django】よく使うコマンドのまとめ(1) ＜仮想環境、プロジェクト、アプリケーションの作成＞](https://qiita.com/_whitecat_22/items/6a35200ba958a63eb683)
[【Python/Django】よく使うコマンドのまとめ(3) ＜PostgreSQLの操作＞](https://qiita.com/_whitecat_22/items/264b13f9d7c2f020a7ad)
[【Python/Django】よく使うコマンドのまとめ(4)-前編- ＜本番運用：Amazon EC2 (Amazon Linux 2)＞](https://qiita.com/_whitecat_22/items/873befbe9de15421e840)
[【Python/Django】よく使うコマンドのまとめ(4)-後編- ＜本番運用：Amazon EC2 (Amazon Linux 2)＞](https://qiita.com/_whitecat_22/items/351d2ac5963c770284cb)

---
#### (編集後記)
インストールを忘れがちなのが、意外に django-ses です。
テスト時は、コンソールにログやメール内容を出力させていることも一因ですが、アプリケーション作成を始めたばかりの頃は、マイグレーション時に、よく『django-ses が足りない！』と怒られました。
ユーザー認証を介したり問い合わせフォームを設置したりするWEBサイトやWEBアプリケーションを作成する際は、必ずと言って良いほど django-ses のお世話になるはずですので、インストールするパッケージにも意識を向けて、開発をすすめたいと思います。