pyenv+miniconda+conda-forge環境構築
pyenv+miniconda 環境で Python を実行しようとしたら,パッケージ参照先がずれる罠に引っ掛かりました.
インストール
pyenv
(GitHub からのインストールも可能)
terminal
$ brew update
$ brew install pyenv
Homebrew でインストールした場合はシェルの環境変数が自動的に書き込まれます(多分).
miniconda
Python 3 系の Miniconda をインストールします.
terminal
$ pyenv install miniconda3-latest
$ pyenv global miniconda3-latest
バージョンが切り替わっていることが確認できます.
terminal
$ pyenv versions
* system
miniconda3-latest
バージョンが切り替わっていない場合,Miniconda のパスが正しく通っていない可能性があります.
環境設定
初期設定を行い,シェルを再起動します.
terminal
$ conda init zsh
$ exec $SHELL
Miniconda で conda-forge を利用するため,デフォルトのチャネルを削除します.
terminal
$ conda config --remove channels defaults
$ conda config --show channels
channels: []
参考:Anaconda の有償化に伴い miniconda+conda-forge での運用を考えてみた - Qiita
以下のコマンドでチャネルを追加できます.
terminal
$ conda config --add channels conda-forge
仮想環境構築
terminal
$ conda create -n myenv python=3.9 -c conda-forge --override-channels
環境構築時に Python もインストールします.インストールしなかった場合,仮想環境名 base
の Python 実行ファイルが参照されるためパッケージの参照先がずれ,ModuleNotFoundError: No module named 'xxx'
となってしまいます.
terminal
$ conda activate myenv
$ python
Python 3.9.13 | packaged by conda-forge | (main, May 27 2022, 17:01:00)
[Clang 13.0.1 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
'/Users/[user]/.pyenv/versions/miniconda3-latest/envs/myenv/lib/python39.zip',
'/Users/[user]/.pyenv/versions/miniconda3-latest/envs/myenv/lib/python3.9',
'/Users/[user]/.pyenv/versions/miniconda3-latest/envs/myenv/lib/python3.9/lib-dynload',
'/Users/[user]/.pyenv/versions/miniconda3-latest/envs/myenv/lib/python3.9/site-packages']
上記のように,Miniconda 下の仮想環境がパスに追加されていれば OK です.
最後に
以前はコマンドの衝突を避けるために pyenv 上で Anaconda を利用していましたが,今はその問題が解決されているような話を耳にしました.
そうであれば,わざわざ pyenv 使わずとも Miniconda で Python バージョンとパッケージを管理すれば良さそうです.