Pythonを使えるようにする手順@Mac

## Python3を使えるようにするために
Macには標準でPythonが入っていますが、バージョンが2と古く、そのまま使うのは非推奨です。古いプロジェクトであれば2を使いますが、世の中の多くは3をベースに動いていますので、3に合わせましょう。

:::note info
本稿は環境によって差異が出る内容となっています。
コマンドを安易にコピペせず、よく確認の上作業をお願いします。（責任は負いかねます）

誤りがありましたら、コメントでのご指摘をお願いします。
:::


## Homebrewを入れる
まずはともあれ、Homebrewを入れましょう。
これはパッケージ管理アプリケーションという類のもので、パッケージ（今回でいうとPython3がこれにあたります）の管理をいい感じにやってくれます。
```sh:homebrewのインストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

きちんと入ったことを確認するために、version確認をしましょう。

```sh:homebrewのバージョン確認
brew --version
```
```sh:標準出力
Homebrew <version>
```

上記のようになればOKです。

## Pythonをインストールする。
特にこだわりがなければ、Pythonの最新版をインストールしましょう。

```sh:Pythonのインストール
brew install python
```
終わったら、もちろんversion確認を。

```sh:Pythonのバージョン確認
python -V
```
```sh
python 2.7
```
こうなっているはずです。
**実はここが落とし穴！**
`brew install python`をした時のログ（多分めっちゃ長い）ですが、python3.12とか「python3.*」が書かれているはずです。

Macには元々Python2が入っていて、そっちが参照されちゃっている状態です。
ここままでは、せっかくインストールしたPython3が使えず、python2を使うことになります。
（それでも問題はなくないですが、、、今回の主題は”Python3がつかえるようになろー”です。）
これを、インストールしたPython3に変えていきましょう。

## Python2からPython3に変更する。
まずは、Pythonがどこにあるのかを見ましょう。
```sh:Pythonがどこにあるのか
where python
```

```sh:標準出力
/usr/local/bin/python
```
:::note info
環境によっては少し表記が違うかもしれません。
出力された内容に後述の内容を読み替えてください。
:::

Pythonは`/usr/local/bin`というパスにいることはわかりました。
Mac(ひいてはLinux,UNIX)のコマンドは、ディレクトリのどこかにファイルとして存在しています。
Python、というコマンドを打つと、このパスから参照されます。（今回はコマンドの参照については割愛します）　
<!-- 後々記事にしたい-->

では、このPATHに移動しましょう。
```sh
cd /usr/local/bin
```

ここで

`ls`

するとかなりの数の出力が出ると思います。今回参照したいのはPythonだけなので、絞りましょう。

```sh
ls -l | grep python
```

すると、pythonの関連のエイリアスがたくさん並んでいる画面になったと思います。
```sh
lrwxr-xr-x  1 <user name>  admin        42  9  3 01:31 2to3-3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/2to3-3.9
lrwxr-xr-x  1 <user name>  admin        41  9  3 01:31 idle3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/idle3.9
lrwxr-xr-x  1 <user name>  admin        48  9  3 03:15 pip -> /usr/local/Cellar/python@3.9/3.9.19_1/bin/pip3.9
lrwxr-xr-x  1 <user name>  admin        40  9  3 01:32 pip3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/pip3.9
lrwxr-xr-x  1 <user name>  admin        42  9  3 01:31 pydoc3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/pydoc3.9
lrwxr-xr-x  1 <user name>  admin        43  9  3 02:49 python -> ../Cellar/python@3.9/3.9.19_1/bin/python3.9
lrwxr-xr-x  1 <user name>  admin        38  7  6 14:04 python-build -> ../Cellar/pyenv/2.4.5/bin/python-build
lrwxr-xr-x  1 root              wheel        75  6 24  2022 python-config -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python-config
lrwxr-xr-x  1 root              wheel        69  6 24  2022 python2 -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2
lrwxr-xr-x  1 root              wheel        76  6 24  2022 python2-config -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2-config
lrwxr-xr-x  1 root              wheel        71  6 24  2022 python2.7 -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
lrwxr-xr-x  1 root              wheel        78  6 24  2022 python2.7-config -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
lrwxr-xr-x  1 root              wheel        70 11  3  2022 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3
lrwxr-xr-x  1 root              wheel        77 11  3  2022 python3-config -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3-config
lrwxr-xr-x  1 root              wheel        78 11  3  2022 python3-intel64 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3-intel64
lrwxr-xr-x  1 root              wheel        73 11  3  2022 python3.11 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11
lrwxr-xr-x  1 root              wheel        80 11  3  2022 python3.11-config -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11-config
lrwxr-xr-x  1 root              wheel        81 11  3  2022 python3.11-intel64 -> ../../../Library/Frameworks/Python.framework/Versions/3.11/bin/python3.11-intel64
lrwxr-xr-x  1 <user name>  admin        43  9  3 01:31 python3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/python3.9
lrwxr-xr-x  1 <user name>  admin        50  9  3 01:31 python3.9-config -> ../Cellar/python@3.9/3.9.19_1/bin/python3.9-config
-rwxr-xr-x  1 <user name>  admin     28640  9  3 02:36 python_bk
lrwxr-xr-x  1 root              wheel        69  6 24  2022 pythonw -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw
lrwxr-xr-x  1 root              wheel        70  6 24  2022 pythonw2 -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2
lrwxr-xr-x  1 root              wheel        72  6 24  2022 pythonw2.7 -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7
lrwxr-xr-x  1 <user name>  admin        42  9  3 01:32 wheel3.9 -> ../Cellar/python@3.9/3.9.19_1/bin/wheel3.9
```

この中で重要なのは、以下の1行です。
```sh
lrwxr-xr-x  1 root              wheel        68  6 24  2022 python -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python
```

文中に`->`というように矢印が見えますが、これは”**左のコマンドが入力されたら、右のコマンドを実行するよー**”みたいなやつです。（これをエイリアスといいます）

諸悪の根源（こと今回の主題に限っては）はこの部分。
ここで指定されているのがpython2になっています。

このバージョンをPython3に変えましょう。

### カレントディレクトリの確認
まずは安全のために、カレントディレクトリをしっかり確認。
rmコマンドは環境を安易に破壊できてしまいますので、今どこで使おうとしているのかは確認しましょう。
（今の環境でも十分怖いですが、、、、）
あまりピンときていない方は、「rm 危険」とかで調べてみてください。
```sh
pwd
```
```sh:出力結果
/usr/local/bin #これになっていることをしっかり確認！！！
```

### エイリアスの削除
```sh
rm python
ls -l | grep python # pythonエイリアスがなくなっていることを確認
```

### エイリアスの再作成
```sh
ln -s ../Cellar/python@3.12/3.12.5/bin/python3.12 /usr/local/bin/python
ls -l | grep python # pythonのエイリアスが更新されていることを確認
```

### 確認
次のコマンドで、正しい出力が出ればOKです。
```sh
python -V
```

```sh:出力結果
Python 3.12.5
```

これで、pythonコマンドでpython3が利用できるようになりました。

:::note info
自分の環境では、homebrewのパッケージインストール先が下記になっていました。
`/usr/local/Cellar`
なので、これが別の場所だった方は適宜読み替えてください。

homebrewでインストールしたバージョンがpython3.12なら、
`where python3.12`
ののち、
出てきたエイリアスの指定先を調べてみましょう。
:::

## pipのエイリアス更新
同様に、pipのエイリアスを変更します。
pipはHomebrewと似ていますが、ライブラリ管理アプリケーションになります。
違う点は、"pythonで使用するライブラリはpip"というところ。
下記のイメージのように、「担当範囲が違う」という感覚でいいかなと思います。
![無題のプレゼンテーション.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1988778/0e676437-10e9-bf6e-ee9c-8c38f24a984c.jpeg)


これも初期設定では`pip=python2のpip`になっていますので、変えていきましょう。

ディレクトリ`/usr/local/bin`に移動してください。(さっきpythonのエイリアスを編集したのと同じディレクトリです。続きで作業なら移動不要)
```sh
cd /usr/local/bin
pwd #/usr/local/binと出ればOK
```

### pipエイリアスの確認
```sh
 ls -l | grep pip
```

```sh:出力結果
lrwxrwxr-x  1 root              wheel        65  6 24  2022 pip -> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip
```

同様に、python2のものになっています。

### エイリアスの削除
```sh
rm pip
ls -l | grep pip # pipエイリアスがなくなっていることを確認
```

### エイリアスの再作成
```sh
ln -s ../Cellar/python@3.12/3.12.5/bin/pip3.12 /usr/local/bin/pip
ls -l | grep pip # pipのエイリアスが更新されていることを確認
```

### 確認
次のコマンドで、正しい出力が出ればOKです。
```sh
pip -V
```

```sh:出力結果
pip 24.2 from /usr/local/lib/python3.12/site-packages/pip (python 3.12)
```

## オマケ）パッケージ管理って何？必要？って方へ
自分が最初そうだったので、、、

アプリケーションだったりをWeb検索して、HPからインストーラーをダウンロード→exeだったりdmgをぽちぽちしてインストールしていた人にとって、コマンドラインで色々操作するのには抵抗があります。

ただし、パッケージ管理の便利なところは
- 一括でアップデートできる
- 複数のバージョンを切り替えられる。
- アプリケーションを入れているかどうかが一発でわかる。
など、いろいろなメリットがあります。

いまは”これでアプリの管理をするとめちゃくちゃ便利！！”というイメージでいればOKです。