Homebrewと公式インストーラーのPythonが混在

環境
- Macbook Air(M1, 2020), Ventura
- 初心者です、言葉遣い等間違っている可能性もありますがお手柔らかにお願いします
## 原因
大学で何回かPythonを使ったことがあるが、時間が空いてしまいどれをインストールしたかを忘れてしまった。初心者なのでネットに転がっている記事頼りで環境構築してしまったので、あまりよくわかっていなかった。

## 状況
HomebrewからインストールしたPythonと公式インストーラーからインストールしたPythonが競合している

### HomebrewからインストールしたPython
バージョンはPython3.12.3のようです。/opt/homebrew/Cellar/python@3.12/3.12.3に入っています。
```zsh:zsh
~ % brew info python
==> python@3.12: stable 3.12.3 (bottled)
Interpreted, interactive, object-oriented programming language
https://www.python.org/
Installed
/opt/homebrew/Cellar/python@3.12/3.12.3 (3,272 files, 65.7MB) *
  Poured from bottle using the formulae.brew.sh API on 2024-05-04 at 11:41:00
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/p/python@3.12.rb
License: Python-2.0
==> Dependencies
Build: pkg-config ✔
Required: mpdecimal ✔, openssl@3 ✔, sqlite ✔, xz ✔
==> Caveats
Python has been installed as
  /opt/homebrew/bin/python3

Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
  /opt/homebrew/opt/python@3.12/libexec/bin

See: https://docs.brew.sh/Homebrew-and-Python
==> Analytics
install: 314,431 (30 days), 903,328 (90 days), 2,103,863 (365 days)
install-on-request: 113,067 (30 days), 298,870 (90 days), 546,065 (365 days)
build-error: 1,318 (30 days)
```


### 公式インストーラからによるPython
バージョンは3.6.8のようです。/Library/Frameworks/Python.framework/Versions/3.6/bin/python3に入っています。
```zsh:zsh
~ % python3 -V
Python 3.6.8
```

```zsh:zsh
~ % which python3
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3
```



## なぜ気づいたか
- 研究でPythonを使おうとしたところ、入れたはずのライブラリが使えないことに気づきました
- `% echo $PATH`で確認したところ、一番上に`/Library/Frameworks/Python.framework/Versions/3.6/bin`（これは公式インストーラによるPythonだそうです）が入っていました
    - `% pip3 install`をしたときに、すべて公式インストーラーによるPythonの方にライブラリがインストールされていた！


## 現状分析
ネットの情報を見ると、既に通したPATHを修正するには`~/.zshrc`を書き換えろという記事が大量に見つかります。しかし、私の環境の場合、
```zsh:zsh
~ % vi ~/.zshrc

~
~
~
…
```
何も書かれていません。

そこで、`~/.zprofile`を確認します。
```zsh:zsh
~ % vi ~/.zprofile


# Setting PATH for Python 3.6
# The original version is saved in .zprofile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
export PATH
```
現れました。あまりよくわかっていないですが、ここでPATHが通されています。ですので、これを編集して無効化しましょう。
```zsh:zsh
~ % vi ~/.zprofile


# Setting PATH for Python 3.6
# The original version is saved in .zprofile.pysave
#PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
#export PATH
```
消しても良いかと思ったのですが、一応コメントアウトしておきました。iキーを押しinsertモードにして編集したあと、escしてcommandモードに戻します。:qだと保存せず終了してしまいますが、上書き保存してから終了するために:wqと打ちます。保存されているか不安ならもう一度`% vi ~/.zprofile`をしてみればよいです。（実際には、この変更はターミナルを再起動しないと適用されないのでここで一度再起動しましょう）

しかしこれでも
```zsh:zsh
~ % which python3
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3
```
となり、まだ解消されていません。
そこで、
```zsh:zsh
~ % cd /usr/local/bin  
```
から、次のように実行します。ここで、lsの-ldオプションはディレクトリの中身ではなく、それ自体の情報を表示します。また、py*で先頭にpyがつくものを検索して表示しています。これを行うと、
```zsh:zsh
bin % ls -ld py* 

lrwxr-xr-x  1 root  wheel  68 10 30  2023 pydoc3 -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/pydoc3
lrwxr-xr-x  1 root  wheel  70 10 30  2023 pydoc3.6 -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/pydoc3.6
lrwxr-xr-x  1 root  wheel  69 10 30  2023 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/python3
lrwxr-xr-x  1 root  wheel  76 10 30  2023 python3-config -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/python3-config
lrwxr-xr-x  1 root  wheel  71 10 30  2023 python3.6 -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6
lrwxr-xr-x  1 root  wheel  78 10 30  2023 python3.6-config -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6-config
lrwxr-xr-x  1 root  wheel  72 10 30  2023 python3.6m -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6m
lrwxr-xr-x  1 root  wheel  79 10 30  2023 python3.6m-config -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6m-config
lrwxr-xr-x  1 root  wheel  68 10 30  2023 pyvenv -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/pyvenv
lrwxr-xr-x  1 root  wheel  72 10 30  2023 pyvenv-3.6 -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/pyvenv-3.6
```
このように私の環境では表示されました。また、

```zsh:zsh
~ % cd /opt/homebrew/Cellar/python@3.12/3.12.3/bin
```

```zsh:zsh
bin % ls -l
total 24
lrwxr-xr-x  1 maoshoji  admin   53  4  9 17:09 2to3 -> ../Frameworks/Python.framework/Versions/3.12/bin/2to3
lrwxr-xr-x  1 maoshoji  admin   58  4  9 17:09 2to3-3.12 -> ../Frameworks/Python.framework/Versions/3.12/bin/2to3-3.12
lrwxr-xr-x  1 maoshoji  admin   54  4  9 17:09 idle3 -> ../Frameworks/Python.framework/Versions/3.12/bin/idle3
lrwxr-xr-x  1 maoshoji  admin   57  4  9 17:09 idle3.12 -> ../Frameworks/Python.framework/Versions/3.12/bin/idle3.12
-rwxr-xr-x  1 maoshoji  wheel  249  5  4 11:41 pip3
-rwxr-xr-x  1 maoshoji  wheel  249  5  4 11:41 pip3.12
lrwxr-xr-x  1 maoshoji  admin   55  4  9 17:09 pydoc3 -> ../Frameworks/Python.framework/Versions/3.12/bin/pydoc3
lrwxr-xr-x  1 maoshoji  admin   58  4  9 17:09 pydoc3.12 -> ../Frameworks/Python.framework/Versions/3.12/bin/pydoc3.12
lrwxr-xr-x  1 maoshoji  admin   56  4  9 17:09 python3 -> ../Frameworks/Python.framework/Versions/3.12/bin/python3
lrwxr-xr-x  1 maoshoji  admin   63  4  9 17:09 python3-config -> ../Frameworks/Python.framework/Versions/3.12/bin/python3-config
lrwxr-xr-x  1 maoshoji  admin   59  4  9 17:09 python3.12 -> ../Frameworks/Python.framework/Versions/3.12/bin/python3.12
lrwxr-xr-x  1 maoshoji  admin   66  4  9 17:09 python3.12-config -> ../Frameworks/Python.framework/Versions/3.12/bin/python3.12-config
lrwxr-xr-x  1 maoshoji  admin    9  5  4 11:41 wheel3 -> wheel3.12
-rwxr-xr-x  1 maoshoji  wheel  236  5  4 11:41 wheel3.12
```
このようになりました。

## 解決法

```zsh:zsh
〜 % cd /usr/local/bin  
```
にまず入り、/usr/local/bin に入っているシンボリックリンクを書き換えます。つまり、
```zsh:zsh
bin % ln -nfs /opt/homebrew/Cellar/python@3.12/3.12.3/bin/2to3 2to3
bin % ln -nfs /opt/homebrew/Cellar/python@3.12/3.12.3/bin/idle3 idle3
bin % ln -nfs /opt/homebrew/Cellar/python@3.12/3.12.3/bin/pydoc3 pydoc3
bin % ln -nfs /opt/homebrew/Cellar/python@3.12/3.12.3/bin/python3 python3
bin % ln -nfs /opt/homebrew/Cellar/python@3.12/3.12.3/bin/python3-config　python3-config
```

この結果！
```zsh:zsh
bin % ls -ld py* 
lrwxr-xr-x  1 root  wheel  50  7 21 16:02 pydoc3 -> /opt/homebrew/Cellar/python@3.12/3.12.3/bin/pydoc3
lrwxr-xr-x  1 root  wheel  70 10 30  2023 pydoc3.6 -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/pydoc3.6
lrwxr-xr-x  1 root  wheel  51  7 21 16:02 python3 -> /opt/homebrew/Cellar/python@3.12/3.12.3/bin/python3
lrwxr-xr-x  1 root  wheel  58  7 21 16:02 python3-config -> /opt/homebrew/Cellar/python@3.12/3.12.3/bin/python3-config
lrwxr-xr-x  1 root  wheel  71 10 30  2023 python3.6 -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6
lrwxr-xr-x  1 root  wheel  78 10 30  2023 python3.6-config -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6-config
lrwxr-xr-x  1 root  wheel  72 10 30  2023 python3.6m -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6m
lrwxr-xr-x  1 root  wheel  79 10 30  2023 python3.6m-config -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6m-config
lrwxr-xr-x  1 root  wheel  68 10 30  2023 pyvenv -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/pyvenv
lrwxr-xr-x  1 root  wheel  72 10 30  2023 pyvenv-3.6 -> ../../../Library/Frameworks/Python.framework/Versions/3.6/bin/pyvenv-3.6

```
2to3とかはpy*に含まれていないのでここには非表示です
結果として見事、
```zsh:zsh
~ % python3 -V
Python 3.12.3
```
成功しました！

## 参考サイト
https://takamoto.biz/2021/12/python-version/