Aug./04/2020 Updated by

Anaconda

Macでpython仮想環境を作成した場合にしておくべき設定


[Up] Japanese English
[重要]macOSの場合は、python仮想環境を作ってactivateしたとき、そのpython仮想環境のbin/ へのパスが環境変数PATHの先頭に設定されない。このため単に 'python', 'pyton3' とタイプして起動したときに想定外のバージョンが起動してしまうことがある。 → [対策]そのpython仮想環境がactivateされると自動的にPATH変数が設定されるように設定しておくべき。 以下の説明では、python仮想環境の名前を myenv と仮定する。
  1. python仮想環境 myenv を作成する
  2.     (base) % conda create -n myenv python=3.6 jupyter    
    
  3. python仮想環境 myenv に切り換える
  4.     (base) % conda activate myenv    
    
  5. python仮想環境myenvに切り替えたとき自動的に環境変数PATHが設定されるように、ファイルを2個作成する
  6.     (myenv) % cd $CONDA_PREFIX    
        (myenv) % mkdir -p ./etc/conda/activate.d    
        (myenv) % mkdir -p ./etc/conda/deactivate.d    
        (myenv) % touch ./etc/conda/activate.d/env_path.sh    
        (myenv) % touch ./etc/conda/deactivate.d/env_path.sh    
    

    ちなみに$CONDA_PREFIXの値は conda activate myenv した最に、 /Users/username/anaconda3/envs/myenv のような値に自動で設定されている。

  7. エディタで2つのファイルの内容を次のように変更する
  8. ${CONDA_PREFIX}/etc/conda/activate.d/env_path.sh
    #!/bin/zsh
    export PATH_BACK=$PATH
    export PATH=${CONDA_PREFIX}/bin:$PATH
    
    ${CONDA_PREFIX}/etc/conda/deactivate.d/env_path.sh
    #!/bin/zsh
    if [ -z "$PATH_BACK" ]; then
    else
        export PATH=$PATH_BACK
    fi
    
  9. python仮想環境myenv を一旦 deactivate してから、再び activateする。
  10.     (myenv) % conda deactivate    
        (base) % conda activate myenv    
        (myenv) % 
    
    コマンドラインで "python" や "python3" と指定すると、想定のバージョンのpythonが起動することがわかる。
        (myenv) % python    
        Python 3.6.10 |Anaconda, Inc.| (default, May  7 2020, 23:06:31) 
        [GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
        Type "help", "copyright", "credits" or "license" for more information.
        >>> exit()    
        (myenv) % python3    
        Python 3.6.10 |Anaconda, Inc.| (default, May  7 2020, 23:06:31) 
        [GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
        Type "help", "copyright", "credits" or "license" for more information.
        >>> exit()    
        (myenv) %