【Python】そもそもライブラリとは？ ライブラリ管理のpipとは？

#### 背景

Python はライブラリが豊富であると言われまずが、まずはその `ライブラリ` とは何かと、ライブラリをインストール、管理する `pip` についてをまとめました。


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

#### 環境

(開発)
- Python 3.9.0, 3.8.5
- Django 3.1.5
- PostgreSQL 13.1
- Nginx 1.95.5
- Gunicorn
- Putty 0.74


# ライブラリ？ パッケージ？ モジュール？？

### ・モジュール

Python のファイル＝「～.py」ファイルのことです。
Python である程度、ステップ数のあるプログラムを書く場合は、[Jupitor Lab](https://github.com/jupyterlab/jupyterlab)（※1） や コマンドライン ではなく、実行したい内容を書いたもの「～.py」ファイルとして保存します。
その保存された「～.py」ファイルは、他の Python プログラムから `import` で呼び出して使うこともできます。これをモジュールと呼びます。
通常、このモジュールの中には幾つかのクラスや関数が含まれています。

> （※1）
> コード、データ、そして Jupyter Notebook のファイル形式：「～.ipynb」を扱う最新の対話型開発環境（IDE）。OSS で公開されています。（参照： [Project Jupyter](https://medium.com/@ProjectJupyter) ）

### ・パッケージ

複数のモジュールをまとめたものをパッケージと呼びます。
 
### ・ライブラリ

幾つかのパッケージをまとめて一つのライブラリとしてインストールできるようにしたものです。
また、関数、モジュール、パッケージ自体を総称して、ライブラリと呼ぶこともあります。

科学技術計算でよく使われる NumPy 、グラフ描画に使われる Matplotlib 、データ解析を支援する機能を提供する Pandas 等は、すべてライブラリとして配布されています。

　
（注）以降、パッケージも含めて、ライブラリと総称して説明します。

## 0. 標準ライブラリと外部ライブラリ


**標準ライブラリ** と **外部ライブラリ** の二つの種類があります。
それぞれは以下の通りです。

### 0-1. 標準ライブラリ
[Python](https://www.python.org/) をインストールした時から元来含まれているライブラリのこと。追加でインストールすることなく利用できます。
（参照）**[Python 標準ライブラリ](https://docs.python.org/ja/3/library/index.html)**

![large.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/079dd4de-d839-0b41-6466-acef2a85c6a7.jpeg)

### 0-2. 外部ライブラリ
対して Python には元来組み込まれておらず、新たに外部から読み込む必要のあるライブラリのこと。どのような外部ライブラリがあるかは、主に **_[PyPI (The Python Package Index)](https://pypi.org/)_** のサイトで検索可能です。

![PyPI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/2a78673f-bb45-bbe0-37d3-60cba914330d.png)


利用するためには、予めコマンドプロンプトやターミナルから、（主に）下記コマンドでインストールする必要があります。
お使いの環境によってインストールのためのコマンドが異なりますため、お使いの環境に合ったコマンドをお使いください。
なお、インストールせずに利用し、プログラムを実行した場合はエラーとなります。

```Terminal
$ pip install ライブラリ名

$ pip install scikit-learn        # scikit-learn をインストールするケース
```


## 1. ライブラリを利用するには

### 1-1. ライブラリ全体をインポートする

プログラム内でライブラリを読み込むためには、`import` が必要です。
`import` は、ライブラリを読み込むための指示です。
この指示があることで、そのライブラリの機能が利用できるようになります。簡単ですね！

また、インポートしたモジュールの関数を使うには、`ライブラリ名.関数名()` と書きます。
組み込み関数を使う時と違って、関数名の前にモジュール名を書き、`「.」（ドット）` で繋ぎます。


```python
import ライブラリ名

import random        # 引数に指定した数値の範囲でランダムに整数を返す

random.randint(1,1000)
# 777
```

### 1-2. ライブラリを別名を付けてインポートする

ライブラリに別名を付けてインポートする場合は、以下のように書きます。
そのモジュール内の関数を使うには `別名.関数名()` と書きます。

```python
import ライブラリ名 as 別名

import random as rd        # random を rd としてimportする

rd.randint(1, 1000)
# 999
```

### 1-3. ライブラリから特定の関数のみをインポートする

そのライブラリから特定の関数のみをインポートする場合は、`from` を用いて以下のように書きます。
特定の関数だけをインポートした場合に、その関数を使う時は、先頭にライブラリ名を省略することができます。

```python
from ライブラリ名 import 関数名

from random import randint        # random 内の randint 関数のみimportする
'''
特定の関数だけをインポートした場合に、その関数を使う時は、
先頭のライブラリ名を省略することができます。
'''
randint(1, 1000)
# 444
```

### 1-4. ライブラリから特定の関数のみ、別名をつけてインポートする

特定の関数だけをインポートする場合も、その関数に別名を付けることができます。

```python
from ライブラリ名 import 関数名 as 別名

from random import randint as rd        # randint 関数を rint としてimportする
'''
特定の関数だけをインポートした場合に、その関数を使う時は、
先頭のライブラリ名を省略することができます。
'''
rint(1, 1000)
# 321
```

### 1-5. ライブラリに含まれる関数などの属性の一覧と定義の確認方法

ライブラリに含まれる関数などの属性は `dir()` で確認することができます。
numpy に含まれる属性を確認してみます。

```python
import numpy as np

print(dir(np))

# ['ALLOW_THREADS', 'AxisError', 'BUFSIZE', 'CLIP', 'ComplexWarning', 'DataSource', 'ERR_CALL', 'ERR_DEFAULT', 'ERR_IGNORE', 'ERR_LOG', 'ERR_PRINT', 'ERR_RAISE', 'ERR_WARN', 'FLOATING_POINT_SUPPORT', 'FPE_DIVIDEBYZERO', (...中略...), 'var', 'vdot', 'vectorize', 'version', 'void', 'void0', 'vsplit', 'vstack', 'warnings', 'where', 'who', 'zeros', 'zeros_like']
```

### 1-6. ライブラリに含まれる関数やクラスの定義の確認方法

ライブラリに含まれる関数やクラスの定義は  `help()` で確認できます。
pandas に含まれる DataFrame の定義を表示しています。

```python
import pandas as pd

help(pd.DataFrame)

# Help on class DataFrame in module pandas.core.frame:
# 
# class DataFrame(pandas.core.generic.NDFrame, pandas.core.arraylike.OpsMixin)
#  |  DataFrame(data=None, index: 'Optional[Axes]' = None, columns: 'Optional[Axes]' = None, dtype: 'Optional[Dtype]' = # None, copy: 'bool' = False)
#  |
#  |  Two-dimensional, size-mutable, potentially heterogeneous tabular data.
#  |
#  |  Data structure also contains labeled axes (rows and columns).
#  |  Arithmetic operations align on both row and column labels. Can be
#  |  thought of as a dict-like container for Series objects. The primary
#  |  pandas data structure.
#  |
#  |  Parameters
#  |  ----------
#  |  data : ndarray (structured or homogeneous), Iterable, dict, or DataFrame
#  |      Dict can contain Series, arrays, constants, dataclass or list-like objects. If
#  |
#  |      .. versionchanged:: 0.25.0
#  |         If data is a list of dicts, column order follows insertion-order.
#  |
#  |  index : Index or array-like
# (...後略...)
```

### 1-7. ライブラリのコンピュータ上のインストールされている場所を確認する

インストールされている場所は、`ライブラリ名.__file__` で確認することができます。
numpy の格納場所を確認しています。

```python
import numpy
print(numpy.__file__)

# C:\Users\xxxxxxxx\AppData\Local\Programs\Python\Python38\lib\site-packages\numpy\__init__.py
```


# ライブラリを管理する
## 1. [pip](https://pypi.org/project/pip/)

何はともあれ、これ！ `pip` （"Pip Installs Packages" または "Pip Installs Python"）です。
pip を使うことで Python ライブラリを簡単にインストールしたり、管理したりすることができます。


### 1-1. ライブラリのインストール

```Terminal
$ pip install ライブラリ名

$ pip install numpy        # numpy をインストール
```

### 1-2. ライブラリをバージョン指定してインストール

ライブラリ名とバージョン番号を `==` で繋ぎます。

```Terminal
$ pip install ライブラリ名==バージョン番号

$ pip install numpy==1.19.5        # numpy の ver.1.19.5 を指定してインストール
```

### 1-3. ライブラリのアンインストール

```Terminal
$ pip uninstall ライブラリ名

$ pip uninstall numpy        # numpy をアンインストール
```

### 1-4. ライブラリのアップデート

下記 (a) または (b) で実行します。

```Terminal
$ pip install --upgrade ライブラリ名    # (a)

$ pip install -U ライブラリ名           # (b)
```

### 1-5. pip 自体のバージョンを確認する

下記 (a) または (b) で実行します。

```Terminal
$ pip --version        # (a)

$ pip -V               # (b)

pip 21.0 from c:\users\xxxxxxxx\appdata\local\programs\python\python38\lib\site-packages\pip (python 3.8)
```

### 1-6. pip 自体のアップデート

下記 (a) または (b) でエラーとなる場合は、(c) で実行してください。

```Terminal
$ pip install --upgrade pip                  # (a)

$ pip install -U pip                         # (b)

$ python -m pip install --upgrade pip        # (c)

Requirement already satisfied: pip in c:\users\xxxxxxxx\appdata\local\programs\python\python38\lib\site-packages (21.0)
Collecting pip
  Using cached pip-21.0-py3-none-any.whl (1.5 MB)
  Downloading pip-20.3.4-py2.py3-none-any.whl (1.5 MB)
     |████████████████████████████████| 1.5 MB 2.2 MB/s
```

### 1-7. ライブラリのリストを全部表示する

```Terminal
$ pip list

Package                  Version
------------------------ -----------
absl-py                  0.11.0
aiodns                   2.0.0
aiohttp                  3.7.3
aiohttp-socks            0.5.5
anyio                    2.0.2
argon2-cffi              20.1.0
asgiref                  3.3.1
astroid                  2.4.2
asttokens                2.0.4
astunparse               1.6.3
async-generator          1.10
async-timeout            3.0.1
attrs                    20.3.0
Babel                    2.9.0
backcall                 0.2.0
Backtesting              0.3.0
beautifulsoup4           4.9.3
bleach                   3.2.1
bokeh                    2.2.3
boto                     2.49.0
boto3                    1.16.55
botocore                 1.19.55
cachetools               4.2.0
cchardet                 2.1.7
certifi                  2020.12.5
cffi                     1.14.4
chardet                  3.0.4
chromedriver-binary-auto 0.1
cmdstanpy                0.9.5
colorama                 0.4.3
configparser             5.0.1
contextlib2              0.6.0.post1
convertdate              2.2.0
cycler                   0.10.0
Cython                   0.29.21
decorator                4.4.2
defusedxml               0.6.0
Django                   3.1.5
django-markdownx         3.0.1
django-ses               1.0.3
elasticsearch            7.10.1
entrypoints              0.3
ephem                    3.7.7.1
et-xmlfile               1.0.1
executing                0.5.4
fake-useragent           0.1.11
fbprophet                0.7.1
flake8                   3.8.4
flatbuffers              1.12
future                   0.18.2
gast                     0.3.3
geographiclib            1.50
geopy                    2.1.0
google-auth              1.24.0
google-auth-oauthlib     0.4.2
google-pasta             0.2.0
googletransx             2.4.2
grpcio                   1.32.0
h5py                     2.10.0
holidays                 0.10.4
icecream                 2.0.0
idna                     2.10
imageio                  2.9.0
ipykernel                5.4.2
ipython                  7.19.0
ipython-genutils         0.2.0
isort                    4.3.21
Janome                   0.4.1
jdcal                    1.4.1
jedi                     0.18.0
Jinja2                   2.11.2
jmespath                 0.10.0
json5                    0.9.5
jsonschema               3.2.0
jupyter-client           6.1.7
jupyter-core             4.7.0
jupyter-server           1.1.3
jupyterlab               3.0.0
jupyterlab-pygments      0.1.2
jupyterlab-server        2.0.0
Keras                    2.4.3
Keras-Preprocessing      1.1.2
kiwisolver               1.3.1
korean-lunar-calendar    0.2.1
lazy-object-proxy        1.4.3
LunarCalendar            0.0.9
lxml                     4.6.2
Markdown                 3.3.3
MarkupSafe               1.1.1
matplotlib               3.3.3
mccabe                   0.6.1
mistune                  0.8.4
multidict                5.1.0
nbclassic                0.2.5
nbclient                 0.5.1
nbconvert                6.0.7
nbformat                 5.0.8
nest-asyncio             1.4.3
notebook                 6.1.6
numpy                    1.19.5
oauthlib                 3.1.0
openpyxl                 3.0.5
opt-einsum               3.3.0
packaging                20.8
pandas                   1.2.0
pandas-datareader        0.9.0
pandocfilters            1.4.3
parso                    0.8.1
pickleshare              0.7.5
Pillow                   8.0.1
pip                      20.3.3
plotly                   4.14.1
poloniexapi              0.5.7
prometheus-client        0.9.0
prompt-toolkit           3.0.8
prophet                  0.1.1.post1
protobuf                 3.14.0
psycopg2-binary          2.8.6
pyasn1                   0.4.8
pyasn1-modules           0.2.8
pycares                  3.1.1
pycodestyle              2.6.0
pycparser                2.20
pyflakes                 2.2.0
Pygments                 2.7.3
pylint                   2.5.3
PyMeeus                  0.3.7
pyparsing                2.4.7
PyPDF2                   1.26.0
pyrsistent               0.17.3
PySimpleGUI              4.32.1
PySocks                  1.7.1
pystan                   2.17.1.0
python-dateutil          2.8.1
python-socks             1.1.2
pyti                     0.2.2
pytz                     2019.3
pywin32                  300
pywinpty                 0.5.7
pyxel                    1.4.3
PyYAML                   5.3.1
pyzmq                    20.0.0
requests                 2.25.1
requests-oauthlib        1.3.0
retrying                 1.3.3
rsa                      4.7
s3transfer               0.3.4
schedule                 0.6.0
scipy                    1.6.0
selenium                 3.141.0
Send2Trash               1.5.0
setuptools               47.1.0
setuptools-git           1.2
six                      1.15.0
sniffio                  1.2.0
soupsieve                2.1
sqlparse                 0.4.1
tensorboard              2.4.1
tensorboard-plugin-wit   1.7.0
tensorflow               2.4.0
tensorflow-estimator     2.4.0
termcolor                1.1.0
terminado                0.9.1
testpath                 0.4.4
toml                     0.10.1
tornado                  6.1
tqdm                     4.55.0
traitlets                5.0.5
tweepy                   3.10.0
twint                    2.1.20
typing-extensions        3.7.4.3
urllib3                  1.26.2
wcwidth                  0.2.5
webencodings             0.5.1
websocket-client         0.57.0
Werkzeug                 1.0.1
wheel                    0.36.2
wrapt                    1.12.1
xlrd                     2.0.1
yarl                     1.6.3
```

### 1-8. ライブラリのリストを表示する（アップデートが必要なもの）

前項で紹介した `pip list` の末尾に半角スペースを空けて `-o` を指定するのみです。

```Terminal
$ pip list -o

Package                Version  Latest   Type
---------------------- -------- -------- -----
bleach                 3.2.1    3.2.2    wheel
boto3                  1.16.55  1.16.59  wheel
botocore               1.19.55  1.19.59  wheel
chardet                3.0.4    4.0.0    wheel
cmdstanpy              0.9.5    0.9.67   wheel
colorama               0.4.3    0.4.4    wheel
convertdate            2.2.0    2.3.0    wheel
gast                   0.3.3    0.4.0    wheel
grpcio                 1.32.0   1.35.0   wheel
h5py                   2.10.0   3.1.0    wheel
idna                   2.10     3.1      wheel
ipykernel              5.4.2    5.4.3    wheel
isort                  4.3.21   5.7.0    wheel
jupyter-client         6.1.7    6.1.11   wheel
jupyter-server         1.1.3    1.2.2    wheel
jupyterlab             3.0.0    3.0.5    wheel
jupyterlab-server      2.0.0    2.1.2    wheel
lazy-object-proxy      1.4.3    1.5.2    wheel
nbclassic              0.2.5    0.2.6    wheel
nbformat               5.0.8    5.1.2    wheel
notebook               6.1.6    6.2.0    wheel
openpyxl               3.0.5    3.0.6    wheel
pandas                 1.2.0    1.2.1    wheel
Pillow                 8.0.1    8.1.0    wheel
plotly                 4.14.1   4.14.3   wheel
prompt-toolkit         3.0.8    3.0.13   wheel
Pygments               2.7.3    2.7.4    wheel
pylint                 2.5.3    2.6.0    wheel
PySimpleGUI            4.32.1   4.34.0   wheel
pystan                 2.17.1.0 2.19.1.1 wheel
python-socks           1.1.2    1.2.0    wheel
pytz                   2019.3   2020.5   wheel
PyYAML                 5.3.1    5.4.1    wheel
pyzmq                  20.0.0   21.0.1   wheel
setuptools             47.1.0   52.0.0   wheel
tensorboard-plugin-wit 1.7.0    1.8.0    wheel
tensorflow             2.4.0    2.4.1    wheel
terminado              0.9.1    0.9.2    wheel
toml                   0.10.1   0.10.2   wheel
tqdm                   4.55.0   4.56.0   wheel
```

### 1-9. ライブラリのリストを表示する（最新状態＝アップデートが不要なもの）

前項で紹介した `pip list -o` の末尾を `-u` へ変えるのみです。

```Terminal
$ pip list -u

Package                  Version
------------------------ -----------
absl-py                  0.11.0
aiodns                   2.0.0
aiohttp                  3.7.3
aiohttp-socks            0.5.5
anyio                    2.0.2
argon2-cffi              20.1.0
asgiref                  3.3.1
astroid                  2.4.2
asttokens                2.0.4
astunparse               1.6.3
async-generator          1.10
async-timeout            3.0.1
attrs                    20.3.0
Babel                    2.9.0
backcall                 0.2.0
Backtesting              0.3.0
beautifulsoup4           4.9.3
bokeh                    2.2.3
boto                     2.49.0
cachetools               4.2.0
cchardet                 2.1.7
certifi                  2020.12.5
cffi                     1.14.4
chromedriver-binary-auto 0.1
configparser             5.0.1
contextlib2              0.6.0.post1
cycler                   0.10.0
Cython                   0.29.21
decorator                4.4.2
defusedxml               0.6.0
Django                   3.1.5
django-markdownx         3.0.1
django-ses               1.0.3
elasticsearch            7.10.1
entrypoints              0.3
ephem                    3.7.7.1
et-xmlfile               1.0.1
executing                0.5.4
fake-useragent           0.1.11
fbprophet                0.7.1
flake8                   3.8.4
flatbuffers              1.12
future                   0.18.2
geographiclib            1.50
geopy                    2.1.0
google-auth              1.24.0
google-auth-oauthlib     0.4.2
google-pasta             0.2.0
googletransx             2.4.2
holidays                 0.10.4
icecream                 2.0.0
imageio                  2.9.0
ipython                  7.19.0
ipython-genutils         0.2.0
Janome                   0.4.1
jdcal                    1.4.1
jedi                     0.18.0
Jinja2                   2.11.2
jmespath                 0.10.0
json5                    0.9.5
jsonschema               3.2.0
jupyter-core             4.7.0
jupyterlab-pygments      0.1.2
Keras                    2.4.3
Keras-Preprocessing      1.1.2
kiwisolver               1.3.1
korean-lunar-calendar    0.2.1
LunarCalendar            0.0.9
lxml                     4.6.2
Markdown                 3.3.3
MarkupSafe               1.1.1
matplotlib               3.3.3
mccabe                   0.6.1
mistune                  0.8.4
multidict                5.1.0
nbclient                 0.5.1
nbconvert                6.0.7
nest-asyncio             1.4.3
numpy                    1.19.5
oauthlib                 3.1.0
opt-einsum               3.3.0
packaging                20.8
pandas-datareader        0.9.0
pandocfilters            1.4.3
parso                    0.8.1
pickleshare              0.7.5
pip                      21.0
poloniexapi              0.5.7
prometheus-client        0.9.0
prophet                  0.1.1.post1
protobuf                 3.14.0
psycopg2-binary          2.8.6
pyasn1                   0.4.8
pyasn1-modules           0.2.8
pycares                  3.1.1
pycodestyle              2.6.0
pycparser                2.20
pyflakes                 2.2.0
PyMeeus                  0.3.7
pyparsing                2.4.7
PyPDF2                   1.26.0
pyrsistent               0.17.3
PySocks                  1.7.1
python-dateutil          2.8.1
pyti                     0.2.2
pywin32                  300
pywinpty                 0.5.7
pyxel                    1.4.3
requests                 2.25.1
requests-oauthlib        1.3.0
retrying                 1.3.3
rsa                      4.7
s3transfer               0.3.4
schedule                 0.6.0
scipy                    1.6.0
selenium                 3.141.0
Send2Trash               1.5.0
setuptools-git           1.2
six                      1.15.0
sniffio                  1.2.0
soupsieve                2.1
sqlparse                 0.4.1
tensorboard              2.4.1
tensorflow-estimator     2.4.0
termcolor                1.1.0
testpath                 0.4.4
tornado                  6.1
traitlets                5.0.5
tweepy                   3.10.0
twint                    2.1.20
typing-extensions        3.7.4.3
urllib3                  1.26.2
wcwidth                  0.2.5
webencodings             0.5.1
websocket-client         0.57.0
Werkzeug                 1.0.1
wheel                    0.36.2
wrapt                    1.12.1
xlrd                     2.0.1
yarl                     1.6.3
```

### 1-10. ライブラリをライブラリ名==バージョンで表示する

```Terminal
$ pip freeze

absl-py==0.11.0
aiodns==2.0.0
aiohttp==3.7.3
aiohttp-socks==0.5.5
anyio==2.0.2
argon2-cffi==20.1.0
asgiref==3.3.1
astroid==2.4.2
asttokens==2.0.4
astunparse==1.6.3
async-generator==1.10
async-timeout==3.0.1
attrs==20.3.0
Babel==2.9.0
backcall==0.2.0
Backtesting==0.3.0
beautifulsoup4==4.9.3
bleach==3.2.1
bokeh==2.2.3
boto==2.49.0
boto3==1.16.55
botocore==1.19.55
cachetools==4.2.0
cchardet==2.1.7
certifi==2020.12.5
cffi==1.14.4
chardet==3.0.4
chromedriver-binary-auto==0.1
cmdstanpy==0.9.5
colorama==0.4.3
configparser==5.0.1
contextlib2==0.6.0.post1
convertdate==2.2.0
cycler==0.10.0
Cython==0.29.21
decorator==4.4.2
defusedxml==0.6.0
Django==3.1.5
django-markdownx==3.0.1
django-ses==1.0.3
elasticsearch==7.10.1
entrypoints==0.3
ephem==3.7.7.1
et-xmlfile==1.0.1
executing==0.5.4
fake-useragent==0.1.11
fbprophet==0.7.1
flake8==3.8.4
flatbuffers==1.12
future==0.18.2
gast==0.3.3
geographiclib==1.50
geopy==2.1.0
google-auth==1.24.0
google-auth-oauthlib==0.4.2
google-pasta==0.2.0
googletransx==2.4.2
grpcio==1.32.0
h5py==2.10.0
holidays==0.10.4
icecream==2.0.0
idna==2.10
imageio==2.9.0
ipykernel==5.4.2
ipython==7.19.0
ipython-genutils==0.2.0
isort==4.3.21
Janome==0.4.1
jdcal==1.4.1
jedi==0.18.0
Jinja2==2.11.2
jmespath==0.10.0
json5==0.9.5
jsonschema==3.2.0
jupyter-client==6.1.7
jupyter-core==4.7.0
jupyter-server==1.1.3
jupyterlab==3.0.0
jupyterlab-pygments==0.1.2
jupyterlab-server==2.0.0
Keras==2.4.3
Keras-Preprocessing==1.1.2
kiwisolver==1.3.1
korean-lunar-calendar==0.2.1
lazy-object-proxy==1.4.3
LunarCalendar==0.0.9
lxml==4.6.2
Markdown==3.3.3
MarkupSafe==1.1.1
matplotlib==3.3.3
mccabe==0.6.1
mistune==0.8.4
multidict==5.1.0
nbclassic==0.2.5
nbclient==0.5.1
nbconvert==6.0.7
nbformat==5.0.8
nest-asyncio==1.4.3
notebook==6.1.6
numpy==1.19.5
oauthlib==3.1.0
openpyxl==3.0.5
opt-einsum==3.3.0
packaging==20.8
pandas==1.2.0
pandas-datareader==0.9.0
pandocfilters==1.4.3
parso==0.8.1
pickleshare==0.7.5
Pillow==8.0.1
plotly==4.14.1
poloniexapi==0.5.7
prometheus-client==0.9.0
prompt-toolkit==3.0.8
prophet==0.1.1.post1
protobuf==3.14.0
psycopg2-binary==2.8.6
pyasn1==0.4.8
pyasn1-modules==0.2.8
pycares==3.1.1
pycodestyle==2.6.0
pycparser==2.20
pyflakes==2.2.0
Pygments==2.7.3
pylint==2.5.3
PyMeeus==0.3.7
pyparsing==2.4.7
PyPDF2==1.26.0
pyrsistent==0.17.3
PySimpleGUI==4.32.1
PySocks==1.7.1
pystan==2.17.1.0
python-dateutil==2.8.1
python-socks==1.1.2
pyti==0.2.2
pytz==2019.3
pywin32==300
pywinpty==0.5.7
pyxel==1.4.3
PyYAML==5.3.1
pyzmq==20.0.0
requests==2.25.1
requests-oauthlib==1.3.0
retrying==1.3.3
rsa==4.7
s3transfer==0.3.4
schedule==0.6.0
scipy==1.6.0
selenium==3.141.0
Send2Trash==1.5.0
setuptools-git==1.2
six==1.15.0
sniffio==1.2.0
soupsieve==2.1
sqlparse==0.4.1
tensorboard==2.4.1
tensorboard-plugin-wit==1.7.0
tensorflow==2.4.0
tensorflow-estimator==2.4.0
termcolor==1.1.0
terminado==0.9.1
testpath==0.4.4
toml==0.10.1
tornado==6.1
tqdm==4.55.0
traitlets==5.0.5
tweepy==3.10.0
twint==2.1.20
typing-extensions==3.7.4.3
urllib3==1.26.2
wcwidth==0.2.5
webencodings==0.5.1
websocket-client==0.57.0
Werkzeug==1.0.1
wrapt==1.12.1
xlrd==2.0.1
yarl==1.6.3
```

### 1-11. ライブラリをライブラリ名==バージョンで出力する

requirements.txt へ出力する際に利用すると便利です。
前項で紹介した `pip freeze` の末尾に半角スペースを空けて `> requirements.txt` を付します。
出力内容は `pip freeze` で表示される内容と同じです。

```Terminal
$ pip freeze > requirements.txt
```

![requirements_txt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/ad62c74b-67c4-0a86-ff69-55792a0726d0.png)


### 1-12. requirements.txt を用いてライブラリを一括でインストールする

開発環境を作り直す際や、本番環境を構築する際に、元の開発環境と同じライブラリ・同じバージョンをインストールする際に使います。

```Terminal
$ pip install -r requirements.txt
```

### 1-13. 個別のライブラリの詳細内容を確認する

指定したライブラリのバージョンやインストールされている場所（パス）などが表示されます。

```Terminal
$ pip show ライブラリ名

$ pip show numpy        # numpy の詳細内容を確認する

Name: numpy
Version: 1.19.5
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email: None
License: BSD
Location: c:\users\xxxxxxxx\appdata\local\programs\python\python38\lib\site-packages
Requires:
Required-by: tensorflow, tensorboard, scipy, pyti, pystan, pandas, opt-einsum, matplotlib, Keras, Keras-Preprocessing, imageio, h5py, fbprophet, cmdstanpy, bokeh, Backtesting
```

### 1-14. pip 依存関係を確認する

```Terminal
$ pip check

No broken requirements found.
# 問題ない場合

wagtail 2.6.1 has requirement django-modelcluster<5.0,>=4.2, but you have django-modelcluster 5.0.
# 依存関係に問題がある場合
```

## 2. [pip-review](https://pypi.org/project/pip-review/)

`pip-review` は pip でインストールした Python ライブラリに対して、アップデートの確認からアップデートの実行までを、自動かつ一括で行なうことができる優れもの。
大変便利ですので、是非インストールしておきましょう。

### 2-1. インストール方法

```Terminal
$ pip install pip-review
```

### 2-2. 使い方

```Terminal
$ pip-review --auto
```

　
　
## 注意事項
ときに、Python のバージョンや、お使いの環境、他のライブラリとで対応バージョンの相違などにより、不具合やエラーが発生します。
そのような際は、各ライブラリの Usage やリリースノート（Release history）などのドキュメントをご参照の上で、（ときにバージョンダウン等の）対応をしていただければと思います。
これは OSS を利用する上で起こりうることとして、頭の片隅に置いていただければ幸いです。


---
#### 参考
- [Python 標準ライブラリ](https://docs.python.org/ja/3/library/index.html)
- [PyPI (The Python Package Index)](https://pypi.org/)


---
#### (編集後記)
Python はライブラリが豊富であるとはよく言われることですが、まずはその `ライブラリ` とは何かと、ライブラリをインストール、管理する `pip` について説明いたしました。
今後、よく使うライブラリや、便利な（おすすめ）ライブラリをまとめておくつもりです。
python には、数えきれないほど多くのライブラリが存在します。
有益なライブラリは、ぜひ積極的に活用していただき、皆様からも情報共有いただけると大変有り難いです。