Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Anacondaの有償化に伴いminiconda+conda-forgeでの運用を考えてみた

はじめに

こちらの記事 でご存じの方も多いと思うが、商用利用(定義については後述)における Anacondaリポジトリの利用が有償化されたようである。
回避策として、こちらの記事にもあるように、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に登録してみても面白い。
  • この記事で記載している内容は、一個人の見解であり、一切の責任を負いません。

参考

kimisyo
主にライフサイエンス分野向けサービス開発を行っています。これからはライフサイエンスの時代です。化学、AI(機械学習)を中心に、学んだこと、経験したことをシェアしていきます。
https://github.com/kimisyo
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away