#はじめに
こちらの記事 でご存じの方も多いと思うが、商用利用(定義については後述)における Anacondaリポジトリの利用が有償化されたようである。
回避策として、[こちらの記事] (https://qiita.com/c60evaporator/items/ba41cef4b37465c39948)にもあるように、pyenv等をつかえばよいのではないかという話もあるが、ケモインフォマティシャンが良く使うRDKitは実質condaでしか配布されていないため、condaを使わざるを得ない状況である。
最初の記事によれば、miniconda+conda-forgeの運用であれば影響は受けなさそうとのこと。そこで、今回、miniconda+conda-forgeで運用を考えてみた。
情報整理
まずは変更されたAnconda Individual EditionのTerms of Serviceを確認する。
To avoid confusion, “commercial activities” are any use of the Repository which is NOT:
の後に、商用利用外の定義が記載されてり、これ以外は全て商用利用と定義する旨記載されている。
良く分からないのが対象のリポジトリの範囲である。Anacondaには、Thrid-Partyのリポジトリも数多くあり、我らがRDkitもconda-forgeから利用できる。これらも対象なのかどうか、このTOSからでははっきりしない。
そこでさらに情報を得るべく、conda-forgeのブログを見てみると以下に重要な情報があった。
https://conda-forge.org/blog/posts/2020-11-20-anaconda-tos/
上にはっきりと "The TOS change does not apply to conda-forge , nor to other channels hosted on anaconda.org "と書かれている。
ということから、anacondaの"default"のチャネルを使わなければよさそうだ。
#miniconda+conda-forge による運用対処編
minicondaはすでにインストールされている前提とする。
condaのチャネルの設定からdefaultsチャネルを削除
まずは、anacondaの"default"のチャネルを使わないよう設定する。
%conda config --remove channels defaults
%conda config --show channels
channels:
- conda-forge
channesからdefaultsが消えていればOKだ。
この状態でpytnon3.7の仮想環境を作り、activateして以下のようにscikit-learnの古いバージョンを指定してインストールしようとしても、conda-forgeにそのバージョンがないため、インストールはされないはずだ。
conda install scikit-learn===0.19
これは正しい動作である。最も、defaultsチャネルにしかない古いバージョンを使いたい場合、conda-forgeでは対応できないので、他の手段で対応する必要がある。
一方で、install時に-c
オプションで明示的にチャネルをconda-forgeに指定した場合、以下のようにdefaultsチャネル(pkgs/main)のものが勝手に含まれてしまう。condaの設定からdefaultsチャネルを削除していた場合もこの動作になるため、注意が必要だ。
conda install scikit-learn===0.19 -c conda-forge
<中略>
The following NEW packages will be INSTALLED:
blas pkgs/main/win-64::blas-1.0-mkl
icc_rt pkgs/main/win-64::icc_rt-2019.0.0-h0cc432a_1
intel-openmp conda-forge/win-64::intel-openmp-2020.3-h57928b3_311
mkl pkgs/main/win-64::mkl-2018.0.3-1
numpy pkgs/main/win-64::numpy-1.11.3-py37h53ece5f_11
numpy-base pkgs/main/win-64::numpy-base-1.11.3-py37h8128ebf_11
scikit-learn pkgs/main/win-64::scikit-learn-0.19.2-py37heebcf9a_0
scipy pkgs/main/win-64::scipy-1.1.0-py37hc28095f_0
tbb conda-forge/win-64::tbb-2020.2-h2d74725_3
tbb4py conda-forge/win-64::tbb4py-2020.2-py37h8c56517_3
conda-forge以外のチャネルからもインストールする場合は、-c
を指定することもあるだろうからこれでは困る。そこで、-c
オプションでチャネルを指定する場合は、--override-channels
オプションも合わせて指定するとよい。
conda install scikit-learn===0.19 -c conda-forge --override-channels
この指定により、defaults
チャネルや、.condarc
に記載したチャネルを検索しないようにすることができる。
まとめ
以上をまとめると、以下のようになる。
- condaのチャネルの設定からdefaultsチャネルを削除する。
- インストール時に
-c
オプションを指定する時は、勝手にdefaultsまたは.condarcに登録したチャネルが検索されないよう、--override-channels
オプションを併用する。 - インストール するかどうかの確認の画面でyを入力するときに、defaultsチャネルのものが混じってないか目視で確認する(これ地味に大事ですね)
Hava a good miniconda & conda-forge life !
#おわりに
- RDKitについては、昔、頑張って検証した記事 RDKitをWindows環境でビルドする のように自力でビルドするか、miniforgeプロジェクトに期待している。
- 普段何気なく使っているconda-forgeとかについて、もう少し理解を深める必要がある。勉強がてらgithubに作成した自分のライブラリをconda-forgeに登録してみても面白い。
- この記事で記載している内容は、一個人の見解であり、一切の責任を負いません。
参考
- Anaconda パッケージリポジトリが「大規模な」商用利用では有償になっていた
- [Anacondaが有償化されて困っている人に贈る、Pythonのパッケージ管理] (https://qiita.com/c60evaporator/items/ba41cef4b37465c39948)