MacのHomebrewとAnacondaが競合干渉するwarningの回避方法

不具合対処への奮闘
スポンサーリンク

ネットではよく触れられていることですが、MacにインストールしたHomebrewとAnacondaが競合して干渉する部分があり、思ったように動作してくれないことがあります。

私の環境では、これまで通りに使っているには問題なく動いたりするのですが、新しいパッケージをbrewやcondaコマンドで利用する時に不具合が生じました。

この競合の干渉を回避する方法をまとめておきます。

スポンサーリンク

問題発生時の環境と試行錯誤

問題発生時の私の環境の状況と試行錯誤したことついてまず書いておきます。ですので、warningに気づいている人は、ここを飛ばして次の項目へ進んでください。

私の環境は、anacondaを利用しているところに、homebrewをインストールして、いくつかこれまでの作業をしたあとに、いろいろとパッケージをbrew、pip、condaを利用してインストールなどをしていた状態ということになります。

ターミナルで次のコマンドを実行すると、確かにwarningは出ていました。

% brew doctor

ただ、これまでの作業では動作していたので、しばらく警告項目は無視していました。

ですが、仮想環境を使った作業や新たなパッケージをインストールする際に、condaコマンドを使いましたが思ったように動作しなくなりました。ここではじめてHomebrewとAnacondaの相性の悪さを実感することになります。

Anacondaの動作がおかしかったのでAnacondaを再インストールしてみようと思ってAnacondaをアンインストールしました。

ここでも一つ影響がありました。anaconda-cleanがインストールできません。condaの環境に依存している関係を切るために次のコマンドでcondaを強制アップデートしました。

% conda update --force conda

これで、アンインストールの手順を進めることができました。

アンインストールが終わったら、anacondaの公式サイトからインストーラーをダウンロードしてインストールを始めたのですが、何度やってもインストールできません。

これは、Homebrewがインストールしてあるために上手く行かなかったようです。

そこでHomebrewをひとまずアンインストールしてから、Anaconda をインストールすると今度は上手く行きました。そして再度、Homebrewをインストールします。

おそらく、この状態での問題発生が多くの人が直面するものでしょう。ここからが対処方法になります。

スポンサーリンク

HomebrewとAnacondaの干渉warningを回避する方法

この時点の状況から干渉の回避の方法となります。anacondaをインストールした後に、homebrewをインストールした状況です。

ここで、ターミナルから次のコマンドを入力して問題のチェックを行います。

% brew doctor

このコマンドを実行すると、私の環境では次のようなwarningの表示が出ました。

Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don’t worry or file an issue; just ignore this. Thanks!

Warning: “config” scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and which additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew-provided
script of the same name. We found the following “config” scripts:
/Users/ホーム名/opt/anaconda3/bin/icu-config
/Users/ホーム名/opt/anaconda3/bin/krb5-config
/Users/ホーム名/opt/anaconda3/bin/freetype-config
/Users/ホーム名/opt/anaconda3/bin/xslt-config
/Users/ホーム名/opt/anaconda3/bin/libpng16-config
/Users/ホーム名/opt/anaconda3/bin/python3.7-config
/Users/ホーム名/opt/anaconda3/bin/libpng-config
/Users/ホーム名/opt/anaconda3/bin/xml2-config
/Users/ホーム名/opt/anaconda3/bin/python3.7m-config
/Users/ホーム名/opt/anaconda3/bin/python3-config
/Users/ホーム名/opt/anaconda3/bin/curl-config
/Users/ホーム名/opt/anaconda3/bin/ncursesw6-config
/Users/ホーム名/opt/anaconda3/bin/pcre-config

要するに、config系のスクリプトでanacondaとhomebrewに混乱が生じるということのようです。anacondaとhomebrewの相性が悪いと言われているのは、まさにこういうことでしょう。このwarningが出ないような処置をしなければいけません。

私は次の方法を行いました。

ターミナルから.zshrcファイルを開きます。

% open ~/.zshrc

開いたファイルに、次の1行を記述します。

alias brew="env PATH=${PATH/${HOME}\/opt\/anaconda3\/bin:/} brew"

これを保存して、ターミナルシェルを再起動します。

ここでやってる事は、brewコマンドのaliasにenvを設定する事で、Warningの原因であるAnaconda内の *-configファイルへのPATHを一時的に削除した後にbrewコマンドを実行するという方法です。正規表現を使ってマッチさせる知識などが必要な記述になりますが、その辺りには細かく触れません。ただ、バックスラッシュ( \ )を使ってエスケープしているのはわかると思います。この処理は、以下の記事を参考にしました。

対処の作業はここまでです。再度、ターミナルからコマンドで問題があるかチェックしてみましょう。

% brew doctor

すると、以下のように表示されます。

Your system is ready to brew.

warningが消えて、問題を回避することができました。これで問題なくHomebrewを利用することができます。

先の試行錯誤はかなり大回りの無駄な作業でしたね。anacondaのインストールは時間がかかりますから。

スポンサーリンク

まとめ

HomebrewとAnaconda の共存は相性が悪いと言われています。config系のファイルが干渉するので動作に不具合が生じるようです。

brew doctorコマンドで問題があればwarningを確認することができます。

ここでは、aliasとenvを使ってbrewコマンドがanacondaのPATHを一時的に参照しないような処理を行うことで解決しました。

最近、macOSのアップデートなどで、これまでと環境が少しづつ変わっている(bashからzshなど)こともあって、いろいろと確認する必要のあることが増えているので、慎重に行きたいですね。

タイトルとURLをコピーしました