EnvaderでPythonの環境構築を学んだのでmacOSで実践してみる(第3回)

## はじめに
はじめましてa-min3150です。エンジニアへの転職を目標に学習中です。
アウトプットのためEnvaderで学習したこと、ハマったことなどを書いていきたいと思います。

## 今回の学習内容
EnvaderでPythonの環境構築について学習したのでアウトプットします。

今回は第3回目で```pip```コマンドの使い方についてです。

第１回(Pythonとは)は[こちら](https://qiita.com/a-min3150/items/bf2e575668cc986dd5d9)
第２回(pyenvについて)は[こちら](https://qiita.com/a-min3150/items/56b2e9bf8957d3247d81)
第４回(venvについて)は[こちら](https://qiita.com/a-min3150/items/6211b80617d00284a081)
第５回(virtualenvについて)は[こちら](https://qiita.com/a-min3150/items/76ab94d98b1292e1c8f7)
第６回(requirements.txtの使い方)は[こちら](https://qiita.com/a-min3150/items/c51e5090353e10b4df91)
第７回(git cloneの使い方)は[こちら](https://qiita.com/a-min3150/items/bf8d062a3ab474523e7d)


## pipコマンドとは
```pip```コマンドはpythonのパッケージをインストールするために使用するコマンドです。

パッケージとは何かについては下記のリンクを参照してください。

https://aiacademy.jp/media/?p=129

## macOSでpipを使えるようにするには
[前回](https://qiita.com/a-min3150/items/56b2e9bf8957d3247d81)のときに```pyenv```コマンドを使ってインストールしたPythonと同時にpipもインストールされています。
```pip -V```で確認してみましょう。
```
pip -V
pip 21.2.4 from /Users/user/.pyenv/versions/3.10.2/lib/python3.10/site-packages/pip (python 3.10)
```
上記のようにバージョンが表示されれば、パスも通っており```pip```コマンドが使える状態となります。

## pipを使ったパッケージのインストール
パッケージをインストールしたいときは、 pip install の後にパッケージ名を入力し実行することでインストールできます。
```
> pip install パッケージ名
```
 ## パッケージのアップグレード
パッケージを最新版にアップグレードしたいときは、 pip install の後にライブラリ名を入力し実行することでアップグレードできます。
```
> pip install --upgrade パッケージ名
```
最新版か確認するときは ```pip list``` の後に ```--outdated```をつけて実行することで、最新版でないバージョンのみを表示することができます。
```
> pip list --outdated
```

## バージョンを指定してインストール
パッケージ名の後に ```==``` とつけてその後にバージョンを記入することで、バージョンを指定してインストールすることができます。
最新バージョンが不安定な時や、特定のバージョンでないと動作しない時などに利用します。
逆に以前のバージョンを指定すればダウングレードをすることも可能です。
```
> pip install パッケージ名==バージョン
```
以下のように入力することでインストール可能なバージョンを確認することもできます。
```
> pip install パッケージ名==
```
## パッケージのアンインストール
パッケージをアンインストールしたいときは、 pip uninstall の後にパッケージ名を入力し実行することでアンインストールできます。
 ```
> pip uninstall パッケージ名
```
## インストール済みのパッケージの確認
```pip list``` を実行することで既にインストールされているパッケージを確認することができます。また、```pip freeze```を実行するとパッケージとバージョンを確認することができます。

```
> pip list 
> pip freeze
```
## バージョンの控えを取る方法
パッケージの中には、他のパッケージの特定のバージョンのみに対応している物もあります。その場合にパッケージをアップグレードしたときに、正常に動作しなくなってしまうかもしてません。そのような時のために通常バージョンの控えを取っておきます

控えの取り方は先ほど紹介した ```pip freeze``` を使用します。実行すると今インストールしているパッケージとバージョンが出力されるので、その出力をテキストファイルに保存することで各バージョンの控えを作成します。また、保存しておくテキストファイルは基本 ```requirements.txt``` という名前のファイルを使用します。
```
$ pip freeze > requirements.txt
# requirements.txt の中身
asgiref==3.5.0
beautifulsoup4==4.10.0
Django==4.0.2
django-bootstrap5==21.3
django-jquery==3.1.0
fontawesomefree==6.0.0
PyMySQL==1.0.2
soupsieve==2.3.1

```
このようにバージョンの控えを作成しておくことで、正常に動作しなくなった場合でも元のバージョンに戻すことができます。
```
> pip install -r requirements.txt
```
 ```pip install``` の後に ```-r``` と ```requirements.txt``` を入力し実行することで控えて置いたバージョンに戻せます。

バージョンの控えは開発をする時や、githubやアプリケーションを公開するときに必ず利用するので、よく理解しておきましょう。

## macOSでpipコマンドを実践してみる

PythonのフレームワークであるFlaskを下記リンクのやり方を元にインストールをしていきます。

https://flask.palletsprojects.com/en/2.1.x/installation/

仮想環境```venv```を起動してpip listを実行。
(```venv```の使い方については[こちら](https://qiita.com/a-min3150/items/6211b80617d00284a081)を参照ください)
pipとsetuptoolsのみがインストールされていることが確認できました。
```
(venv)   macOS:test_pip user$ pip list
Package    Version
---------- -------
pip        21.2.4
setuptools 58.1.0
```

```
WARNING: You are using pip version 21.2.4; however, version 22.0.4 is available.
You should consider upgrading via the '/Users/user/Desktop/test_pip/venv/bin/python -m pip install --upgrade pip' command.
```
pipのバージョンが古いですよと警告が出たので```--upgrade```コマンドを実行

```
(venv)   macOS:test_pip user$ pip install --upgrade pip
Requirement already satisfied: pip in ./venv/lib/python3.10/site-packages (21.2.4)
Collecting pip
  Using cached pip-22.0.4-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 21.2.4
    Uninstalling pip-21.2.4:
      Successfully uninstalled pip-21.2.4
Successfully installed pip-22.0.4//upgradeできた
```
バージョンを指定してFlaskをインストールする
```
(venv)   macOS:test_pip user$ pip install flask==2.0.3
```


インストールされたか確認
```

(test) macOS:test_venv user$ pip list
Package      Version
------------ -------
click        8.1.2
Flask        2.0.3
itsdangerous 2.1.2
Jinja2       3.1.1
MarkupSafe   2.1.1
pip          22.0.4
setuptools   58.1.0
Werkzeug     2.1.1
```
Flaskのバージョン2.0.3とそれに関連したパッケージが一緒にインストールされているのを確認できました。

Flaskが最新バージョンかどうか確認する。
```

(test) macOS:test_venv user$ pip list --outdated
//最新バージョンは2.1.1.があると教えてくれる。
Package    Version Latest Type
---------- ------- ------ -----
Flask      2.0.3   2.1.1  wheel
```
インストールしたパッケージのバージョン情報をrequirements.txtに保存する。
```
(test) macOS:test_venv user$ pip freeze > requirements.txt
//requirements.txtの中身を確認する。
(test) macOS:test_venv user$ cat requirements.txt
click==8.1.2
Flask==2.0.3
itsdangerous==2.1.2
Jinja2==3.1.1
MarkupSafe==2.1.1
Werkzeug==2.1.1
```
以上のように```pip```コマンドを使えば、インストールしたパッケージを管理できるようになります。
皆さんも自分のPCで実践してみてください。

## まとめ

1. pythonパッケージをインストール(```pip install```)する方法
1. pythonパッケージをアップグレード(```pip upgrade```)する方法
1. pythonパッケージをアンインストール(```pip uninstall```)する方法
1. インストール済みのパッケージの確認(```pip list``` ```pip freeze```)する方法
1. ```requirements.txt``` でのインストールしたバージョンの保存方法
について解説しました。

```pip```コマンドは仮想環境を作って使用することで、「システム全体にインストールする場合(global)」と「仮想環境下のみでインストールしたい場合(local)」を分けることができ、また仮想環境ごとに独立させてパッケージを管理できるようになります。

次回は[venvコマンドでの仮想環境](https://qiita.com/a-min3150/items/6211b80617d00284a081)について解説します。


## 引用サイト
- Envader(エンベーダー):https://envader.plus/
- コース一覧:https://envader.plus/course
- Python環境構築コース:https://envader.plus/course/8
- 今回解説したコースシナリオ:https://envader.plus/course/8/scenario/1072