Catalinaクリーン・インストール & PyEnv を使った Python開発環境

# Catalinaクリーン・インストール & PyEnv を使った Python開発環境
![macOS-Catalina-desktop_s.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261790/2b3d228f-f50d-0fde-7af8-c6b35e34164b.png)
新しい macOS のインストールは、

- 上書き(update)インストール
- クリーン(clean)インストール

のどちらかを選択できる。  
私は、アプリケーションやツールの管理を、パッケージ管理システムに移行したいので、クリーン・インストールを選択した。

クリーン・インストールには、
容量が 16GB以上の USBメモリもしくはSDカードなどの外部メモリー等が必要である。

## 事前準備
事前に準備するのは、  

- バックアップ
  - Timemachine の利用で良い
- 空き容量が 8GB より大きな(実質16GB以上) USBメモリ か SDカード
- Catalina のダウンロード

### Catalina のダウンロード
App Store から 'macOS Cattalina' を入手し、ダウンロードが完了したら **終了** する。

## 起動ディスクの作成
ターミナルを起動し、起動ディスクを作成する。  
以下のコマンドを実行する。

```shell
＄ sudo /Application/Install macOS Catalina.app/Contents/Resource/creationinstallmedia --volume /Volumes/MyVolume
```

`MyVolume` は、適宜、自身の環境に合わせて変更すること。

参考サイト
[How to create a bootable installer for macOS Catalina][bc]

## 再起動＆インストール
起動ディスクの作成が完了したら、外部メモリーを指したまま、再起動を行う。  
再起動の際は、`command` + `R` キーを押しながら、インストーラの起動を待つ。  
起動が開始したらキーは離して良い。  

### インストール先のフォーマット
少し待つと 'OS X Utilities' 画面が表示される。  
最下部の `Disk Utility` を選択起動し、インストール先のディスクのフォーマットを行う。  
`APFS(Case-sensitive)` を選択した。

### インストール
フォーマットが完了したら、 `Disk Utility` を終了し、 'OS X Utilities' 画面 に戻る。  
メニューの上から二番目の 'Reinstall a new copy of macOS' を選択する。  
'Continue' をクリックし、利用許諾に同意し、インストール先を選択する。  
最後に 'Install' をクリックして、インストールを開始する。  

しばらく待つと、インストールが完了し、ログイン画面が表示される。

参考サイト
[How to do a clean install of macOS Catalina][ic]

# アプリケーションのインストール(App Store)
購入済み、または導入してしていた アプリケーションを取捨選択し、インストールを行う。  

1. `App Store` を起動する
2. `Store` -> `View My Account` で、購入＆導入済みアプリを確認する
3. 取捨選択して、インストールを行う

私が、Catalina にもインストールしたアプリは、次表の通り。

| No. | アプリ名称 | カテゴリ | 価格 | 備考 |
|:--:|:-- |:-- | --:|:-- |
| 1 | Pages | Productivity | Free | Apple純正のワードプロセッサ |
| 2 | Numbers | Productivity | Free | Apple純正の表集計ソフト |
| 3 | Keynote | Productivity | Free | Apple純正のプレゼンテーションソフト |
| 4 | Xcode | Development | Free | Apple純正の開発IDE |
| 5 | The Unarchiver | Utilities | Free | アーカイブファイル名の文字コード対応有り |
| 6 | Slack | Business | Free | チームのコミュニケーションと共同作業 |
| 7 | LINE | Social Networking | Free |  |
| ... | ... | ... | ... | ... |

# アプリケーションのインストール(Homebrew)
従来、または日本の *MS-Windows* 利用者の多くは、未だに次の手順でインストールを行っている。

1. 開発元のダウンロードサイトを探す
2. 個々のアプリケーションやツールをダウンロードする
3. 依存のあるライブラリなどもダウンロードする
4. インストールする

この方法に、メリットは一つも無い。  

私も 'macOS High Sierra' まで、一部のツールはは、個別にダウンロード＆インストールを行っていた。  
'macOS Mojave' から `App Store` と `Homebrew` のみで環境を整えている。  

この方法のメリットは、パッケージ管理のコマンド一つで、全てのアップデートが完了することである。  

## Homebrewのインストール
`App Store` に登録されていない数多くのソフトウェアは、パッケージ管理システムを利用してインストールする。macOS では、パッケージ管理システムは、次の二つがある。

- [Homebrew][brew](recomended)
- [MacPorts][ports]

私は、[Homebrew][brew]派なので、ターミナルを起動し、次のコマンドを実行する。

```shell
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

### アプリケーションのインストール
インストールしたアプリケーションの一覧(アルファベット順)を、次表に示す。

| No. | アプリ名称 | 開発元 | インストール・コマンド |
|:--:|:-- |:-- |:-- |
| 1 | Atom | https://atom.io | `brew cask install atom` |
| 2 | CaliBre | https://calibre-ebook.com | `brew cask install caribre` |
| 3 | GIMP | https://www.gimp.org | `brew cask install gimp` |
| 4 | gitkraken | https://www.gitkraken.com | `brew cask install gitkraken` |
| 5 | google-backup-and-sync | https://www.google.com/| `brew cask install google-backup-and-sync` |
| 6 | google-chrome | https://www.google.com/ | `brew cask install google-chrome` |
| 7 | libreoffice | https://www.libreoffice.org | `brew cask install libreoffice` |
| 8 | libreoffice-language-pack | https://www.libreoffice.org | `brew cask install libreoffice-language-pack` |
| 9 | skype | https://www.skype.com/ | `brew cask install skype` |
| 10 | xquartz | https://www.xquartz.org | `brew cask install xquartz` |

`libreoffice-language-pack` この言語パックは、 `LibreOffice` を一度起動した後で、インストールする必要がある。  

### Pythonのインストール
macOS Catalina(Version 10.15) に組込まれた Python は、

```shell
$ python3 --version
Python 3.7.3
```

となったので、このままでも良いが、 [PyEnv][pyenv] を利用し複数のバージョンを利用できる環境を整える。

#### PyEnvのインストール
[PyEnv][pyenv] のインストールは、 `git clone` するのが基本だが macOS では Homebrew を利用する。

```shell
$ brew update
$ brew install pyenv
```

インストール後の設定は、 [Homebrew on macOS][pebrew] を参考に行う。

`PyEnv` を利用したインストールでは、 `python-build` (ソースからコンパイル)が実行される。

#### gcc開発環境の準備
gcc開発環境に必要なモジュールは全て `Homebrew` でインストールする。
インストールしたパッケージは、次の四つのライブラリである。

```shell
$ brew install readline
$ brew install xz
$ brew install zlib
$ brew install openssl
```

インストールしたパッケージのリスト(関連してインストールされたパッケージを含む)

```shell
$ brew list
autoconf	isl		mpfr		openssl@1.1	pyenv		xz
gmp		libmpc		openssl		pkg-config	readline	zlib
```

#### インストールに失敗
通常の `pyenv install 3.7.4` を行なうとエラーを吐いて失敗する。

```shell
$ pyenv install 3.7.4
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.4.tar.xz...
-> https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
Installing Python-3.7.4...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk

BUILD FAILED (OS X 10.15 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/27/pytgk7q93qlb7k03r7_3p_mc0000gn/T/python-build.20191022181911.1512
Results logged to /var/folders/27/pytgk7q93qlb7k03r7_3p_mc0000gn/T/python-build.20191022181911.1512.log

Last 10 log lines:
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... checking for --without-gcc... no
checking for --with-icc... no
checking for gcc... clang
checking whether the C compiler works... no
configure: error: in `/var/folders/27/pytgk7q93qlb7k03r7_3p_mc0000gn/T/python-build.20191022181911.1512/Python-3.7.4':
configure: error: C compiler cannot create executables
See `config.log' for more details
make: *** No targets specified and no makefile found.  Stop.
```

#### CPPFLAGSを設定したインストール
`zlib` をインストールしているのに `python-build: use zlib from xcode sdk` と出てきているので

[Common build problems][pecbp] を読んで

[Build failed: "ERROR: The Python zlib extension was not compiled. Missing the zlib?"][pezlib]

にしたがって `CPPFLAGS` を設定し `pyenv install` を行い、成功した。

```shell
$ CPPFLAGS="-I$(brew --prefix zlib)/include" pyenv install -v 3.7.4
...
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-19.0.3 setuptools-40.8.0
/var/folders/27/pytgk7q93qlb7k03r7_3p_mc0000gn/T/python-build.20191022202526.9074 ~
~
Installed Python-3.7.4 to /Users/mitsu/.pyenv/versions/3.7.4
```

これにて、 `PyEnv` の環境が整った。

----
[bc]: https://www.imore.com/how-create-bootable-installer-mac-operating-system
[ic]: https://www.imore.com/how-do-clean-install-macos
[brew]: https://brew.sh
[ports]: https://www.macports.org
[pyenv]: https://github.com/pyenv/pyenv
[pebrew]: https://github.com/pyenv/pyenv#homebrew-on-macos
[pecbp]: https://github.com/pyenv/pyenv/wiki/Common-build-problems
[pezlib]: https://github.com/pyenv/pyenv/wiki/Common-build-problems#build-failed-error-the-python-zlib-extension-was-not-compiled-missing-the-zlib