ANACONDAやめました　MacにPython開発環境構築　pyenvとpyenv-virtualenvのインストール

# ANACONDAやめました　MacにPython開発環境構築　pyenvとpyenv-virtualenvのインストール

## 目的
Python開発環境の作業メモとして記載。
ANACONDAのライセンスが変わり、当面は問題無いのですが、ANACONDAを使わないPythonのローカル開発環境へ移行してみました。
Pythonの開発環境としては、pyenvとpyenv-virtualenvを利用、pythonのバージョンが切替可能とする方法を選択しました。
pyenvとpyenv-virtualenvのインストールは、楽なのでhomebrewを使います。

## Mac環境
OS : Mac OS Big Sur(11.1)
Xcode ： App Storeではインストールしていない

## インストール
### homebrewのアップデート

```
taguchi@MasamacAir ~ % brew update
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
acl2                       grpcui                     ocaml-zarith
act                        gtkmm4                     oci-cli
aerc                       guile@2                    odin
aida-header                gulp-cli                   oha
airshare                   h2spec                     omake

省略

iphoney                                  yandexradio
java                                     yourkit-java-profiler
jeromelebel-mongohub                     zoom-in
jing                                     zoomus-outlook-plugin
kekadefaultapp
```

### pyenvのインストール

```
taguchi@MasamacAir ~ % brew install pyenv
Error: 
  homebrew-core is a shallow clone.
  homebrew-cask is a shallow clone.

省略

==> readline
readline is keg-only, which means it was not symlinked into /usr/local,
because macOS provides BSD libedit.

For compilers to find readline you may need to set:
  export LDFLAGS="-L/usr/local/opt/readline/lib"
  export CPPFLAGS="-I/usr/local/opt/readline/include"

For pkg-config to find readline you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/readline/lib/pkgconfig"
```

### pyenv-virtualenvのインストール

```
taguchi@MasamacAir ~ % brew install pyenv-virtualenv

Error: Your CLT does not support macOS 11.
It is either outdated or was modified.
Please update your CLT or delete it if no updates are available.
Update them from Software Update in System Preferences or run:
  softwareupdate --all --install --force

If that doesn't show you an update run:
  sudo rm -rf /Library/Developer/CommandLineTools
  sudo xcode-select --install

Alternatively, manually download them from:
  https://developer.apple.com/download/more/.

Error: An exception occurred within a child process:
  SystemExit: exit
```

pyenv-virtualenvをインストールしようとしたが、エラーになった、対応

```
taguchi@MasamacAir ~ % softwareupdate --all --install --force

  sudo rm -rf /Library/Developer/CommandLineTools
  sudo xcode-select --install

taguchi@MasamacAir ~ % sudo rm -rf /Library/Developer/CommandLineTools
Password:
taguchi@MasamacAir ~ % sudo xcode-select --install

省略

```

リトライ　pyenv-virtualenvをインストール

```
taguchi@MasamacAir ~ % brew install pyenv-virtualenv
Error: 
  homebrew-core is a shallow clone.
  homebrew-cask is a shallow clone.
To `brew update`, first run:

省略

==> ./install.sh
==> Caveats
To enable auto-activation add to your profile:
  if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
==> Summary
🍺  /usr/local/Cellar/pyenv-virtualenv/1.1.5: 22 files, 65.6KB, built in 5 seconds
```

pyenvの設定

```
taguchi@MasamacAir ~ % echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.zprofile
taguchi@MasamacAir ~ % echo 'export PATH="${PYENV_ROOT}/bin:$PATH"' >> ~/.zprofile
taguchi@MasamacAir ~ % echo 'eval "$(pyenv init -)"' >> ~/.zprofile 
taguchi@MasamacAir ~ % echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zprofile 
```

## pyenv環境設定
使えるバージョンを確認

```
taguchi@MasamacAir ~ % pyenv install --list      
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0

省略
```

### Python 3.9.1 と 2.7.18 をインストール
Python 3.9.1

```
taguchi@MasamacAir ~ % pyenv install 3.9.1  
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.9.1.tar.xz...
-> https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz
Installing Python-3.9.1...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.9.1 to /Users/taguchi/.pyenv/versions/3.9.1
```

Python 2.7.18

```
taguchi@MasamacAir ~ % pyenv install 2.7.18 
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-2.7.18.tar.xz...
-> https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz
Installing Python-2.7.18...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-2.7.18 to /Users/taguchi/.pyenv/versions/2.7.18
```

### Pythonのバージョン切替方法
#### 開発用のディレクトリ毎に利用するPythonのバージョンを変える（localコマンド）

使い方

```
cd <開発用ディレクトリ>
pyenv local <この開発用ディレクトリで利用するPythonのバージョン>
```

実行例
デフォルトはPython 2.7.16 だが 開発ディレクトリpy2で利用するPythonのバージョンを 2.7.18 に変更する

```
taguchi@MasamacAir ~ % cd ~/test/py2
taguchi@MasamacAir py2 % python --version
Python 2.7.16
taguchi@MasamacAir py2 % pyenv local 2.7.18
taguchi@MasamacAir py2 % python --version
Python 2.7.18
```

python --version　の表示が変わらないとき
１）よくある　他のディレクトリに移動してから再度戻る、ログアウトしてログインし直してから再度確認してみてください
２）.zprofileや/etc/paths でパス/usr/local/binが/usr/binより優先されているかを確認してください

#### システム全体で利用するPythonのバージョンを変える（globalコマンド）

```
pyenv global <システム全体で利用するPythonのバージョン>
```

実行例
デフォルトはPython 2.7.16 だが システム全体で利用するPythonのバージョンを 3.9.1 に変更する

```
taguchi@MasamacAir ~ % python --version
Python 2.7.16
taguchi@MasamacAir ~ % pyenv global 3.9.1
taguchi@MasamacAir ~ % python --version
Python 3.9.1
```

## pyenv-virtualenv環境設定
pyenv-virtualenvを使うと、開発環境が分けられます。
ライブラリ等が異なるなどの際に便利です。
私は、色々試したい場合にはpyenv-virtualenv、開発環境の構成が複雑な場合や開発環境を共有する場合はDocker（ローカルPCやクラウド上）やVirtualBox（ローカルPC）と使い分けています。

使い方

```
pyenv virtualenv <利用するPythonのバージョン> <Python開発環境の名前、自分でわかるように付ける>
```

実行例
Pythonのバージョン 2.7.18 の開発環境 GANtest1 を作る、開発ディレクトリは ~/test/GANtest1

```
taguchi@MasamacAir ~ % mkdir ~/test/GANtest1
taguchi@MasamacAir ~ % cd ~/test/GANtest1
taguchi@MasamacAir GANtest1 % pyenv virtualenv 2.7.18 GANtest1
taguchi@MasamacAir GANtest1 % pyenv local GANtest1
taguchi@MasamacAir GANtest1 % python --version
Python 2.7.18
```

作成した開発環境が不要になったら、以下で消すことができます
使い方

```
pyenv uninstall <Python開発環境の名前>
```

実行例

```
taguchi@MasamacAir ~ % pyenv uninstall GANtest1
taguchi@MasamacAir ~ % rm -r ~/test/GANtest1
```