2019/12/25 Updated by

Anaconda

Conda環境に関する注意事項


[Up] Japanese English

conda環境中でcondaコマンドを使用する場合の注意 (Dec/25/2019記)

[Windows10, Anaconda 3 ( conda version 4.8.0 ) で Dec/25/2019 に確認]。

conda環境中でcondaコマンドを使用すると、起動するpythonのversionが勝手に書き換えられる場合がある。 condaで切替可能なpython環境で作業中にconda コマンドを使用した場合は、 そのpython環境を一旦 deactivateしてから、再び activate しなければならない。

そうしないと、想定外のバージョンのpythonが起動するなど、おかしな状況が起きることがある。 condaコマンドの使用によりPATH変数が変更されるのが原因である。 [Windows10, Anaconda 3 ( conda version 4.8.0 ) で Dec/25/2019 に確認]。

Windows10 に Anaconda3 が D:\sys\anaconda3 にインストールされている時、 conda環境で動作する conda コマンドの実体は C:\sys\anaconda3\condabin\conda.bat である。この中で PATH 環境変数の先頭に Anaconda3 標準環境へのパスを追加している。

状況を再現するための操作例
  (base) C:\Users\nitta> conda create -n work python=3.6 jupyter
  (base) C:\Users\nitta> conda activate work
  (work) C:\Users\nitta> python --version
  Python 3.6.9 :: Anaconda, Inc.     ← pythonのversion 3.6.9
  (work) C:\Users\nitta> conda install -c conda-forge ffmpeg
  (work) C:\Users\nitta> python --version
  Python 3.7.3 :: Anaconda, Inc.     ← pythonのversionが 3.7.3 に変わった
  (work) C:\Users\nitta> conda deactivate
  (base) C:\Users\nitta> conda activate work
  (work) C:\Users\nitta> python --version
  Python 3.6.9 :: Anaconda, Inc.     ← 元通り python 3.6.9 が動く

原因追求作業時のメモ

[個人的メモ](Dec/25/2019) pytorch のinstall後、'import torch'がうまく動作しない。 よくみるとreinforce環境で pythonのバージョンが3.6ではなく3.7.3が動いている。 環境名をdqnに変更して、作り直してみる。
環境を新しく作ったときは python 3.6 が動くが、 pipやcondaでライブラリをインストールしていくうちに途中で、 python 3.7.3 が動くように変更されてしまう。何故? → ffmpeg が原因だった。

(base) C:\Users\nitta> conda create -n dqn python=3.6 jupyter
(base) C:\Users\nitta> conda activate dqn
(dqn) C:\Users\nitta> python --version
Python 3.6.9 :: Anaconda, Inc.
(dqn) C:\Users\nitta> pip install gym
(dqn) C:\Users\nitta> python --version
Python 3.6.9 :: Anaconda, Inc.
(dqn) C:\Users\nitta> pip install matplotlib
(dqn) C:\Users\nitta> python --version
Python 3.6.9 :: Anaconda, Inc.
(dqn) C:\Users\nitta> pip install JSAnimation
(dqn) C:\Users\nitta> python --version
Python 3.6.9 :: Anaconda, Inc.
(dqn) C:\Users\nitta> pip uninstall pyglet -y
(dqn) C:\Users\nitta> python --version
Python 3.6.9 :: Anaconda, Inc.
(dqn) C:\Users\nitta> pip install pyglet==1.2.4
(dqn) C:\Users\nitta> python --version
Python 3.6.9 :: Anaconda, Inc.
(dqn) C:\Users\nitta> conda install -c conda-forge ffmpeg
(dqn) C:\Users\nitta> python --version
Python 3.7.3 :: Anaconda, Inc.     ← ここでversionが変わっている
少し古いffmpeをインストールするように変更してみる。
conda install -c menpo ffmpeg
(base) C:\Users\nitta> conda create -n work1 python=3.6 jupyter
(base) C:\Users\nitta> conda activate work1
(work1) C:\Users\nitta> python --version
Python 3.6.9 :: Anaconda, Inc.
(work1) C:\Users\nitta> conda install -c mempo ffmpeg
(work1) C:\Users\nitta> python --version
Python 3.7.3 :: Anaconda, Inc.
(work1) C:\Users\nitta> conda deactivate
(base) C:\Users\nitta> conda remove -n work1 --all
環境変数PATH が書き換えられていないか調べる。
(base) C:\Users\nitta> conda create -n dqn python=3.6 jupyter
(base) C:\Users\nitta> conda activate dqn
(dqn) C:\Users\nitta> python --version
Python 3.6.9 :: Anaconda, Inc.
(dqn) C:\Users\nitta> echo %PATH%
D:\sys\Anaconda3\lib\site-packages\pywin32_system32;
D:\sys\Anaconda3\envs\dqn;
...
(dqn) CD:\sys\Anaconda3\envs\dqn\python --version
Python 3.6.9 :: Anaconda, Inc.              ← 正しく3.6が起動している
(dqn) C:\Users\nitta> conda install -c mempo ffmpeg
(dqn) C:\Users\nitta> python --version
Python 3.7.3 :: Anaconda, Inc.
(dqn) C:\Users\nitta> echo %PATH%
D:\sys\Anaconda3\lib\site-packages\pywin32_system32;
D:\sys\Anaconda3;
D:\sys\Anaconda3\Library\mingw-w64\bin;
D:\sys\Anaconda3\Library\usr\bin;
D:\sys\Anaconda3\Library\bin;
D:\sys\Anaconda3\Library\Scriptsbin;
D:\sys\Anaconda3\bin;                ← 余分なPATHが前に追加されている
D:\sys\Anaconda3\lib\site-packages\pywin32_system32;
D:\sys\Anaconda3\envs\dqn;    ← これを前に持ってくればよいはず
...
(dqn) C:\Users\nitta> where python
D:\sys\Anaconda3\python.exe
D:\sys\Anaconda3\envs\dqn\python.exe
C:\Users\nitta\AppData\Local\Microsoft\WindowsApps\python.exe
(dqn) C:\Users\nitta> conda deactivate
(base) C:\Users\nitta> conda remove -n dqn --all
D:\sys\Anaconda3\condabin\conda.bat の中でPATHを設定している部分がある。 PATHに追加されている部分が、この動きと同じだ。 condaコマンドの使用によって、(anaconda標準環境のバイナリを動かすための)余分なパスが環境変数 PATH の先頭に付け加わって、悪さをしているわけか。
@SET PATH=!_sysp!;!_sysp!\Library\mingw-w64\bin;!_sysp!\Library\usr\bin;!_sysp!\Library\bin;!_sysp!\Scripts;!_sysp!\bin;%PATH%
なるほど、ある環境にcondaを使ってffmpegをインストールしたら、PATHが変わる。 そこで、一旦deactivate してから、再度環境をactivateすると正しく設定される、ということか。
(dqn) C:\Users\nitta> where python
D:\sys\Anaconda3\python.exe
D:\sys\Anaconda3\envs\dqn\python.exe
C:\Users\nitta\AppData\Local\Microsoft\WindowsApps\python.exe
(dqn) C:\Users\nitta>conda deactivate
(base) C:\Users\nitta>where python
D:\sys\Anaconda3\python.exe
C:\Users\nitta\AppData\Local\Microsoft\WindowsApps\python.exe
(base) C:\Users\nitta>conda activate dqn
(dqn) C:\Users\nitta>where python
D:\sys\Anaconda3\envs\dqn\python.exe   ← 意図した通りのversionのPythonが動く
D:\sys\Anaconda3\python.exe
C:\Users\nitta\AppData\Local\Microsoft\WindowsApps\python.exe