環境
- Macbook Air(M1, 2020), Ventura
- 初心者です、言葉遣い等間違っている可能性もありますがお手柔らかにお願いします
原因
大学で何回かPythonを使ったことがあるが、時間が空いてしまいどれをインストールしたかを忘れてしまった。初心者なのでネットに転がっている記事頼りで環境構築してしまったので、あまりよくわかっていなかった。
状況
HomebrewからインストールしたPythonと公式インストーラーからインストールしたPythonが競合している
HomebrewからインストールしたPython
バージョンはPython3.12.3のようです。/opt/homebrew/Cellar/python@3.12/3.12.3に入っています。
~ % 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に入っています。
~ % python3 -V
Python 3.6.8
~ % 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
を書き換えろという記事が大量に見つかります。しかし、私の環境の場合、
~ % vi ~/.zshrc
~
~
~
…
何も書かれていません。
そこで、~/.zprofile
を確認します。
~ % 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が通されています。ですので、これを編集して無効化しましょう。
~ % 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
をしてみればよいです。(実際には、この変更はターミナルを再起動しないと適用されないのでここで一度再起動しましょう)
しかしこれでも
~ % which python3
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3
となり、まだ解消されていません。
そこで、
~ % cd /usr/local/bin
から、次のように実行します。ここで、lsの-ldオプションはディレクトリの中身ではなく、それ自体の情報を表示します。また、py*で先頭にpyがつくものを検索して表示しています。これを行うと、
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
このように私の環境では表示されました。また、
~ % cd /opt/homebrew/Cellar/python@3.12/3.12.3/bin
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
このようになりました。
解決法
〜 % cd /usr/local/bin
にまず入り、/usr/local/bin に入っているシンボリックリンクを書き換えます。つまり、
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
この結果!
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*に含まれていないのでここには非表示です
結果として見事、
~ % python3 -V
Python 3.12.3
成功しました!
参考サイト