MacOS CatalinaにPythonとPython向けライブラリをインストールする

# はじめに

Pythonを勉強するに当たって環境構築をしようとしたのだがこれが意外と難しかった。

MacにはデフォルトでPythonはインストールされているけれど、最新のPython3ではなく、古いPython2がインストールされているので、新しく勉強&開発するにはそのままではできません。

しかもインストール方法もいくつもあって、どの方法でインストールすればいいのかPython初心者には分かりにくかったです。
さらに右も左もわからない状態だとPythonのインストール方法とライブラリのインストール方法と混同してしまって「あれ？今何やってたんだっけ？」となる場面が何回もありました。

Python勉強仲間に聞いても同じ悩みを抱えていたので、なら備忘録も兼ねて方法をまとめてみようと思って書いてみみました。

今回はMacOS CatalinaでHomebrewとpyenvを利用してPython3の最新版とゲームライブラリpygameをインストールしました。

# 実行環境

- MacBookPro Mid 2014
- macOS Catalina ver.10.15.16

# 使用するパッケージ

- [Homebrew](https://brew.sh)
  - 言わずと知れたMacとLinux向けのパッケージ管理ツール。

- [pyenv](https://github.com/pyenv/pyenv)
  - Pythonのバージョン管理ツール。
    これを使わなくてもPythonのインストール自体はできるみたいですが、複数のバージョンをインストール&切り替えが容易なのでpyenvを利用してインストールする方が後々の使い勝手もよさそうなので今回はこれを使います。

- [pip](https://github.com/pypa/pip)
  - Python 用ライブラリの管理ツール。
    各ライブラリのインストール作業はこれを使用します。Pythonをインストールすると一緒にインストールされるので特に導入作業は必要ありません。

- [pygame](https://www.pygame.org)
  - Python向けのゲーム作成モジュール集。
    これを利用するとPythonだけで割と簡単にゲームを作れます。実際Python初学者でも2日でゲームを作れました。Pythonを学習するに当たってこれを使ったゲームを作ったので、今回はこれを使ってライブラリをインストールする手順をまとめます。

※ 各パッケージの詳しい説明は各公式ドキュメントを参照して下さい。
※ 初めてのPython環境構築だと特にpyenvとpipを混同しやすいと思うので(実際私も散々苦労しました)、特にこの2つは意識的に区別しておくほうがいいと思います。

# インストールの流れ

1. [Homebrewをインストール](#1homebrewをインストール)
2. [pyenvをインストール](#2pyenvをインストール)
3. [pyenvでPythonをインストール](#3pyenvでpythonをインストール)
4. [pipでライブラリをインストール](#4pipでライブラリをインストール)


## 1.Homebrewをインストール

公式ドキュメントに従ってターミナルで以下のコマンドを実行します。もちろんインストール済みなら飛ばしても問題ありません。

```
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
```

インストールが成功していれば`brew -v`でHomebrewのバージョンが確認できます。

```
$ brew -v
Homebrew 2.4.9
Homebrew/homebrew-core (git revision 3b87b; last commit 2020-08-04)
Homebrew/homebrew-cask (git revision 2ee9f; last commit 2020-08-04)
```

## 2.pyenvをインストール

`brew update`でHomebrewを最新の状態にアップデートして、`brew install`でpyenvをインストールします。

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

`pyenv -v`でpyenvのバージョンが確認できればOKです。

```
$ pyenv -v
pyenv 1.2.20
```

pyenv自体はこれで動作しますが、ターミナルにpyenvの設定を追加しないとpyenv経由でインストールしたPythonが認識されないので、下記のコマンドでターミナルに設定を追加、追加した設定をターミナルに認識させます。

```
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshrc
$ source .zshrc
```

ターミナルがbashの場合は以下のコマンドで。

```
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
$ source .bash_profile
```

もちろんvimで直接プロファイル等に書き込んでも問題ありません。

```
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi
```

## 3.pyenvでPythonをインストール

`pyenv install -l`コマンドで、pyenvでインストール可能なPythonのバージョンが確認できます。

```
$ pyenv install -l
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0
  2.4.1
  2.4.2
  ...
  3.8.4
  3.8.5
  3.9.0b5
  3.9-dev
  3.10-dev
  ...
```

特に理由がない限り最新安定版(数字の後ろに'dev'とついていないもの)をインストールしておくほうがいいでしょう。
ちなみに[anaconda](https://www.anaconda.com/)等のプラットフォームもpyenvでインストールできます。
今回は3.8.5を`pyenv install`コマンドでインストールします。

```
$ pyenv install 3.8.5
```

この段階ではインストールが完了しただけで、使用するPythonのバージョンはまだ切り替わっていません。
```python -V```コマンドでバージョンを確認しても、MacにデフォルトでインストールされているPython2が認識されます。

```
$ python -V
Python 2.7.16
```

`pyenv global`コマンドでインストールしたPythonがデフォルトで動くように切り替えます。

```
$ pyenv global 3.8.5
```

`python -V`でバージョンが切り替わったのが確認できればインストール成功です。
上手く認識しないときは```$ source .zshrc```でpyenvの設定をターミナルに再読み込みさせてみて下さい。
(※bashの場合は`$ source .bash_profile`で。)

```
$ python -V
Python 3.8.5
```

ちなみに```pyenv versions```でインストールされているPythonのバージョンを一覧で確認できます。
先頭に*がついたものがデフォルトのバージョンとして動作します。

```
$ pyenv versions
  system
* 3.8.5 (set by /Users/linus/.pyenv/version)
```


## 4.pipでライブラリをインストール

`pip install`コマンドでライブラリをインストールします。今回はpygameをインストールします。

```
$ pip install pygame
```

今回は最新安定版ではなく開発中の最新版が必要なので、バージョンを指定してインストールします。
ライブラリ名の後ろにバージョンを付け加えるとバージョン指定でインストールできます。

```
$ pip install pygame==2.0.0.dev10
```

`pip list`コマンドでpipを使用してインストールしたライブラリを一覧で確認できます。

```
$ pip list
Package    Version
---------- -----------
pip        20.1.1
pygame     2.0.0.dev10
setuptools 47.1.0
```

指定したバージョンでインストールできてますね。
[Django](https://www.djangoproject.com/)などの他のライブラリも同じ方法でインストールできます。

# おまけ

今回インストールしたパッケージ等をアンインストールときは以下のコマンドで実行できます。
アンインストールするときはインストールしたときとは逆順で削除しないとファイルが残ることがあるので注意して下さい。

```
$ pip uninstall pygame
$ pyenv uninstall 3.8.5
$ brew uninstall pyenv
```

# あとがき

初めて環境構築に取り組んでいたときも散々苦労しましたが、改めてまとめ直してみても結構大変でした。
Pythonはプログラミング初心者にもとっつきやすい言語だとよく聞きますが、環境構築はどうも初心者向けとは言い難いところがありますね。

※　2020/08/06追記
pyenvを使用しないでHomebrewのみでPython3をインストールする方法もあったので試してみました。
[MacOS CatalinaでPython3をインストールする(Homebrewのみで)](https://qiita.com/linus_sh/items/c5958714252c328d6771)
ただ本格的な開発にはpyenvを使用する方がどうもよさそうなので、あくまで参考程度にしてください。