Introduction
condaでインストールできないパッケージは、通常pipでインストールしますが、condaでパッケージをbuildして管理することも可能(なはず)です。
このやり方だけでは、必要なパッケージがpipとcondaの両方で入るっぽいのでいまいちです。
どなたか詳しいことをご存知な方がいらっしゃいましたらお教えください。
必要パッケージ
condaでbuildするのと、anaconda.orgにアップロードするのに必要なパッケージをcondaでインストールします。
conda install conda-build anaconda-client
最近まで64bit Winはバグがあったため、windows使いで既にconda-buildが入っていた人はアップデートしておいた方がいいです。
conda update conda-build
conda化&upload
例としてpandas_mlをconda化する場合はこんな感じです。
skeletonでbuildのレシピを作って、ローカルでbuild、必要に応じてanaconda.orgにアップロードします。
mkdir work
cd work
conda skeleton pypi pandas_ml --version 0.3.0
cd pandas_ml
conda build . --python=3.4
# To have conda build upload to anaconda.org automatically, use
# $ conda config --set anaconda_upload yes
conda build . --output
# >>> <anaconda root>\conda-bld\win-64\pandas_ml-0.3.0-py34_0.tar.bz2
anaconda.orgを使わないでローカルでインストールする場合
onda install --use-local pandas_ml
anaconda.orgにアップロードする場合
anaconda.orgのサインアップをしておきます。privateを使わなければ無料です。
anaconda login
# >>> Using Anaconda Cloud api site https://api.anaconda.org
# >>> Username: y__sama
# >>> Password:
# >>> login successful
# >>> y__sama's
anaconda upload <anaconda root>\conda-bld\win-64\pandas_ml-0.3.0-py34_0.tar.bz2
よくanacondaにアップロードする場合はconda config --set anaconda_upload yes
を設定しておきます。
anaconda.orgからインストールする場合は、いつもどおりチャネルを指定してインストールでOKです。
conda install -c y__sama pandas_ml
エラーが出ることがちょくちょくありますが、依存関係のあるパッケージが、condaでインストールできないかレシピ(meta.yaml)に記載されてないかが理由です。エラーが出た場合はメッセージを見ながら依存パッケージを別途conda buildで作っておくかmeta.yamlを編集するかが、必要になります。
local内での環境copy
conda create -n env_copy --clone env
他のサーバへ(ファイルを介して)の移行
anaconda.orgにアップロードして使う場合は、channelを追加しておきます。
conda config --add channels y__sama
環境を一旦ファイルにエキスポートして、create時に--fileオプションで指定します。
conda list -e > env.txt
conda create -n env_file --file env.txt
でも、なぜかpipとcondaと両方入ってしまいます。。。
conda list
# >>> ...略
# >>> jsonschema 2.5.1 py35_0 defaults
# >>> jupyter-client 4.2.2 <pip>
# >>> jupyter-cms 0.5.0 <pip>
# >>> jupyter-core 4.1.0 <pip>
# >>> jupyter_client 4.2.2 py35_0 defaults
# >>> jupyter_cms 0.5.0 py35_0 y__sama
# >>> jupyter_core 4.1.0 py35_0 defaults
# >>> libsodium 1.0.3 0 defaults
# >>> ...略
これでpip freezeとconda listを併用することなくconda listのみでパッケージ管理できるはず(なん)です。
詳しい方がいらっしゃいましたら、コメントをいただければ幸いです。
参考
https://gist.github.com/aphlysia/d5fcee79ff81b8272faf
http://conda.pydata.org/docs/build_tutorials/pkgs.html
http://docs.anaconda.org/cli.html