[小ネタ]データサイエンス向けPythonディストリビューション「Anaconda」と「Miniconda」の話

AnacondaとMinicondaって何者?どんな違いがあるの?どう使い分ける?調べてみました!
2020.04.30

月末だし(?)、ニッチそうな「いらすと」を探してみました。


▲ 穴の開いたブロックは「透かしブロック」と言うそうです。知見!

こんにちは。AWS事業本部のShirotaです。
最近は打ち込み(音楽)と打ち込み(ドット)が捗る毎日なので、もう暫くは一人家に篭り続けられる自信がつきました。

今日は、月末だし(?)小ネタブログを書いていこうと思います。
AnacondaとMinicondaの名前だけでも覚えて帰ってね!と言う趣旨のお話をさせて頂きます。

「Anaconda」って何者?

タイトルで説明が完結しているのですが、Anacondaは科学計算において便利なパッケージの導入が簡単にできるようになっているPythonディストリビューションです。
日本のPython情報サイトでは、以下のように説明されていました。

Anaconda はデータサイエンス向けのPythonパッケージなどを提供するプラットフォームです。科学技術計算などを中心とした、多くのモジュールやツールのコンパイル済みバイナリファイルを提供しており、簡単にPythonを利用する環境を構築できます。
Pythonのパッケージだけではなく、他言語のライブラリやいろいろなユーティリティも提供しており、NvidiaのGPUを利用する場合に必要な、CUDAなどの環境も簡単にインストールできるようになっています。

Anaconda - python.jp

かつてサーバも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では jupytermatplotlibnumpypandas と言った誰もが使うであろうパッケージが既にインストール済みとなっており、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物心がつく前から触っていたという ぼんやりとした愛 だけで書いたブログですが、科学計算環境を手に入れたい人の助けになれば幸いです。