書籍「エピゲノム情報解析」を出版しました!みんな買ってね!
本記事は書籍出版記念更新その1として、micromambaを用いたPython環境構築を紹介します。
(その2もあればいいな)
Micromambaとは
Linux PC上でのPython環境の構築、仮想環境の管理にはpyenvやcondaをお使いの方が多いと思います。 このブログでも何度か記事にしています。
pyenvでPython環境を構築する - Palmsonntagmorgen
NGS解析のための共有サーバ環境構築を考える(2022年度版)(2022/9/12追記) - Palmsonntagmorgen
しかしcondaを使うと(pyenvを経由してインストールする場合を含む)、 多数のパッケージがインストールされる際に依存関係の競合を解決するのに要する時間が極めて長いという問題があります。 多数の依存関係を持つ解析ツールをbiocondaでインストールしようとすると、一晩待っても依存関係が解決せず、最終的に「解決できませんでした」とエラーになって終了するということもしばしば起こります。
そのために仮想環境を作ってパッケージ群を細かく分割し、バージョンの競合を防止することが有効なのですが、そもそも競合解決がもっと短時間で完了する方が便利です。
その理由から私は現在、Python環境構築にmicromambaを使っています。 仮想環境やベース環境の作成はCondaよりもはるかに高速であり、ローカルPCやDockerイメージのビルドにおいて、異なるツール・バージョン群のインストールテストが格段に楽になりました。
高速なPython環境構築を行ってくれるツールは他にもPixiやuvなどがあり、これらを利用するのでも良いと思います。 私がmicromambaを採用した理由は、小さなバイナリファイルをダウンロードするだけで利用可能になるという簡便さに魅力を感じたためです。他のラボメンバーなどに利用を推奨することが簡単ですし、Dockerfileと一緒に置いておけばDockerイメージ構築もはかどります!
micromambaのインストール
micromambaはmambaのtiny versionであり、利用方法はmambaに準じます。
バイナリ形式で配布されており、以下からダウンロード可能です。
Release micromamba 2.3.1-0 · mamba-org/micromamba-releases · GitHub
CPUの種類に合わせていくつかのバイナリがありますが、 基本的にはmicromamba-linux-64 を選べばよいです。 ダウンロード後、以下のようにリネームしつつ、パーミッションを変更して実行可能にします。
mv micromamba-linux-64 micromamba # リネーム chmod +x micromamba # 実行権限の付与
このmicromambaファイルをコピーすれば、どのマシンでもmicromambaが使えます。便利ですね。
micromambaは各ユーザごとにインストールすることが想定されているため、$HOME/.micromamba/bin/ ディレクトリを作成し、そこにバイナルファイルを置きましょう。
mkdir ~/.micromamba/bin/ mv micromamba ~/.micromamba/bin/
~/.micromamba/bin/micromamba が実行ファイルになりますので、~/.micromamba/bin/ にPATHを通してください。
参考:環境変数PATHの通し方 - Palmsonntagmorgen
micromamba とタイプして以下のようにヘルプが表示されればインストール完了です。
$ micromamba
Version: 2.3.1
micromamba [OPTIONS] [SUBCOMMAND]
OPTIONS:
-h, --help Print this help message and exit
--version
(以下略)
micromambaのインストール(Mac)
Macユーザの方はHomebrewでも入ります。
brew install micromamba
環境変数の設定
micromambaを利用するためには、MAMBA_ROOT_PREFIX などいくつかの環境変数の設定が必要になります。
以下のコマンドを実行すると、そのような設定を一括で環境ファイルに保存してくれます。
これはインストール時に一度だけ行えば以降は必要ありません。
micromamba shell init -s bash -p ~/.micromamba
このコマンドではシェルにbashを指定していますが、zshやfishも指定可能です。
base環境の構築
いよいよ環境構築です。まずはbase環境(デフォルト環境)です。
micromambaの場合、base環境も最初は空っぽで、Pythonがインストールされていません。 まずはbase環境にPythonをインストールしましょう。
micromamba install -n base python=3.10 # base環境にpython3.10をインストール
-n baseは省略可能ですが、間違いを防ぐためここでは明示的につけています。
以降は普通にpip install pandasなどでパッケージをインストールすることができます。
conda installに相当するコマンドは以下のようになります。
micromamba install -n base -c defaults <パッケージ名>
-c defaults はconda でも指定するパッケージコレクションのチャンネル名です。condaではdefaultsはデフォルトで入りますが、micromambaでは入らないので、明示的に指定しましょう。
例えばconda-forge をチャンネルとして追加する場合は以下のようになります。
micromamba install -n base -c defaults -c conda-forge <パッケージ名>
env.yamlを使ってパッケージインストール
最初にも述べたように、パッケージをあれこれ無作為にインストールしているとバージョンの競合が起きたり、インストール済のパッケージのバージョンが書き換わったりしますので、インストールするパッケージの一覧をenv.yamlなどに保存しておき、そこからインストールすることが望ましいです。
以下のように記述したファイルをenv.yaml というファイル名で保存してみましょう。
name: base
channels:
- conda-forge
- defaults
dependencies:
- python==3.10.13
- numba==0.59.0
- numexpr==2.8.7
- numpy==1.26.4
- pandas==2.2.1
- scikit-learn==1.3.0
- scipy==1.11.4
- matplotlib==3.8.0
- seaborn==0.12.2
- notebook==6.5.6
- pip:
- macs2==2.2.9.1
channels に必要なチャンネルを指定し、dependenciesにパッケージを箇条書きで指定します。pip(PyPI)でしか入らないものは、- pip:の下にインデントを入れて指定しましょう。
パッケージのバージョンは必ずしも指定する必要はありませんが、再現性を確保するうえでは可能な限り指定することが望ましいです。
このようにしておくと、以下のようにenv.yamlを指定するだけで全てのパッケージをインストールしてくれます。
micromamba install -y -n base -f env.yaml
このenv.yamlファイルを共有することで、他の人と同一の環境を共有することができます。便利ですね!
仮想環境の構築
micromamba create を使うと任意の名前の仮想環境を構築できます。
以下はpy39cu118 という名前の環境を構築する例です。
envname=py39cu118 micromamba create -n $envname python=3.9 -c defaults # 仮想環境を生成 # py39cu118環境にツールを個別にインストール micromamba run -n $envname pip install pandas==2.2.1 scikit-learn==1.3.0 scipy==1.11.4 micromamba install -n $envname -c defaults -c conda-forge <パッケージ名>
ここでもenv.yamlを用いて一括でインストールすることが可能です。
micromamba create -n $envname -f env.yaml
micromambaの利点:環境の再構築
ここまでで、micromambaを使った環境構築を紹介しました。 やり方はcondaなどと大差ないので、何が違うのだろう?と思われたかもしれません。
micromambaを用いる最大のメリットはその速さにあります。
env.yamlに大量のパッケージを記述した場合でも非常に高速に終了します(数分から十数分)。試してみると、condaと比較した高速さに驚くかもしれません。
高速であるということは、やり直すことが簡単であるということです。
環境を構築したが、何かがおかしい/失敗してしまったので最初からやり直したい、と思えば、
極端な話~/.micromamba/ ディレクトリごと削除して最初からやり直したとしても大した時間がかかりません。condaであれば、ここまでかかった環境構築の時間を考えると、削除をためらう…となってしまうでしょう。
env.yamlさえ用意しておけばコマンド1行で環境構築がほぼ完了するので、試しては削除して…と試行錯誤することが非常に簡単です。
依存関係が解決せずエラーで終了する場合も高速に結果を返してくれますし、env.yamlにバージョンを明記しておけばどれを修正すればいいのかもわかりやすいでしょう。
以前は、環境構築の再現性・統一に関してはDockerイメージを公開するのがベストではないかと思っていましたが、Dockerにも限界があります。
むしろenv.yamlを共有してその都度仮想環境を全員に作ってもらう方が、Python限定では再現性が高くなるのではないかという気がしました。高速なので、時間が限られた学内実習などでも利用できそうです。
ぜひ活用してみてください!