Minicondaにおけるcondaの備忘録です.スパコンWisteria-O や スパコン ITO のログインノード(bashです)において,Minicondaでローカル環境を構築します.ライセンスの関係で,Anacondaは不可,Miniconda + conda-forge とする必要があるようです.Linux(bash)環境一般に適用できると思います.また,Intel の Python 向け Distribution を積極的に活用します.
追記(2023.10.11): Minicondaのインストール方法を改訂しました.
追記(2022.4.24): Minicondaのアンインストールに失敗した後の後遺症でVsCodeのRemote-SSHに不具合
追記(2021.1.22): ITO-AのPython実行で Segmentation fault
に悩まされましたが,以下のインストールに追記した方法で回避されました.
追記(2020.4.11): Python向け Intel Distribution は不具合に遭遇しましたので,積極的に活用することは止めました.
Miniconda のインストール
追記(2021.1.22;2023.10.11):ITO-AでPython環境の原因不明のコンフリクトが発生しました.~/.bashrc
の最後の方に export PYTHONPATH=
を追記して,PYTHONPATH
を消去しておきます.あるいは unset PYTHONPATH
を追記しておきます.これは Intel oneAPI のIntel PythonやシステムにインストールされたPythonとのコンフリクトでしたので,setvars.sh をsourceした直後に追記するのが有効です.
ローカル環境にMiniconda をインストールし,仕事毎に仮想環境を作って運用するのがお勧めです.
ログインノードでログインし,ホームディレクトリで以下を実行します.
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
~/miniconda3/bin/conda init bash
再ログインすると (base) 環境が使えます.最初にconda-forgeをデフォルトにし,updateします.
conda config --add channels conda-forge
conda update conda
さらに,ログインしたときに自動的に (base) 環境がアクティべートされるのを抑止します.
conda config --set auto_activate_base false
再ログインすると反映されます.baseをアクティベートするには以下のようにします.
conda activate base
もし仮想環境が存在すれば,baseの代わりに仮想環境名を指定して直接アクティベートできます.
なお,これにより ~/.condarc
に 以下が追記されます.上記コマンドを使わず,このファイルを直接書き換えても同じです.
auto_activate_base: false
Miniconda のアンインストール
Miniconda のアンインストールは簡単ですので,挙動がどうしてもおかしくなってきたら,アンインストールし,再度インストールするのがお勧めです.
Minicondaがインストールされているディレクトリをすべて消去します.
$ rm -rf ~/miniconda3
さらに,ホームディレクトリに作成されている,関連する隠しファイルや隠しディレクトリ(存在するもののみ)を以下のように削除します.
$ rm -rf ~/.condarc ~/.conda
最後に,ホームディレクトリに存在する,.bashrc ファイルの以下のような部分を削除します.
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/usr1/m70161a/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "/home/usr1/m70161a/miniconda3/etc/profile.d/conda.sh" ]; then
. "/home/usr1/m70161a/miniconda3/etc/profile.d/conda.sh"
else
export PATH="/home/usr1/m70161a/miniconda3/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
Windows 10での注意
アプリと機能で削除する前に,envsとpkgsフォルダを削除しておきます.これをしないとアンインストールに非常に時間がかかることがあります.
最後にminiconda3,.conda .jupyter .matplotlib .ipython等のフォルダを削除します.
Windows 10 のMinicondaのアンインストール失敗後の不具合
2022.4.24追記
原因不明ですが,Minicondaのアンインストールに失敗し,関連するレジストリを手動で消去したことがあります.それ以降,PowerShellでバッチファイルが起動しなくなり,不思議に思っていました.その後,WindowsのVScodeを用いて,ITOのファイルを編集をしようとして,remote-ssh接続を試みましたが,何度やってもうまく行かない不具合に悩まされました.その症状と解決策は こちらの記事 にある通りで,この現象を理解したのは こちらの記事 のおかげです.
記事の通り,レジストリの以下の部分を(私の場合は後者のみ存在)を削除することで,この問題がすべて解決しました.
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
パッケージのリポジトリについて(channel
)
2022.4.24追記: Anacondaはライセンスの関係で使用を止めました.Miniconda + conda-forgeとします.
パッケージ の リポジトリ(保管場所) を channel といいます.様々な機関(個人)がパッケージを提供しています.Anaconda Cloud(Anaconda によるパッケージ管理サービス) で調べることができます.例えば,TensorFlow については こちらのページ にあるように,数多くの channel が存在します.channelには代表的なものが存在し,通常はそれらの代表的な channel からパッケージをインストールするのが普通です.しかし,専門的なパッケージになると,channel を指定したインストールが必要になる場合もあります.
公式リポジトリの channel は defaults
です.また,コミュニティベースのリポジトリの conda-forge
は公式channelよりも多くのパッケージが管理されており,しばしば利用されます.
channel の操作
channelの一覧を取得する方法,channelを追加・削除する方法,およびchannelの優先順位を変更する方法を紹介します.
channel 一覧の取得 conda config --get channels
現在の channel の一覧を確認してみましょう.Minicondaインストール直後は何も表示されないようです.
conda config --get channels
conda-forge
をデフォルトにします.conda-forge
が highest priority
(先頭)となっていますので,conda-forge
のパッケージが優先的にインストールされる状態です.
conda config --add channels conda-forge
conda config --get channels
以降では channel操作 を項目別に紹介します.
channelを先頭に追加 conda config --add channels channel_name
Intel が提供する intel
channel を先頭(highest priority)に追加します.
$ conda config --add channels intel
$ conda config --get channels
--add channels 'defaults' # lowest priority
--add channels 'conda-forge'
--add channels 'intel' # highest priority
channelを削除 conda config --remove channels channel_name
intel の channelを削除します.
$ conda config --remove channels intel
$ conda config --get channels
--add channels 'defaults' # lowest priority
--add channels 'conda-forge' # highest priority
channel を末尾に追加 conda config --append channels channel_name
intelのchannelを末尾(lowest priority)に追加します.
$ conda config --append channels intel
$ conda config --get channels
--add channels 'intel' # lowest priority
--add channels 'defaults'
--add channels 'conda-forge' # highest priority
先頭 channel を変更 conda config --add channels channel_name
既に存在する intel の channel を先頭(highest priority)にします.先頭にするには, --add
です.末尾にするには,--append
です.
$ conda config --add channels intel
Warning: 'intel' already in 'channels' list, moving to the top
$ conda config --get channels
--add channels 'defaults' # lowest priority
--add channels 'conda-forge'
--add channels 'intel' # highest priority
ファイルでchannelの設定
channel は ~/.condarc
に以下のように設定されます.これを直接編集することも可能です.
channels:
- conda-forge
- defaults
仮想環境
Miniconda のデフォルト環境(base)でパッケージをインストールしていくと,しばしば依存関係に不具合が生じ,Miniconda の再インストールに陥ることがあります.そのため,目的別に仮想環境(virtual environment,略して v_env)を用意するのが鉄則です.
仮想環境の構築 conda create -n v_env [python=version]
仮想環境 my_env を構築します.
$ conda create -n my_env
Pythonのバージョンを指定することもできます.以下ではバージョン3.6を指定しました.
$ conda create -n my_env python=3.6
インテルディストリビューションを用いた仮想環境 my_intel_env を構築するには,次のように特別な操作が必要です.
$ conda create -n my_intel_env intelpython3_core python=3
intelpython3_core の部分を intelpython3_full に変更すると,完全なインテルディストリビューションが構築されます.また,python=3 を python=2 に変更すると,Python のバージョンが 2 になります.なお,Python 2 を使用することは普通はありません.
仮想環境の確認 conda info -e
利用可能な仮想環境と選択されている環境を確認します.実行結果は スパコンITO での筆者の環境で,m00000a はスパコンのユーザーホームディレクトリ名(仮称)です.*
が現在選択されている環境で,base になっています.
$ conda info -e
# conda environments:
#
base * /home/usr1/m00000a/local/miniconda3
my_env /home/usr1/m00000a/local/miniconda3/envs/my_env
my_intel_env /home/usr1/m00000a/local/miniconda3/envs/my_intel_env
仮想環境に入る conda activate v_env
仮想環境my_intel_envを有効にし(アクティベート),仮想環境を確認します.
$ conda activate my_intel_env
$ conda info -e
# conda environments:
#
base /home/usr1/m00000a/local/miniconda3
my_env /home/usr1/m00000a/local/miniconda3/envs/my_env
my_intel_env * /home/usr1/m00000a/local/miniconda3/envs/my_intel_env
- が 移動し,仮想環境の my_intel_env がアクティベートされたことが分かります.
仮想環境から抜ける conda deactivate
仮想環境から抜け,base に戻るには conda deactivate
を実行します.conda info -e
を実行すると,* が base に戻っていることが確認できます.
$ conda deactivate
$ conda info -e
# conda environments:
#
base * /home/usr1/m00000a/local/miniconda3
my_env /home/usr1/m00000a/local/miniconda3/envs/my_env
my_intel_env /home/usr1/m00000a/local/miniconda3/envs/my_intel_env
仮想環境を削除 conda remove -n v_env --all
仮想環境 my_env を削除するには以下のようにします.
$ conda remove -n my_env --all
パッケージの管理
仮想環境 my_intel_env において,パッケージを管理しましょう.
準備
現在は base 環境とします.最初に conda を最新にします.
$ conda update conda
次にパッケージをインストールする仮想環境 my_intel_env をアクティベートします.
$ conda activate my_intel_env
パッケージのインストール conda install package_list
パッケージ名をスペース区切りで並べ,複数のパッケージを一括してインストールすることもできます.以下に例を示します.
$ conda install jupyterlab matplotlib netCDF4 pandas xarray
channelを指定したパッケージのインストール conda install -c channel_name package_list
専門性が高くなると,channel を指定したパッケージのインストールが必要になる場合があります.また,channelを指定することで,どの channel からパッケージをインストールするか,明確になり,お勧めです.
anaconda channel から tensorflow をインストールするには次のようにします.
$ conda install -c anaconda tensorflow
また,仮想環境を構築する際にもchannelを指定できます.以下は,anaconda channelを指定して,仮想環境 tf を構築する例です.
$ conda create -c anaconda -n tf
インストール済みのパッケージの確認 conda list
現在の環境においてインストール済みのパッケージを確認するには以下のようにします.
$ conda list
-n
に仮想環境名を与えると,その仮想環境でインストール済みのパッケージを確認できます.
$ conda list -n my_env
パッケージのアンインストール conda uninstall package_list
パッケージ xarray のアンインストールは以下のようにします.複数のパッケージをスペース区切りで並べれば一括でアンインストールできます.
$ conda uninstall xarray
仮想環境設定の書き込み conda env export -n v_env > file.yaml
仮想環境の情報をファイルに書き込んでおくと,他のマシンで同じ環境を構築することが簡単にできるようになります.base で実行します.仮想環境 my_intel_env の環境をmy_intel_env.yaml ファイルに書き込みます.このyamlファイルは現在のディレクトリに作成されます.なお,yaml の説明は Wikipedia(英語版)を参照ください.
$ conda env export -n my_intel_env > my_intel_env.yaml
ただし,仮想環境を作成しただけで,パッケージを何もインストールしていない状態では,うまくいかないようです.
仮想環境の再構築 conda env create -f file.yaml
my_intel_env.yaml
を使って別のマシンで環境を再構築するには以下の様にします.
$ conda env create -f my_intel_env.yaml
スパコン ベンダー環境のクローン作成
スパコンITOではベンダーがインストールしている Intel Python の環境があります.これをそのまま使用する場合は上記のインストール作業は不要ですが,そのままではパッケージのインストールができません.そのため,ベンダー環境のクローンをローカルの仮想環境として作成する必要があります.この方法はベンダー環境に依存し,必ずしも十分にメンテされているわけではないので,お勧めはできません.実際,筆者は numpy が import できない不具合に遭遇しました.以下に参考まで,まとめておきます.本件は九州大学情報基盤研究開発センターの利用相談で得た情報です.
サーバーの conda 環境をローカルにクローンする
仮想環境名を intel2019up4 として以下のように構築します.実行には時間がかかります(7分程度でした).クローン可能な対象はベンダーの整備状況に依存します.
$ source /home/app/intel/intel2019_up4/intelpython3/bin/activate
$ conda create -n intel2019up4 --clone="/home/app/intel/intel2019_up4/intelpython3"
$ source activate intel2019up4
確認してみましょう.
$ conda info -e
# conda environments:
#
intel2019up4 * /home/usr1/m00000a/.conda/envs/intel2019up4
root /home/app/intel/intel2019_up4/intelpython3
この環境を抜けるには以下の様にします.
$ source deactive intel2019up4