ターミナルのコマンドを理解していないのにターミナルを使う無謀なマスターU(@Udemy11)です。
Anacondaをインストールすると、Pythonは
/Users/bigmacpro(Mac名)/opt/anaconda3/bin/
にインストールされます。
通常なら、ターミナルでpythonと実行すれば、AnacondaでインストールしたPython3.7.6が起動するはずなのですが、何度やっても標準でインストールされているpython2.7.3が起動します。
その上、Python2.7はおすすめできないなんて警告が出てるので、なんとかしないわけにはいきません。
警告文の中に、python3というコマンドを使えばいいよってことが書いてあったので、python3を実行してみると、これまた最初からインストールされているPyhon3.6.3が起動します。
とりあえず、
/Users/bigmacpro/opt/anaconda3/bin/python
と入力すれば、Anacondaでインストールした最新のPythonを起動することができました。
でも毎回こんな入力をするのはめちゃくちゃ不便なので、以前、下記のAWS講座を受講したときに、WindowsのPATHでつまづいたことを思い出し、PATHを通せばうまく起動できるんじゃない?なんて思って試してみることに。
一度は通った道なので、かんたんにできるかと思いきや、かなりはまってしまったので、健忘録として、記録に残しておこうと思います。
exportでPATHを追加
今は、ググればほとんどの疑問を解決してくれるので、ほんと便利な世の中になりましたよね!
で、今回も調べてみると
echo $PATH
でPATHを調べてみたのち、
export PATH=/Users/bigmacpro/opt/anaconda3/bin:$PATH
でPATHを追加すればいいだけらしいので、exportコマンドを試してからpythonを実行するときちんとPython3.7.6が起動して一安心。
しかし、安心したのもつかの間、ターミナルを終了して再びpythonコマンドを実行すると、どういうわけかまたPython2.7.3に逆戻り。
そこで再びGoogleさんの出番です。
sourceで設定を反映
どうやらsourceコマンドで設定内容を反映させないといけなかったようで、早速sourceコマンドを実行しようと【ls -la】コマンドを実行してフォルダの中身を見てみました。
とりあえず、設定ファイルの~/.bash_profileはちゃんと存在しています。
中身はAnacondaのインストール時に書き込まれたと思われる内容で、きちんと下記のPATHを通しているような内容が書かれているではありませんか!
export PATH=/Users/bigmacpro/opt/anaconda3/bin:$PATH
でも動いてないんですよね。
なので、再度Googleさんの出番です。
Catalinaのターミナルはbashではなくzshで動いてるらしい
bashなんだかzshなんだかよくわからないのですが、ようするに、Anacondaで設定ファイル(.bash_profile)に書き込まれた内容は、Mojaveまでのターミナルで使われていたbashに対応したもので、Catalinaから採用されているzshには対応していなかったということです。
bash・zshとは
- sh
- ksh
- csh
- tcsh
- bash
- zsh
ちなみに、Catalinaから採用されたzshは最強のシェルと呼ばれているらしいです。
zsh用の設定ファイルを作成
参考にしたのは、こちらの記事。
この記事を見つけてからも、そもそもexportコマンドでPATHが記載されているのに、そのファイルはどこにあるのか気になって調べたり、下記サイトを参考に、デフォルトで読み込まれるPATHが保存されたファイルを見つけてみたりして、かなり時間を費やしてしまいました。
PATHが保存されているファイルがわかったので、デフォルトで読み込まれるPATHを変更しようとしたんですが、変更できなかったので、結局、最初に見つけた方法を試してみることに。
.bash_profileの中身を.zprofileに入れるだけ
PATHを通すためにやることは、次の5つ。
- .bashrcに記載されてる内容を.zshrcに書き込む。
- sourceコマンドで .zshrcの変更内容を即時反映する。
- .bash_brofileに記載されている内容を.zprofileに書き込む。
- sourceコマンドで、.zprofileの変更内容を即時反映する。
- ターミナルを再起動する
もともと.bashrcファイルは存在しておらず.zshrcも存在していないので、作る必要はありませんでした。
なので、上記2つは実行していません。
.bash_profileはAnacondaインストール時に作成されていたので、そのファイルを下記コマンドで開きます。
open .bash_profile
コードエディタでファイルが開かれますが、Anacondaをインストールしているだけなら、次のとおりのコードが記載されています。
# added by Anaconda3 2019.10 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/Users/bigmacpro/opt/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
\eval "$__conda_setup"
else
if [ -f "/Users/bigmacpro/opt/anaconda3/etc/profile.d/conda.sh" ]; then
. "/Users/bigmacpro/opt/anaconda3/etc/profile.d/conda.sh"
CONDA_CHANGEPS1=false conda activate base
else
\export PATH="/Users/bigmacpro/opt/anaconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda init <<<
ファイルは開いたままにしておき、ターミナルに戻って下記コマンドで.zprofileを作成します。
vi .zprofile
上記はターミナル上でファイルを指定して開くコマンドですが、ファイルが存在しないと自動で新規に作成してくれます。
viはターミナル上でファイルを編集できるエディタなので、いろいろコマンドがあるのですが、使ったことがない私は、使い方もわかりませんでした。
とりあえずviの使い方をググってみて、下記コマンドで保存終了させられることがわかりました。
:wq
次に下記コマンドを実行して、コードエディタで.profileを開きます。
open .vprofile
先程開いていた.bash_profileの中身をすべてコピーし、あとから開いた.zprofileにペーストして保存します。
次に、再びターミナルに戻り、sourceコマンドで.zprofileの更新内容を反映させます。
source ~/.zprofile
最後にターミナルを再起動して完了です。
PATHを確認
ターミナルを立ち上げたら、echoでPATHを確認しましょう!
echo $PATH
うまくできていれば、次のように出力されます。
/Users/bigmacpro/opt/anaconda3/bin:/Users/bigmacpro/opt/anaconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
これでpythonと実行すれば、Python3.7.6が起動します。
bigmacpro@BigMac-Pro ~ % python
Python 3.7.6 (default, Jan 8 2020, 13:42:34)
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
こうして成長していく
Macユーザーでプログラマーの方にはお茶の子さいさいの当たり前のことすら、ここまで理解するのに丸1日以上かかってしまいました。
さらっと実行した内容を紹介しましたが、ここにたどり着くまでにめちゃくちゃググりまくりました。
試行錯誤を繰り返しながら試しているので、時には後ろ向きに戻ったりして、ほんの1歩進むのにどれだけ時間がかかってるのかを考えると自分が嫌になります。
とはいえ、少しずつ知識もスキルも貯まるので、こうしてちょっとずつ成長するんだな〜とおもって勝手に納得しています。
PycharmでPythonを使うにしても、対話型シェルのターミナルはところどころ必要になるので、つまづきながらも今回PATHをきちんととおすことができて一安心です。
これからMacOS CatalinaでPythonを使おうと思っている方や、私のようなbashもzshも理解していないくらいのPython初心者の方の参考になれば幸いです。
それでは、Good Python!