やっほー! こんにちはー!
物理好きのオザキ(@sena0801masato)です。
今回は、Anacondaを使った仮想環境を保存・再構築、複製についてお話しようと思います。
(Anacondaに限らず、Minicondaでもcondaがインストールされているため、仮想環境を複製できると思います。)
試行錯誤した部分もあるので、分かる方いたら教えて欲しいです。
この記事の対象者
- Anacondaで仮想環境が使える
- 仮想環境を保存しておきたい
- 同じコンピュータで仮想環境を複製したい
- 異なるコンピュータで仮想環境を再構築したい
- Anacondaのナビゲーションアプリ(マウスによる視覚的な操作)を使わず、ターミナル(コマンドによる操作)を使いたい
Anacondaの仮想環境の使い方を確認したい人は、【初心者向け】Anacondaで仮想環境を作ってみるを確認してください。
最初は、仮想環境の状態(インストールされているライブラリのバージョンなど)をファイルに出力して保存し、そのファイルをもとに再構築する方法を2種類紹介します。方法1、方法2
次は、ファイルに出力せず、複製する方法を紹介します。その節へ
最後は、root環境を複製するときだけ使える方法を紹介します。その節へ
基本的に、保存・再構築、複製したい環境を起動して実行してください。
仮想環境の起動は以下のコマンドです。
$ source activate 仮想環境名
(Windowsならsourceは必要ない)
codna envを使う方法
仮想環境をファイルに出力して保存
仮想環境の状態をyaml1というデータ形式(拡張子は.yml)で保存します。
今いるディレクトリに保存されるので、保存したい場所に移動してから実行してください。
$ conda env export > ファイル名.yml
ファイルとして保存したくないけれど、もしファイルとして出力したとき、どのような内容かをターミナルで確認したい場合は下を実行してください。
$ conda env export
解決方法はroot環境と指定して書きます。root環境をyamlファイルに出力しようとしたときに出たエラーと解決法
root環境をyamlファイルに出力しようとしたとき、以下のエラーが出ました。
CondaEnvException: Conda Env Exception: Unable to determine environment
Please re-run this command with one of the following options:
* Provide an environment name via --name or -n
* Re-run this command inside an activated conda environment.
$ conda env export -n root > root_env.yml
仮想環境をファイルをもとに再構築
さきほど出力したyamlファイルをもとに仮想環境を再構築します。
$ conda env create -n 新たな環境名 -f ファイル名.yml
一瞬Solving package specifications:
と出力されて、何か選択を求められているように見えることもあります。しかし、ライブラリが多くて処理が重いだけで、放置して大丈夫です。
-nを--nameに、-fを--fileにしても実行できます。
ちなみに、yamlファイル(.yml)に出力して再構築しましたが、テキストファイル(.txt)にしても正常に再構築できます。理由は分かりません。
解決法は出力したyamlファイルを開き、2つのライブラリを消しました。root環境を再構築しようとしたときに出たエラーと解決法
root環境を再構築したとき、以下のエラーが出ました。
InstallError: Error: 'conda' can only be installed into the root environment
- conda=4.3.21=py36_0
- conda-env=2.6.0=0
ベースのroot環境と再構築したroot環境のライブラリの違い
ベースのroot環境と再構築したroot環境で、それぞれconda list
を実行してライブラリを比較しました。すると再構築したroot環境の方にvc:14-0
というライブラリが余分に入っていました。これが何をするライブラリなのか、よく分かりませんでした。
この文はymlで再構築・削除しても、txtで再構築・削除しても出ました。root環境を再構築したとき、再構築したroot環境を削除したときに出力されたエラーっぽい文
root環境を再構築したとき、再構築したroot環境を削除したときに出力されたエラーっぽい文を紹介します。
INFO menuinst_win32:__init__(182): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\Owner\Anaconda3\envs\root_env_yml', env_name: 'root_env_yml', mode: 'None', used_mode: 'user'
しかし、ちゃんと環境を再構築したり削除したりできたので、これが何を意味するのか分かりませんでした。
condaを使う方法
仮想環境をファイルに出力して保存
仮想環境の状態をテキストファイル(拡張子は.txt)で保存します。
今いるディレクトリに保存されるので、保存したい場所に移動してから実行してください。
$ conda list --export > ファイル名.txt
または
$ conda list --explicit > ファイル名.txt
ファイルとして保存したくないけれど、もしファイルとして出力したとき、どのような内容かをターミナルで確認したい場合は下を実行してください。
$ conda list --export
または
$ conda list --explicit
--exportと--explicitの違いはライブラリの表記の違い
--exportと--explicitの違いは出力されるファイルでのライブラリの表記が違います。
例として_licenseライブラリをあげます。
--exportにすると _license=1.1=py36_1
--explicitにすると https://repo.continuum.io/pkgs/free/win-64/_license-1.1-py36_1.tar.bz2
このように表記に違いがあるだけです。
仮想環境をファイルをもとに再構築
さきほど出力したテキストファイルをもとに仮想環境を再構築します。
$ conda create -n 環境名 -f ファイル名.txt
-nを--nameに、-fを--fileにしても実行できます。
なぜか再構築ができなかったエラーの紹介
私の場合、なぜか再構築ができませんでした。
$ conda create -n 環境名 -f ファイル名.txt
Fetching package metadata ...........
PackageNotFoundError: Package missing in current win-64 channels:
- ファイル名.txt
ちなみに、テキストファイル(.txt)にして保存しましたが、yamlファイル(.yml)にしても正常に保存できます。理由は分かりません。
どちらにしても私の場合は再構築できませんでした。
仮想環境を複製(ファイルに出力しない)
ファイルに保存して再構築という方法ではなく、直接的に環境を複製する方法を紹介します。
$ conda create -n 新しい環境名 --clone 複製したいベースの環境名
実行した例
$ conda create -n test_clone --clone py36_base
Source: C:\Users\Owner\Anaconda3\envs\py36_base
Destination: C:\Users\Owner\Anaconda3\envs\test_clone
Packages: 8
Files: 7
#
# To activate this environment, use:
# > activate test_clone
#
# To deactivate this environment, use:
# > deactivate test_clone
#
# * for power-users using bash, you must source
#
しかし、root環境を複製するときも、複製したroot環境を削除したときも、以下のようなエラーっぽい文が出ました。エラーが起こりそうでオススメしません。root環境の直接的な複製
root環境も複製できそうです。複製できないライブラリが表示されますが、そのまま実行されます。
The following packages cannot be cloned out of the root environment:
- conda-4.3.21-py36_0
- conda-env-2.6.0-0
Packages: 178
Files: 117
(以下略)
INFO menuinst_win32:__init__(182): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\Owner\Anaconda3\envs\test_root_clone', env_name: 'test_root_clone', mode: 'None', used_mode: 'user'
root環境の複製
root環境にある全部のライブラリを新たに作る仮想環境にインストールするというニュアンスで、root環境を複製します。
$ conda create -n 新しい環境名 anaconda
root環境を複製しつつ、pythonのバージョンやライブラリのバージョンを細かく指定することもできます。
$ conda create -n 新しい環境名 python=3.6 anaconda
どちらもanacondaと書いた部分を、他の仮想環境名にしても動作しません。
ここでもエラーっぽい文が出力されました。しかし、複製はできるようです。実行した例
Fetching package metadata ...........
Solving package specifications: .
Package plan for installation in environment C:\Users\Owner\Anaconda3\envs\root_anaconda:
The following NEW packages will be INSTALLED:
_license: 1.1-py36_1
(インストールするライブラリの一覧を省略)
Proceed ([y]/n)? y
INFO menuinst_win32:__init__(182): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\Owner\Anaconda3\envs\root_anaconda', env_name: 'root_anaconda', mode: 'None', used_mode: 'user'
#
# To activate this environment, use:
# > activate root_anaconda
#
# To deactivate this environment, use:
# > deactivate root_anaconda
#
# * for power-users using bash, you must source
#
INFO menuinst_win32:__init__(182): Menu: name: 'Anaconda${PY_VER} ${PLATFORM}', prefix: 'C:\Users\Owner\Anaconda3\envs\root_anaconda', env_name: 'root_anaconda', mode: 'None', used_mode: 'user'
ベースのroot環境と再構築したroot環境のライブラリの違い
ベースのroot環境と再構築したroot環境で、それぞれconda list
を実行してライブラリを比較しました。すると再構築したroot環境の方にvc:14-0
というライブラリが余分に入っていました。これが何をするライブラリなのか、よく分かりませんでした。
まとめ
ここまで読んでいただきありがとうございました。
これで仮想環境を保存・再構築、複製することができるようになりました。
しかし、まだ不明確な部分があります。
conda envで保存・再構築ができるから大丈夫といえば大丈夫ですが、condaではまったく再構築ができない問題を解決したいです。
また、root環境に関する操作でエラーっぽい文が出るのも心配です。
このように分からないけれど動くから放置している部分があるので、今後はそこを詰めていこうと思います。
ではでは!
参考文献
Anacondaのcondaコマンドによる仮想環境の使い方のまとめ
conda環境の保存と再構築の仕方
Anacondaの環境をコピーする
公式マニュアル
[Python]Anacondaで仮想環境を作る
-
データ構造(リストとか数字という情報)を文字列に変換しないで保持できるデータ形式のこと。
JSONやCSVと同じようなもので、拡張子はymlが一般的。 ↩