Anacondaで複数pythonバージョンの仮想環境を作る

異なるpythonのバージョンやソフトウェアライブラリを個別に管理できる環境を構築するため、仮想環境を作ってみた。やったことを記録しておかないと忘れるため、またqiitaに投稿します。

###Anaconda仮想環境を作成
まず、createコマンドでanacondaの仮想環境を作ります。
nameオプション.....環境名
python.....pythonのバージョンを指定

```
base) C:\Users\${your_username}>conda create --name anaconda_virtual_env python=3.6.7

```

すると、 certifi ,pip などのパッケージインストールから始まる。

```
Collecting package metadata (current_repodata.json): done
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\Users\cqe01\.conda\envs\anaconda_virtual_env

  added / updated specs:
    - python=3.8.7


The following NEW packages will be INSTALLED:

  certifi            pkgs/main/win-64::certifi-2020.12.5-py36haa95532_0
  pip                pkgs/main/win-64::pip-21.1.1-py36haa95532_0
  python             pkgs/main/win-64::python-3.6.7-h9f7ef89_2
  setuptools         pkgs/main/win-64::setuptools-52.0.0-py36haa95532_0
  sqlite             pkgs/main/win-64::sqlite-3.35.4-h2bbff1b_0
  vc                 pkgs/main/win-64::vc-14.2-h21ff451_1
  vs2015_runtime     pkgs/main/win-64::vs2015_runtime-14.27.29016-h5e58377_2
  wheel              pkgs/main/noarch::wheel-0.36.2-pyhd3eb1b0_0
  wincertstore       pkgs/main/win-64::wincertstore-0.2-py36h7fe50ca_0


Proceed ([y]/n)? y
```

###Anaconda仮想環境を起動する

仮想環境を起動する。Anaconda Promptの先頭が仮想環境名（次の例ではanaconda_virtual_env）に代わり、いま操作しているのがどの環境かわかる。

```
C:\Users\${your_username}>conda activate anaconda_virtual_env

(anaconda_virtual_env) C:\Users\${your_username}>
```
###Anaconda仮想環境にライブラリをインストールする
続いてライブラリを次々にインストールしていく。
仮想環境は、
 C:\Users\${your_username}\.conda\envs\anaconda_virtual_env
に保存されたようです。

```
(anaconda_virtual_env) C:\Users\${your_username}>conda install pandas=0.22.0
（中略）
(anaconda_virtual_env) C:\Users\${your_username}>conda install numpy=1.14.6
（中略）
(anaconda_virtual_env) C:\Users\${your_username}>conda install matplotlib=2.1.2
（中略）
(anaconda_virtual_env) C:\Users\${your_username}>conda install -c anaconda seaborn
（中略）
(anaconda_virtual_env) C:\Users\${your_username}>conda install -c conda-forge scikit-learn
（中略）
(anaconda_virtual_env) C:\Users\${your_username}>conda install -c conda-forge xgboost
（中略）
(anaconda_virtual_env) C:\Users\${your_username}>conda install -c conda-forge lightgbm
（中略）
(anaconda_virtual_env) C:\Users\${your_username}>conda install -c conda-forge pandas_profiling
（中略）
(anaconda_virtual_env) C:\Users\${your_username}>conda install -c conda-forge tqdm
（中略）
(anaconda_virtual_env) C:\Users\${your_username}>conda install -c conda-forge sqlalchamey
（中略）


```

最後にjupyterをインストールする。
```
(anaconda_virtual_env) C:\Users\${your_username}>conda install jupyter
```

jupyter入れると、パッケージがたくさんインストールさされる。
レスポンスは、こんな感じ。

```
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\Users\${your_username}\.conda\envs\pandas_book

  added / updated specs:
    - jupyter


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    argon2-cffi-20.1.0         |   py36h2bbff1b_1          49 KB
    async_generator-1.10       |   py36h28b3542_0          40 KB
    cffi-1.14.5                |   py36hcd4344a_0         223 KB
    decorator-5.0.9            |     pyhd3eb1b0_0          12 KB
    entrypoints-0.3            |           py36_0          12 KB
    importlib-metadata-3.10.0  |   py36haa95532_0          33 KB
    ipykernel-5.3.4            |   py36h5ca1d4c_0         184 KB
    ipython-7.16.1             |   py36h5ca1d4c_0        1017 KB
    jedi-0.17.0                |           py36_0         778 KB
    jinja2-3.0.0               |     pyhd3eb1b0_0         106 KB
    jupyter-1.0.0              |           py36_7           6 KB
    jupyter_core-4.7.1         |   py36haa95532_0          85 KB
    markupsafe-2.0.1           |   py36h2bbff1b_0          24 KB
    mistune-0.8.4              |   py36he774522_0          55 KB
    nbconvert-6.0.7            |           py36_0         497 KB
    notebook-6.4.0             |   py36haa95532_0         4.4 MB
    pandocfilters-1.4.3        |   py36haa95532_1          14 KB
    pygments-2.9.0             |     pyhd3eb1b0_0         721 KB
    pyrsistent-0.17.3          |   py36he774522_0          92 KB
    pywin32-227                |   py36he774522_1         5.6 MB
    pywinpty-0.5.7             |           py36_0          50 KB
    pyzmq-20.0.0               |   py36hd77b12b_1         393 KB
    terminado-0.9.4            |   py36haa95532_0          26 KB
    traitlets-4.3.3            |           py36_0         140 KB
    webencodings-0.5.1         |           py36_1          19 KB
    widgetsnbextension-3.5.1   |           py36_0         868 KB
    ------------------------------------------------------------
                                           Total:        15.2 MB

The following NEW packages will be INSTALLED:

  argon2-cffi        pkgs/main/win-64::argon2-cffi-20.1.0-py36h2bbff1b_1
  async_generator    pkgs/main/win-64::async_generator-1.10-py36h28b3542_0
  attrs              pkgs/main/noarch::attrs-21.2.0-pyhd3eb1b0_0
  backcall           pkgs/main/noarch::backcall-0.2.0-pyhd3eb1b0_0
  bleach             pkgs/main/noarch::bleach-3.3.0-pyhd3eb1b0_0
  cffi               pkgs/main/win-64::cffi-1.14.5-py36hcd4344a_0
  colorama           pkgs/main/noarch::colorama-0.4.4-pyhd3eb1b0_0
  decorator          pkgs/main/noarch::decorator-5.0.9-pyhd3eb1b0_0
  defusedxml         pkgs/main/noarch::defusedxml-0.7.1-pyhd3eb1b0_0
  entrypoints        pkgs/main/win-64::entrypoints-0.3-py36_0
  importlib-metadata pkgs/main/win-64::importlib-metadata-3.10.0-py36haa95532_0
  importlib_metadata pkgs/main/noarch::importlib_metadata-3.10.0-hd3eb1b0_0
  ipykernel          pkgs/main/win-64::ipykernel-5.3.4-py36h5ca1d4c_0
  ipython            pkgs/main/win-64::ipython-7.16.1-py36h5ca1d4c_0
  ipython_genutils   pkgs/main/noarch::ipython_genutils-0.2.0-pyhd3eb1b0_1
  ipywidgets         pkgs/main/noarch::ipywidgets-7.6.3-pyhd3eb1b0_1
  jedi               pkgs/main/win-64::jedi-0.17.0-py36_0
  jinja2             pkgs/main/noarch::jinja2-3.0.0-pyhd3eb1b0_0
  jsonschema         pkgs/main/noarch::jsonschema-3.2.0-py_2
  jupyter            pkgs/main/win-64::jupyter-1.0.0-py36_7
  jupyter_client     pkgs/main/noarch::jupyter_client-6.1.12-pyhd3eb1b0_0
  jupyter_console    pkgs/main/noarch::jupyter_console-6.4.0-pyhd3eb1b0_0
  jupyter_core       pkgs/main/win-64::jupyter_core-4.7.1-py36haa95532_0
  jupyterlab_pygmen~ pkgs/main/noarch::jupyterlab_pygments-0.1.2-py_0
  jupyterlab_widgets pkgs/main/noarch::jupyterlab_widgets-1.0.0-pyhd3eb1b0_1
  libsodium          pkgs/main/win-64::libsodium-1.0.18-h62dcd97_0
  m2w64-gcc-libgfor~ pkgs/msys2/win-64::m2w64-gcc-libgfortran-5.3.0-6
  m2w64-gcc-libs     pkgs/msys2/win-64::m2w64-gcc-libs-5.3.0-7
  m2w64-gcc-libs-co~ pkgs/msys2/win-64::m2w64-gcc-libs-core-5.3.0-7
  m2w64-gmp          pkgs/msys2/win-64::m2w64-gmp-6.1.0-2
  m2w64-libwinpthre~ pkgs/msys2/win-64::m2w64-libwinpthread-git-5.0.0.4634.697f757-2
  markupsafe         pkgs/main/win-64::markupsafe-2.0.1-py36h2bbff1b_0
  mistune            pkgs/main/win-64::mistune-0.8.4-py36he774522_0
  msys2-conda-epoch  pkgs/msys2/win-64::msys2-conda-epoch-20160418-1
  nbclient           pkgs/main/noarch::nbclient-0.5.3-pyhd3eb1b0_0
  nbconvert          pkgs/main/win-64::nbconvert-6.0.7-py36_0
  nbformat           pkgs/main/noarch::nbformat-5.1.3-pyhd3eb1b0_0
  nest-asyncio       pkgs/main/noarch::nest-asyncio-1.5.1-pyhd3eb1b0_0
  notebook           pkgs/main/win-64::notebook-6.4.0-py36haa95532_0
  packaging          pkgs/main/noarch::packaging-20.9-pyhd3eb1b0_0
  pandoc             pkgs/main/win-64::pandoc-2.12-haa95532_0
  pandocfilters      pkgs/main/win-64::pandocfilters-1.4.3-py36haa95532_1
  parso              pkgs/main/noarch::parso-0.8.2-pyhd3eb1b0_0
  pickleshare        pkgs/main/noarch::pickleshare-0.7.5-pyhd3eb1b0_1003
  prometheus_client  pkgs/main/noarch::prometheus_client-0.10.1-pyhd3eb1b0_0
  prompt-toolkit     pkgs/main/noarch::prompt-toolkit-3.0.17-pyh06a4308_0
  prompt_toolkit     pkgs/main/noarch::prompt_toolkit-3.0.17-hd3eb1b0_0
  pycparser          pkgs/main/noarch::pycparser-2.20-py_2
  pygments           pkgs/main/noarch::pygments-2.9.0-pyhd3eb1b0_0
  pyrsistent         pkgs/main/win-64::pyrsistent-0.17.3-py36he774522_0
  pywin32            pkgs/main/win-64::pywin32-227-py36he774522_1
  pywinpty           pkgs/main/win-64::pywinpty-0.5.7-py36_0
  pyzmq              pkgs/main/win-64::pyzmq-20.0.0-py36hd77b12b_1
  qtconsole          pkgs/main/noarch::qtconsole-5.0.3-pyhd3eb1b0_0
  qtpy               pkgs/main/noarch::qtpy-1.9.0-py_0
  send2trash         pkgs/main/noarch::send2trash-1.5.0-pyhd3eb1b0_1
  terminado          pkgs/main/win-64::terminado-0.9.4-py36haa95532_0
  testpath           pkgs/main/noarch::testpath-0.4.4-pyhd3eb1b0_0
  traitlets          pkgs/main/win-64::traitlets-4.3.3-py36_0
  typing_extensions  pkgs/main/noarch::typing_extensions-3.7.4.3-pyha847dfd_0
  wcwidth            pkgs/main/noarch::wcwidth-0.2.5-py_0
  webencodings       pkgs/main/win-64::webencodings-0.5.1-py36_1
  widgetsnbextension pkgs/main/win-64::widgetsnbextension-3.5.1-py36_0
  winpty             pkgs/main/win-64::winpty-0.4.3-4
  zeromq             pkgs/main/win-64::zeromq-4.3.3-ha925a31_3
  zipp               pkgs/main/noarch::zipp-3.4.1-pyhd3eb1b0_0


Proceed ([y]/n)?

```
スクリーンショットを撮影できませんでしたが、
パッケージインストール終わると、wundowsからpython.exeを実行していいか？聞かれます。

補完機能をインストールしたいので、それが入っているjupyter extension機能もインストールしておく。

```
conda install -y -c conda-forge jupyter_contrib_nbextensions
```

コード補完に必要なpthonの language serverをインストールする

```
conda install -c conda-forge python-language-server
```

###Anaconda仮想環境を停止する

起動コマンドのactivateに、反対の意味の接頭辞"de"をつけた、deactivateコマンドで停止する。

```
(anaconda_virtual_env) C:\Users\${your_username}>conda deactivate
```

###Anaconda仮想環境を確認する
```
(base) C:\Users\${your_username}>conda info -e
base                  *  C:\ProgramData\Anaconda3
pandas_book              C:\Users\${your_username}\.conda\envs\pandas_book

```
###Anacondaの不要になったパッケージやキャッシュを削除

conda clean コマンドを利用すると、使われていないパッケージやキャッシュを削除することができます。 削除できるものは全て削除するのが良い。次のコマンドにより500 Mbyte以上削除できた。

```
conda clean -all
```



## Anaconda仮想環境を簡単に切り替えられるようにする
（ https://www.servernote.net/article.cgi?id=anaconda-jupyter-notebook-on-myenv より引用）

```
(base) C:\Users\${your_username}>conda info -e
# conda environments:
#
base                  *  C:\ProgramData\Anaconda3
pandas_book              C:\Users\${your_username}\.conda\envs\pandas_book
```

## kernel listに追加し、jupyter notebookのchange kernelで選べるようにする
（https://qiita.com/tomochiii/items/8b937f15c79a0c3eae0e　より引用）

```
# 利用可能なカーネルの表示
(base) C:\Users\${your_username}>jupyter kernelspec list
Available kernels:
  python3    C:\ProgramData\Anaconda3\share\jupyter\kernels\python3
```
仮想環境をアクティベートした状態で追加する。

```
(base) C:\Users\${your_username}>conda activate pandas_book
(pandas_book) C:\Users\${your_username}>ipython kernel install --user --name=pandas_book --display-name=pandas_book
```

## 逆に追加したカーネルを削除する方法
　https://qiita.com/tomochiii/items/8b937f15c79a0c3eae0e　にあります。


### baseを起動して、カーネルモジュールをインストール

仮想環境の切り替えを相互に行うため、base仮想環境と自分の仮想環境に上記モジュールが必要になる。

スタートメニュー→Anadonda3 64-bit→Jupyter Notebook(64bit)で起動されるのはbase環境のJupyterです。

Anaconda Promptを立ち上げ、カーネルをbaseとmyenvに両方に入れます。

```
(base) C:\Users\${your_username}>conda activate base

(base) C:\Users\${your_username}>pip install jupyter environment_kernels

Collecting environment_kernels
  Using cached environment_kernels-1.1.1.tar.gz (28 kB)
Building wheels for collected packages: environment-kernels
  Building wheel for environment-kernels (setup.py) ... done
  Created wheel for environment-kernels: filename=environment_kernels-1.1.1-py3-none-any.whl size=30797 sha256=37a060aa3ca1829753a9d55a23df787c9d8341c52c851268b2e215c8742ffa11
  Stored in directory: c:\users\${your_username}\appdata\local\pip\cache\wheels\e0\be\3e\601232ccfabd4e923027463dd67df3c263a6a91aace930a34d
Successfully built environment-kernels
Installing collected packages: environment-kernels
Successfully installed environment-kernels-1.1.1

(base) C:\Users\${your_username}>conda deactivate
```

## デフォルト仮想環境baseでJupyter初期設定ファイルを生成・編集する
まず仮想環境baseで、Jupyter初期設定ファイル（jupyter_notebook_config.py）を生成する。

```
conda activate base
 
(base) C:\Users\${your_username}>jupyter notebook --generate-config
 
Writing default config to: C:\Users\${your_username}\.jupyter\jupyter_notebook_config.py
```

作成されたJupyter初期設定ファイル（jupyter_notebook_config.py）をatomやterapadなどのテキストエディタで開き、次の項目を追加する。${user_username}は自分のPCに合わせて適宜変更してください。

#### c.NotebookApp.kernel_spec_manager_classに、先ほどインストールしたモジュール(environment-kernels)のカーネルマネージャを指定。

```
c.NotebookApp.kernel_spec_manager_class = 'environment_kernels.EnvironmentKernelSpecManager'
```
### c.EnvironmentKernelSpecManager.conda_env_dirsに　仮想環境の保存先フォルダを指定

```
c.EnvironmentKernelSpecManager.conda_env_dirs = ['C:\Users\${ure_username}\.conda\envs\']
```

![スクリーンショット 2021-06-01 095424.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554997/162e6552-b713-3a1c-2ad0-42b2980d1dab.png)

各仮想環境のJupyterでカーネル操作できるよう、各仮想環境に
ipykernelのインストール

```
C:\Users\${ure_username}\.conda\envs\${your_env_name}> conda install notebook ipykernel
```

以上で、jupyter notebookで仮想環境が切り替えられるようになった。