Anaconda 가상 환경을 전환하는 Simple is Best 방법

배경



일에서 사용하고 있는 라이브러리의 일부가 Python2계 밖에 대응하고 있지 않고, 2계와 3계를 각각 인스톨 해 환경 변수 PY_PYTHON 를 재기록하는 것으로 전환을 실시하고 있었다.
그리고 이번, 3계 중에서도 개발 환경마다 모듈의 버전을 나누고 싶다는 것으로 Anaconda를 도입했다.
그러나 Anaconda에서는 지금까지의 방법을 이용할 수 없게 되기 때문에 아래의 조건을 충족하도록 새로운 방법을 생각했다.
  • 기본은 동일한 가상 환경에서 좋지만 가상 환경을 전환 할 수 있습니다. (전환 빈도는 그리 높지 않음)
  • python 프로그램을 데이터 처리에 이용하고 싶기 때문에, 커멘드 프롬프트로부터 인수등을 붙여도 호출할 수 있다.
  • 개발 환경이 연결된 가상 환경도 전환됩니다.

  • 이상의 일을 할 수 있도록 개발 환경의 설정을 변경하거나, 쉐반적인 일을 해 보거나 시행착오했지만, 예상치 못한 심플한 방법이 있었기 때문에 기사를 썼다.

    가정 환경



    다음 환경에서 이번 방법은 검증했다. (환경에 따라 화면이나 커맨드는 바뀌지만 다른 OS, 통합 개발 환경에도 응용 가능하다.)
  • Windows 10 Pro 16299
  • Anaconda3 5.1.0
  • Visual Studio Code 1.20.1 (ms-python.python 2018.1.0 installed)

  • 이미 Anaconda, VS Code의 인스톨, 구축은 완료하고 있는 것으로 한다.

    방법



    Anaconda에서 만든 가상 환경의 접합을 만들고 PATH
    을 통해서, junction을 재기록하는 것만으로 커멘드상의 python이 강제적으로 바꿀 수 있다. 또 개발 환경에서 python 인터프리터를 설정해야 할 경우도 그 정션을 지정해 두면 동시에 전환할 수 있다. (통합 개발 환경이 Anaconda 등 가상 환경에 대응하고 있는 경우는 적절히 설정하면 좋다)

    "py2"와 "py3"이라는 가상 환경이 작성되었습니다.

    C:\Users\abmolniya\Anaconda3\CurrentPy에서 C:\Users\abmolniya\Anaconda3\envs\py2에 대한 접합을 만듭니다.


    환경 변수에 정션을 추가합니다.


    명령 프롬프트에서 python을 지정하면 설정한 가상 환경의 python이 호출되었습니다.


    VS Code의 설정 파일 python.pythonPath의 패스를 작성한 정션내의 python.exe를 지정하면 연동해 개발 환경의 python도 바뀐다.


    전환 단순화



    이전 장의 junction의 전환을 간단하게 실시하기 위해 배치 파일을 작성했으므로 어떻게 기록해 둔다. (Anaconda3를 기본 설정으로 설치한 경우 아래 코드로 잘 작동합니다.)

    AnaPython.bat
    :init_bat
    @echo off
    setlocal enabledelayedexpansion
    cd /d %USERPROFILE%\Anaconda3
    
    :get_currentpy
    for /f "usebackq tokens=5" %%a in (`dir ^| findstr "\<\<JUNCTION\>\>" ^| findstr "\<CurrentPy\>"`) do @set result=%%a
    if not "%result%"=="" ( call :get_currentpy_name %result%)
    echo 現在の仮想環境は「%result%」です。
    set /P input=変更しますかy/n:
    if /i not "%input%"=="y" ( goto finish_bat)
    
    :select_currentpy
    cls
    echo アクティブにする仮想環境の番号を入力してください
    set /A i=1
    for /f "usebackq" %%a in (`dir /b envs`) do (
        echo !i! ← %%a
        set envs[!i!]=%%a
        set /A i=i+1
    )
    set /P input=if /i "!envs[%input%]!"=="" ( goto select_currentpy)
    
    :set_currentpy
    rmdir CurrentPy
    mklink /J CurrentPy envs\!envs[%input%]!
    
    :finish_bat
    timeout /T 3
    goto :EOF
    
    :***Subroutine***
    :get_currentpy_name
    set result=%~n1
    set result=%result:~-261,-1%
    
    

    위 프로그램을 C:\Users\abmolniya\Anaconda3\AnaPython.bat에 저장하면 명령 프롬프트에서 열려는 바로 가기 (C:\Windows\System32\cmd.exe /k C:\Users\abmolniya\Anaconda3\AnaPython.bat)를 만듭니다.


    이 만든 바로 가기를 마우스 오른쪽 버튼으로 클릭하고 "작업 표시 줄에 고정"을 선택하면 언제든지 전환이 간단합니다.

    후기



    배경에 쓴 것 같은 상황의 사람은 그 밖에도 있다고 생각해, 인터넷으로 검색을 걸었지만, 전혀 히트하지 않았다. 유닉스의 쉐반적인 것이 가능하면 더 편하다고 생각하지만, 아무것도 생각하지 않고 이런 방법이 되었다. 뭔가 더 좋은 방법이 있다면 알려주세요.

    좋은 웹페이지 즐겨찾기