[小ネタ]データサイエンス向けPythonディストリビューション「Anaconda」と「Miniconda」の話
月末だし(?)、ニッチそうな「いらすと」を探してみました。
▲ 穴の開いたブロックは「透かしブロック」と言うそうです。知見!
こんにちは。AWS事業本部のShirotaです。
最近は打ち込み(音楽)と打ち込み(ドット)が捗る毎日なので、もう暫くは一人家に篭り続けられる自信がつきました。
今日は、月末だし(?)小ネタブログを書いていこうと思います。
AnacondaとMinicondaの名前だけでも覚えて帰ってね!と言う趣旨のお話をさせて頂きます。
「Anaconda」って何者?
タイトルで説明が完結しているのですが、Anacondaは科学計算において便利なパッケージの導入が簡単にできるようになっているPythonディストリビューションです。
日本のPython情報サイトでは、以下のように説明されていました。
Anaconda はデータサイエンス向けのPythonパッケージなどを提供するプラットフォームです。科学技術計算などを中心とした、多くのモジュールやツールのコンパイル済みバイナリファイルを提供しており、簡単にPythonを利用する環境を構築できます。
Pythonのパッケージだけではなく、他言語のライブラリやいろいろなユーティリティも提供しており、NvidiaのGPUを利用する場合に必要な、CUDAなどの環境も簡単にインストールできるようになっています。
かつてサーバもOSも何も知らなかった私も、研究で使うからという事でとりあえずAnacondaをインストールして使っていた事があります。
それくらい、Anacondaはよく使われるディストリビューションです。
何よりも科学計算系の利用できるパッケージが豊富で、基本的にAnacondaを入れておけば困る事がほぼ無いからです。
ただ、豊富すぎるが故の弱さも持ち合わせてます。
初期インストール時のデータがとにかく大きい のです。
現状では、 約1.5〜2GB弱 の容量が必要となっています。(インストールするOSによって若干の誤差はあります)
そんな中、その欠点を補うPythonディストリビューションが存在している事を知りました。
それこそが、 Miniconda です。
「Miniconda」って何者?
以前、私はブログで以下のように説明をさせてもらいました。
今回、本題からは逸れてしまうので詳細は省きますが、MinicondaはAnacondaの縮小版のようなPythonディストリビューションで、具体的には初期導入されるパッケージがAnacondaよりも少なくなっています。
使いたいパッケージは後からパッケージマネージャであるcondaを利用してインストールする事ができます。
はじめてのFargate~FargateとDocker Hubを使ってJupyter Notebook環境を用意する~ | Developers.IO
Minicondaは、Pythonと必要最低限のパッケージとパッケージ管理システムの conda が入っているPythonディストリビューションです。
Anacondaはそれに加え、インストール済みのパッケージが多くなったPythonディストリビューションとなっています。
具体的な量を示すと、Miniconda(4.8.3)でインストール済みのパッケージは以下のようになっています。
$ conda list # packages in environment at /opt/conda: # # Name Version Build Channel _libgcc_mutex 0.1 main asn1crypto 1.3.0 py38_0 ca-certificates 2020.1.1 0 certifi 2020.4.5.1 py38_0 cffi 1.14.0 py38h2e261b9_0 chardet 3.0.4 py38_1003 conda 4.8.3 py38_0 conda-env 2.6.0 1 conda-package-handling 1.6.0 py38h7b6447c_0 cryptography 2.8 py38h1ba5d50_0 idna 2.9 py_1 ld_impl_linux-64 2.33.1 h53a641e_7 libedit 3.1.20181209 hc058e9b_0 libffi 3.2.1 hd88cf55_4 libgcc-ng 9.1.0 hdf63c60_0 libstdcxx-ng 8.2.0 hdf63c60_1 ncurses 6.2 he6710b0_1 openssl 1.1.1g h7b6447c_0 pip 20.0.2 py38_1 pycosat 0.6.3 py38h7b6447c_1 pycparser 2.20 py_0 pyopenssl 19.1.0 py38_0 pysocks 1.7.1 py38_0 python 3.8.2 hcf32534_0 readline 8.0 h7b6447c_0 requests 2.23.0 py38_0 ruamel_yaml 0.15.87 py38h7b6447c_0 setuptools 46.1.3 py38_0 six 1.14.0 py38_0 sqlite 3.31.1 h62c20be_1 tk 8.6.8 hbc83047_0 tqdm 4.45.0 py_0 urllib3 1.25.8 py38_0 wheel 0.34.2 py38_0 xz 5.2.5 h7b6447c_0 yaml 0.1.7 had09818_2 zlib 1.2.11 h7b6447c_3
Anacondaは、以下リンク先のようになっています。
Packages for 64-bit Linux with Python 3.8 — Anaconda documentation
参考までに出すのも嫌になるくらい、量が圧倒的に違います。
また、比較してもらえると分かると思いますがAnacondaでは jupyter や matplotlib 、 numpy 、pandas と言った誰もが使うであろうパッケージが既にインストール済みとなっており、Anacondaをインストールすればすぐに科学計算やプロットと言った事が実施できる環境が整えられる事が分かります。
今回話したかった両者の違い
折角なので、AnacondaとMinicondaの違いを分かりやすく図示してみました。
▲ 今回の話、これ一枚で終わっている
知っておくとちょっと嬉しい事
これで終わらせてしまうのもちょっと勿体無いなと思ったので、お伝えしたいなと思った事をいくつかまとめてみました。
AnacondaとMinicondaの使い分けはどうする?
基本的には、どこを気にするかに依ると思います。
- とにかくインストールしたらすぐに使える環境が欲しい
この場合は、Anacondaをインストールする事が一番効率が良いと思います。
インストールすれば、主要なパッケージがインストール済みの状態になっている為すぐに利用する事が可能です。
- 極力容量を使わずに使いたい
この場合は、Minicondaをインストールする事をお勧め致します。
どちらかというと、 既に利用したいパッケージの見当がついている 方にお勧めです。
前述した私のブログにおける考え方を改めて引用します。
個人的にはDockerイメージでMinicondaを使うという考え方がコンテナに即した考え方で素敵だなと思いました。
コンテナほぼ未経験の初心者がそのように感じられたのは、つい最近社内でコンテナ初心者向けの勉強会があり、そこで聞いたコンテナの考え方と近しい思想で「 あ!これコンテナ勉強会で聞いたやつだ! 」となった為です。ありがたい限りです。
AWSでAnaconda、Minicondaが使いたい!
実は、公式から MarketplaceにてAMIが提供されています!
AWS Marketplace: Anaconda, Inc.
ですが、バージョンを確認していただければ分かると思いますが、 ちょっと古い AMIが多いです。
(現状ではAnaconda with Python 3のみが2020年にアップデートされているようでした)
後は、どの公式AMIも移行が推奨されているOS、 Amazon Linux 1 を利用しています。
また検証する中で、condaのアップデートをしようとしたところ権限の問題でハマってしまいました。
基本的には綺麗な環境に最新のAnaconda、Minicondaをインストールしたり、 Docker Hub で最新のDockerイメージを利用したりして使って頂ければと思います。
continuumio's Profile - Docker Hub
ですが、もし上記のAMIでとりあえず最新にアップデートして触ってみたいという方の為に一応コマンドを置いておきます。
$ sudo /opt/conda/bin/conda update -n base -c defaults conda
AnacondaもMinicondaもいいぞ
今回は、月末恒例の小ネタ(?)という事で、データサイエンス向けPythonディストリビューション「Anaconda」と「Miniconda」を紹介させて頂きました。
IT物心がつく前から触っていたという ぼんやりとした愛 だけで書いたブログですが、科学計算環境を手に入れたい人の助けになれば幸いです。