M2 Macbook AirにanyenvとpyenvでAnacondaをインストールする

手持ちのM2 Macbook AirAnacondaが必要となり、anyenvpyenvでインストールしてみたので手順を残しておく。

anyenvのインストール

まずはHomebrewで様々な**envコマンドをまとめて管理する為のanyenvをインストールする。

$ brew install anyenv

anyenvがインストールされた事を確認。

$ anynev -v
anyenv 1.1.5

インストール出来たらanyenv initコマンドを実行し、デフォルトシェルの種類に応じたanyenvの設定コマンドを確認する。

$ anyenv init
# Load anyenv automatically by adding
# the following to ~/.config/fish/config.fish:

status --is-interactive; and source (anyenv init -|psub)

anyenvはbashzshksh、fishをサポートしているので、それぞれのシェルに合わせたメッセージが出力されるのだが、自分の環境はfishを使っているので、上述のメッセージに従ってconfig.fishに出力されたコマンドを追記してやる。

$ vi ~/.config/fish/config.fish
以下を追記
status --is-interactive; and source (anyenv init -|psub)

追記が済んだらシェルをリロード。

$ exec $SHELL -l

次に、**envコマンドをインストールする為のanyenv-installプラグインを設定する。

$ anyenv install --init
Manifest directory doesn't exist: /Users/heroween/.config/anyenv/anyenv-install
Do you want to checkout https://github.com/anyenv/anyenv-install.git? [y/N]: y
Cloning https://github.com/anyenv/anyenv-install.git master to /Users/heroween/.config/anyenv/anyenv-install...
Cloning into '/Users/heroween/.config/anyenv/anyenv-install'...
remote: Enumerating objects: 71, done.
remote: Counting objects: 100% (14/14), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 71 (delta 4), reused 3 (delta 1), pack-reused 57
Receiving objects: 100% (71/71), 13.15 KiB | 6.58 MiB/s, done.
Resolving deltas: 100% (11/11), done.

Completed!

anyenv install -lコマンドでインストール可能な**envコマンドのリストが表示されたらanyenvの設定は完了。

$ ~/.config anyenv install -l
  Renv
  crenv
  denv
  erlenv
  exenv
  goenv
  hsenv
  jenv
  jlenv
  kubectlenv
  luaenv
  nodenv
  phpenv
  plenv
  pyenv
  rbenv
  sbtenv
  scalaenv
  swiftenv
  tfenv

pyenvのインストール

anyenvの設定が完了したら、複数バージョンのPythonを共存可能にするpyenvをインストールする。

$ anyenv install pyenv
/var/folders/0b/7w0c1g251msb55zpbzt6ls9r0000gn/T/pyenv.20221015230118.98707 ~
Cloning https://github.com/pyenv/pyenv.git master to pyenv...
Cloning into 'pyenv'...
remote: Enumerating objects: 22020, done.
remote: Counting objects: 100% (88/88), done.
remote: Compressing objects: 100% (57/57), done.
remote: Total 22020 (delta 37), reused 69 (delta 24), pack-reused 21932
Receiving objects: 100% (22020/22020), 4.43 MiB | 990.00 KiB/s, done.
Resolving deltas: 100% (14897/14897), done.
~

Install pyenv succeeded!
Please reload your profile (exec $SHELL -l) or open a new session.

インストールが完了したらシェルをリロード。

$ exec $SHELL -l

pyenvがインストールされた事を確認。

$ pyenv --version
pyenv 2.3.5-2-g03a5d653

pyenvの実体は以下のディレクトリにインストールされている。

$ pyenv root
/Users/heroween/.anyenv/envs/pyenv

ここまでで、同一環境に複数バージョンのPythonを共存させる事が出来るようになったものの、同じバージョンの環境を複数構成するといった事は出来ない為、それを実現するpyenvのプラグインとなるpyenv-virtualenvもインストールする。

$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

インストールが完了したら再びシェルをリロード。

$ exec $SHELL -l

pyenv-virtualenvのインストールを確認する。

$ pyenv virtualenv --version
pyenv-virtualenv 1.1.5 (virtualenv unknown)

これでpyenvの設定は完了。

Anacondaをインストールする

pyenvを使って本来の目的となるAnacondaをインストールする。

pyenv install -lコマンドを実行すると、インストール可能なPython2、Python3や、Anaconda、Miniconda(Anacondaのmininal版)等の各バージョンがリスト表示されるので、そこからインストールしたいAnacondaのバージョンを取得する。

$ pyenv install -l
Available versions:
  2.1.3
  2.2.3
  2.3.7
~~~~~ 中略 ~~~~~
  anaconda3-2020.11
  anaconda3-2021.04
  anaconda3-2021.05
  anaconda3-2021.11
  anaconda3-2022.05

執筆時の最新版となるanaconda3-2022.05をインストールする場合、以下のコマンドを実行する(もっとも、anaconda3-2022.05以前のバージョンはMacOSX-arm64に未対応なので、そもそもM2 Macbook Airにはインストール出来ないのだけども)。

$ pyenv install anaconda3-2022.05
Downloading Anaconda3-2022.05-MacOSX-arm64.sh...
-> https://repo.anaconda.com/archive/Anaconda3-2022.05-MacOSX-arm64.sh
Installing Anaconda3-2022.05-MacOSX-arm64...
Installed Anaconda3-2022.05-MacOSX-arm64 to /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05

インストールバージョンを確認。

$ pyenv versions
* system (set by /Users/heroween/.anyenv/envs/pyenv/version)
  anaconda3-2022.05

GlobalのPython環境をanaconda3-2022.05に変更。

$ pyenv global anaconda3-2022.05
$ pyenv versions
  system
* anaconda3-2022.05 (set by /Users/heroween/.anyenv/envs/pyenv/version)

condaコマンドが機能する事を確認する。

$ conda -V
conda 4.13.0
$ conda env list
# conda environments:
#
base                  *  /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05

次に、デフォルトシェルにAnacondaの初期化設定をしてやる。

$ conda init fish
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/condabin/conda
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/bin/conda
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/bin/conda-env
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/bin/activate
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/bin/deactivate
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/etc/profile.d/conda.sh
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/etc/fish/conf.d/conda.fish
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/shell/condabin/Conda.psm1
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/shell/condabin/conda-hook.ps1
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/lib/python3.9/site-packages/xontrib/conda.xsh
no change     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/etc/profile.d/conda.csh
modified      /Users/heroween/.config/fish/config.fish

==> For changes to take effect, close and re-open your current shell. <==

すると、fishのconfig.fishファイルに以下の様なAnacondaの設定が追記され、シェルの起動時に自動でAnacondaがactivateされる様になる。

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
eval /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/bin/conda "shell.fish" "hook" $argv | source
# <<< conda initialize <<<

なお、conda init --allを実行すると、Anacondaがサポートしている全てのシェル(bashzshtcsh、fish、xonsh、powershell)に設定が追記されるので、複数シェルでまとめて設定したい場合は--allオプションを使うと便利。

完了したらシェルをリロード。

$ exec $SHELL -l

これでAnacondaのインストールまでが完了となる。

Anacondaの仮想環境を作成してみる

pyenv-virtualenvを使ってAnacondaの仮想環境を作るには、以下のコマンドを実行する。

$ pyenv virtualenv anaconda3-2022.05 myenv
Collecting package metadata (current_repodata.json): done
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.13.0
  latest version: 22.9.0

Please update conda by running

    $ conda update -n base -c defaults conda



## Package Plan ##

  environment location: /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/envs/myenv

  added / updated specs:
    - python


The following NEW packages will be INSTALLED:

  bzip2              pkgs/main/osx-arm64::bzip2-1.0.8-h620ffc9_4
  ca-certificates    pkgs/main/osx-arm64::ca-certificates-2022.07.19-hca03da5_0
  certifi            pkgs/main/osx-arm64::certifi-2022.9.24-py310hca03da5_0
  libcxx             pkgs/main/osx-arm64::libcxx-14.0.6-h848a8c0_0
  libffi             pkgs/main/osx-arm64::libffi-3.4.2-hc377ac9_4
  ncurses            pkgs/main/osx-arm64::ncurses-6.3-h1a28f6b_3
  openssl            pkgs/main/osx-arm64::openssl-1.1.1q-h1a28f6b_0
  pip                pkgs/main/osx-arm64::pip-22.2.2-py310hca03da5_0
  python             pkgs/main/osx-arm64::python-3.10.6-hbdb9e5c_0
  readline           pkgs/main/osx-arm64::readline-8.1.2-h1a28f6b_1
  setuptools         pkgs/main/osx-arm64::setuptools-63.4.1-py310hca03da5_0
  sqlite             pkgs/main/osx-arm64::sqlite-3.39.3-h1058600_0
  tk                 pkgs/main/osx-arm64::tk-8.6.12-hb8d0fd4_0
  tzdata             pkgs/main/noarch::tzdata-2022c-h04d1e81_0
  wheel              pkgs/main/noarch::wheel-0.37.1-pyhd3eb1b0_0
  xz                 pkgs/main/osx-arm64::xz-5.2.6-h1a28f6b_0
  zlib               pkgs/main/osx-arm64::zlib-1.2.12-h5a0b063_3


Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate myenv
#
# To deactivate an active environment, use
#
#     $ conda deactivate

Looking in links: /var/folders/0b/7w0c1g251msb55zpbzt6ls9r0000gn/T/tmp131_n1rs
Requirement already satisfied: setuptools in /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/envs/myenv/lib/python3.10/site-packages (63.4.1)
Requirement already satisfied: pip in /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/envs/myenv/lib/python3.10/site-packages (22.2.2)

pyenv virtualenvコマンドを実行すると仮想環境が作成される訳だが、実行環境にcondaコマンドが存在している場合、内部的にはconda createが使われる様になっている。

$ pyenv versions
* system (set by /Users/heroween/.anyenv/envs/pyenv/version)
  anaconda3-2022.05
  anaconda3-2022.05/envs/myenv
  myenv
$ conda env list
# conda environments:
#
base                  *  /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05
myenv                    /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/envs/myenv

新しく作成したAnacondaの仮想環境へ切り替えるには、conda activateコマンドを実行。

$ conda activate myenv
$ conda env list
# conda environments:
#
base                     /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05
myenv                 *  /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/envs/myenv
$ pyenv versions
* system (set by /Users/heroween/.anyenv/envs/pyenv/version)
  anaconda3-2022.05
  anaconda3-2022.05/envs/myenv
  myenv

あくまでAnaconda内における仮想環境の切り替えとなる為、pyenv側が切り替わることは無い。

pyenv側で切り替えるのであれば、一旦、conda deactivateコマンドでAnacondaから抜けた後、pyenv activateコマンドを実行する形となる。

$ conda deactivate
$ pyenv activate myenv
$ pyenv versions
  system
  anaconda3-2022.05
  anaconda3-2022.05/envs/myenv
* myenv (set by PYENV_VERSION environment variable)
$ conda env list
# conda environments:
#
base                  *  /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05
myenv                    /Users/heroween/.anyenv/envs/pyenv/versions/anaconda3-2022.05/envs/myenv

なお、pyenvでインストールしたAnacondaと、そのAnacondaを元にpyenv virtualenv(conda create)で作成した仮想環境とでは、デフォルトでインストールされるパッケージ群が異なるので注意が必要(仮想環境では作成時に出力されるメッセージの通り、最低限のパッケージしかインストールしない)。