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 --allD:\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