pipでpyaudioが入らない時の対処法

# Overview
pyaudioを入れようとしたらエラーが出た．

### やったこと
1. Xcodeセットアップツールの更新
2. pipセットアップツールの更新
3. `portaudio`のインストール(brew)

# 環境
- macOS Mojave 10.14.6
- Python 3.7.3
- pip 19.2.1

# 実際に出たエラー
```
pip3 install pyaudio
```
pipだとcondaにぶちこまれる設定のため`pip3`を利用しています．

```
Command "/usr/local/opt/python/bin/python3.7 -u -c "import setuptools, tokenize;__file__='/private/var/folders/4k/bzsywl69619c1t7dws5_h43w0000gn/T/pip-install-9gsm8qwi/pyaudio/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /private/var/folders/4k/bzsywl69619c1t7dws5_h43w0000gn/T/pip-record-6t7resky/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/4k/bzsywl69619c1t7dws5_h43w0000gn/T/pip-install-9gsm8qwi/pyaudio/
```
こんな感じのエラーが出ました．

# 推定される原因
- 最近Xcodeのアプデがあった
- Pythonでの音声処理をまったくやってないため，なんか設定が必要

# 解決策
解決策というより実際にやったことです
## 1. Xcodeの再設定
<a href="https://qiita.com/ume1126/items/89d579fb5911522d7191">こちら</a>の記事を参考にXcodeのセットアップをしてみました．
### 1-1. Xcode立ち上げてセットアップ
Xcodeを立ち上げてセットアップツールをインストール
 → <strong>ダメ</strong>
### 1-2. `xcode-select --install`を実施

```
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
```
と言われ<strong>ダメ</strong>

### 1-3. Apple  Developerから手動でインストール
<a href="https://developer.apple.com/download/more/">ここ</a>から`Command Line Tools(macOS 10.14) for Xcode 10.3`をダウンロードし，実行．
→<strong>ダメ</strong>(変わらなかった)

2と3に関しては1で再設定したため変わらなかった可能性があります．

## 2. pipサイドの問題解決
直接的に関係があるかはわからないですが，<a href="https://ja.stackoverflow.com/questions/46978/pip-%E3%81%A7%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%A8%E3%83%A9%E3%83%BC-command-python-setup-py-egg-info-failed">こちら</a>を参考に`pip`の`setuptools`の更新をしました．
具体的には

```
pip3 install --upgrade pip setuptools
```
をしました．(pipだとanaconda行きのため一応pip3で)
結果`setuptools`が`40.8.0`から`41.0.1`に更新されました．

この状態でpyaudioインストールを試みました．
その結果...

```
ERROR: Command errored out with exit status 1:
     command: /usr/local/opt/python/bin/python3.7 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/4k/bzsywl69619c1t7dws5_h43w0000gn/T/pip-install-0e82wcyk/pyaudio/setup.py'"'"'; __file__='"'"'/private/var/folders/4k/bzsywl69619c1t7dws5_h43w0000gn/T/pip-install-0e82wcyk/pyaudio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/4k/bzsywl69619c1t7dws5_h43w0000gn/T/pip-record-2_i9454h/install-record.txt --single-version-externally-managed --compile
         cwd: /private/var/folders/4k/bzsywl69619c1t7dws5_h43w0000gn/T/pip-install-0e82wcyk/pyaudio/
    Complete output (16 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.macosx-10.14-x86_64-3.7
    copying src/pyaudio.py -> build/lib.macosx-10.14-x86_64-3.7
    running build_ext
    building '_portaudio' extension
    creating build/temp.macosx-10.14-x86_64-3.7
    creating build/temp.macosx-10.14-x86_64-3.7/src
    clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -DMACOSX=1 -I/usr/local/include -I/usr/local/opt/openssl/include -I/usr/local/opt/sqlite/include -I/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/include/python3.7m -c src/_portaudiomodule.c -o build/temp.macosx-10.14-x86_64-3.7/src/_portaudiomodule.o
    src/_portaudiomodule.c:29:10: fatal error: 'portaudio.h' file not found
    #include "portaudio.h"
             ^~~~~~~~~~~~~
    1 error generated.
    error: command 'clang' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/opt/python/bin/python3.7 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/4k/bzsywl69619c1t7dws5_h43w0000gn/T/pip-install-0e82wcyk/pyaudio/setup.py'"'"'; __file__='"'"'/private/var/folders/4k/bzsywl69619c1t7dws5_h43w0000gn/T/pip-install-0e82wcyk/pyaudio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/4k/bzsywl69619c1t7dws5_h43w0000gn/T/pip-record-2_i9454h/install-record.txt --single-version-externally-managed --compile Check the logs for full command output.
```
エラーの種類が変わりました．
しかし，未だ入れられず．
Xcodeが原因ではない気がしたので，pipに絞って調べました．
## 3. Homebrew側の問題
調べていると<a href="https://qiita.com/DoChi_72/items/8072519c32275ea04f7d">この記事</a>を見つけました．ここで`portaudio`を入れないといけないみたいなので入れてやってみました．

```
brew install portaudio
```
少し時間はかかりましたが，ここは問題なくできました．
改めて

```
pip3 install pyaudio
```
すると，うまく入りました！(`pyaudio`のバージョンは`0.2.11`)

# 結論
色々やったので断定はできないですが，原因としてはXcode側と`pyaudio`側に分けられるのではないかと考えます．

Xcode更新 → セットアップツールインストール(1回起動すればOK)．
`pyaudio`入れる → `portaudio`を入れておく．

といった感じです．Winに比べてmacはpythonの設定が楽と言いますが，それでもわからないことだらけです．