macOS CatalinaにAnacondaを入れてもVSCodeで動かない


問題

VSCodeでAnacondaのpythonでなく、macOS標準のpythonが動いてしまいました。

解決手段

.zshenvに"export PATH="を追加することで、VSCodeでもAnacondaのpythonを動かせるようになりました。

% vi ~/.zshenv
>> export PATH=

原因究明

参照先を確認

まずは参照先が違うんだろうなーと思ったところ、

% which python
terminal -> /Users/yuya/opt/anaconda3/bin/python
VSCode   -> /usr/bin/python

案の定、それぞれ異なるPATHのpythonを参照していました。なんで?

PATHを確認

PATHが貼られていないのかと思ったので、見てみると、

terminal
% echo $PATH
/Users/user/opt/anaconda3/bin:/Users/user/opt/anaconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
VScode
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/user/opt/anaconda3/bin:/Users/user/opt/anaconda3/condabin

PATHは貼られているが、優先順位が違う。なんで?

なぜ優先順位が変わったか

いろいろググってみると、この記事でVSCodeの統合ターミナルで再度設定を読み直していることがわかりました。
さらに、この記事の参考記事で優先順位が変わることを言及していました。

どうも/etc/zprofileで動作するpath_helperの影響のようです。
path_helperはデフォルトPATH(/etc/pathsと/etc/paths.d/*で規定)を重複なく、PATHを再設定しているようです。その際、PATHのデフォルトPATHと重複した箇所は削除し、PATHの頭にデフォルトPATHを追記するため、PATHの順番が変わったのだと思われます。

メカニズム(というほどでもないけど)

まずzshの設定が一通り読み込まれる。ここでは想定したPATHとなっています。
PATH=/Users/user/opt/anaconda3/bin:/Users/user/opt/anaconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

次にVSCodeの統合ターミナルでもう一度、zshの設定が読み込まれるが、path_helperの動作により、デフォルトPATHが頭に移動しています。
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/user/opt/anaconda3/bin:/Users/user/opt/anaconda3/condabin

zshのログイン時の設定

ここでログイン時にどのような設定ファイルが、どのような順番で読み込まれているのかが気になってきます。この情報はこの記事でわかりました。
/etc/zprofileより前の設定ファイル(.zshenv)でPATHを初期化してやれば

% vi ~/.zshenv
export PATH=

何度読み直しても同じPATHになるはずです。

同じPATHになりませんでした

anaconda3/condabinが設定されなくなってしまいました...
多分、condaコマンドになにかしら値が設定されると、anaconda3/condabinのPATHは読まれないような設定になっているのでしょう、多分。
でも、やりたいことはできてるので、とりあえずよしとします。