Help us understand the problem. What is going on with this article?

brew doctor したら Warning: "config" scripts exist outside your system or Homebrew directories.と出た時の解決法初心者的理解

More than 1 year has passed since last update.

1.はじめに

こんにちは。yutomanです。情シスの仕事を自動化したいという下心からpythonの勉強を始めた初学者です。
過去何度も勉強しようとpythonを入れては飽き、忘れた頃にまた入れては飽き、といった愚行を繰り返し
PCの中身がどうなっているかも訳わからず突如「さあやっていくぞ!」と意気揚々でpythonを使おうとしたら案の定エラーが出て心をくじかれた、そんなカンジの初学者です。

今回は先人の皆様があちこちで発信してくださっていたおかげで、解決することができました。
僕のようなド初学者が、どこかで同じように挫けてしまい学ぶことを諦めていたらもったいないなと思い、初心者なりにですが解説をメモしておきます。

2.前提となる環境

使用しているPCはMacbook、Mojaveの10.14.5です。

pythonを入れるにあたりpyenv(パイエンブ)というツールでPythonをインストールするのがオススメと聞いたのですが
その前にHomebrew(ホームブリュー)というツールを落としておく必要があると知りました。

そこで、
①Homebrewをインストールする。
②Homebrewを使ってpyenvをインストールする。
③pyenvでPython3.7.3をインストールする。(2019年7月2日現在最新)
ということまでとりあえずやっておきました。このあたりは割愛します。(参考文献①

3.brew doctorしたらWarningが出て涙目

pythonのインストール後、諸々うまくいっているか確認するため
Homebrewのコマンド"brew doctor"で問題を検出してみることに。
そしたら以下のようなエラーが出現。

Yuto-Mac:~ yutoman$ brew doctor
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/yutoman/.pyenv/shims/python3.7-config
  /Users/yutoman/.pyenv/shims/python3.7m-config
  /Users/yutoman/.pyenv/shims/python-config
  /Users/yutoman/.pyenv/shims/python3-config

ううむ…よくわかんない…(涙)

4.エラー内容を理解する

ええい、困った時は検索だ!ということでとりあえずエラーの文言をおとなしくGoogleの検索カーソルへコピペ。
すると同じ現象をサクッと対処された方々のメモが見つかりました。(参考文献②

しかしながら大変シンプルに書かれているため僕のような初学者は理解できません。
しかたがないのできちんとエラー文言を理解して、何について文句を言われているのか把握することにしました。

エラー文言をGoogle翻訳にかけてざっくり意訳すると

警告します! "config"と書かれたファイルがHomebrewディレクトリの外にあります。
Homebrewは「〜config」と書かれた設定ファイルを参照して動作しますが、
Homebrewディレクトリやパスの外に「〜config」と書かれたファイルがあるとソフトウェアが混乱するかもしれません。
ちなみに、Homebrewディレクトリ以外で「〜config」と書かれているファイルは以下の通りです。

ということでした。

なにやらHomebrewディレクトリやパスの外にある「config」と書かれたファイルが良くない働きをしているようです。
でも、だからと言ってどうしたら良いかわかりません。(困)

5.用語を理解する

日本語を読んでるのに内容の意味がわからないのは、単語がわからないからですね。
地道に出てきた単語を理解しようとひたすらググりました。

◼Homebrew
 pythonに限らず諸々のソフトウェアの導入を単純化するパッケージ管理ツール。コマンドで色々な操作ができる。

◼pyenv
 複数のバージョンのpythonを管理するツール。

◼config
 設定ファイルのこと。

◼パス
 ディレクトリやファイルまでの道のり、階層。例えばデスクトップに「text.py」というファイルがある場合、
 「/Users/yutoman/Desktop/text.py」というようにパスで示すことができる。
 ファイル「text.py」にアクセスしたい時は、このパスを指定することでアクセスできる。

 当然、コマンドもファイルの一つ(実行ファイル)なので、パスで場所を示すことができる。
 例えば、ファイルやディレクトリの一覧を表示する「ls」コマンドは
 「/bin/ls」と示すことができる。

 本来的にはコマンドを実行する際に「/bin/ls」とパスで指定するが面倒な為、
 環境変数PATHの中に省略する設定が書かれている。

◼環境変数
 ユーザー独自の設定を保存しており、利用者や実行されるプログラムが参照する変数。

◼PATH
 環境変数のひとつ。ここに記載されているディレクトリにあるファイルはパス名を省略できる。
 例えば「/bin」はPATHに記載されているため、「/bin/ls」は「ls」と入力して使うことができる。

◼.bash_profile
 環境変数を記載しておくファイル。ターミナル起動時に毎回読み込む。

6.状況を理解する

用語を理解したら状況を理解します。

「brew doctor」というコマンドもHomebrewの中の一つの実行ファイルです。
パスを記載せずにコマンドを打てるということは、環境変数PATHの中に途中のディレクトリが記載されているということです。

Homebrew自体は
「/usr/local」にあるのですが、コマンドは「/usr/local/bin/」配下にあります。
(正確にはシンボリックリンクとして作成されているらしいです。Windowsのショートカットみたいなイメージですね。)

では、環境変数PATHの中身を覗いてみると

Yuto-Mac:~ yutoman$ echo $PATH #環境変数PATHの中身を見るコマンド
/Users/yutoman/.pyenv/shims:/Users/yutoman/.pyenv/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

むむむ…見にくい…
環境変数PATHは「:」で区切られているので、見やすくするために改行しますね。

/Users/yutoman/.pyenv/shims
/Users/yutoman/.pyenv/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

ありました!「/usr/local/bin」
だからbrewコマンドを打つ際にパスをあえて書かなくても問題ないのですね。

あっ…

気づきましたか?
エラーで出てきた「〜config」と書かれたファイル類のパス、

/Users/yutoman/.pyenv/shims

も一緒に記載されてしまっています!
(実際のエラーでは、/Users/yutoman/.pyenv/shims/python3.7-config 等でしたね。)

コマンドを実行する際は「何のパスが省略できるのかなぁ」と、環境変数PATHを見に行ってますので
brewコマンドを打つ際もしっかり上記の「/Users/yutoman/.pyenv/shims」を見に行っているのです。

見に行ったら紛らわしいことに「〜config」なんていうファイルが何個も見つかるのですから
Homebrewからしたら「あれ?俺の知らんconfigファイルがあるんだけど?!」と混乱してしまうのです。

7.解決方法がわかる

「/Users/yutoman/.pyenv/shims」のパスを見に行った結果
紛らわしい「〜config」ファイルが見つかってしまっているのでやることは1つ。

このパスを見に行かなければ良いのです。

具体的には「brewコマンドを実行する時だけは必ずこのパスだけ通れ。余計なパスは見に行くな」という設定を環境変数PATHに刻み込みます。

つまり以下の一文を環境変数を記載しておくファイル「.bash_profile」に書き込むのです。

alias brew='PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin brew' 

aliasコマンドはお手製コマンドを作成できるコマンドです。
「alias 名前=実行内容」で、その名前のコマンドを用意することができます。
ここでの意味は「brewというコマンドは、参照する環境変数PATHを/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbinとして従来のbrewコマンドを実行する」ということです。これで、不要なパスを通る必要はありません。
(先述の「/usr/local/bin/」だけでいいのでは?と思うかもしれませんが、他にも必要なパスがある、程度に把握いただければ良いかと思います。)

さて、いざ「.bash_profile」を開きます。

Yuto-Mac:~ yutoman$ cd ~ #.bash_profileはホームディレクトリにあるので移動します。
Yuto-Mac:~ yutoman$ vim .bash_profile #vimで.bash_profileを開きます。

開いた.bash_profileに先程の一文をペーストします。
vimの操作方法は独特ですので、気をつけましょう。ここでは説明は割愛。(参考文献④

最後にターミナルを一旦終了し、再起動します。
これでもう一度「.bash_profile」を読み込ませます。

その状態で、「brew doctor」と打ち込むと…

Yuto-Mac:~ yutoman$ brew doctor
Your system is ready to brew.

無事、解決しました。。

8.感想

当エラーに至った原因ですが、過去何度も様々な方法でpythonをインストールした為に
PC内の環境が荒れているからだと思います。。何かのタイミングにデトックスしたいところです。。

今回の記事は自分自身の理解と、同じ飽きっぽい初学者向けのお助けメモとして書いてみました。
まだまだ勉強し始めて1ヶ月程度ですので、きちんと理解することを自身のテーマに今後も頑張ろうと思います。

何卒暖かい目でお見守りくださいませ。:hatching_chick:

9.参考文献

Pythonの開発環境を用意しよう!(Mac)
pyenv をインストールしてると brew doctor で出る Warning を消す方法
pyenvインストール後に brew doctor を実行するとWarningが出るのでその対処
【備忘録】Vimの操作
【Homebrew】brew doctorのWarning対処方法 (その3) + envコマンドについて
今さらだけどHomebrewのコマンドをちゃんと理解して使おう
.bash_profileと.bashrcのまとめ
PATHを理解して、コマンドの在りかを探してみよう
【alias】Linuxでコマンドの別名を設定する

yutoman027
お仕事は情シス。給料は本とビールで消失。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした