Python 작업공간 설정 방법

TL;DR: 이 강좌에서 충돌 없이 여러 개의 Python 버전과 도구를 설치하는 방법을 가르쳐 드리겠습니다.
지난 5년 동안 나는 파이톤을 사용해 왔다.처음에는 학술과 여가 취미였고, 그 다음은 직업이었다.서로 다른 파이톤 버전에 여러 항목이 있다는 것이 줄곧 흔히 볼 수 있는 일이다.어떤 언어를 사용하든지 서로 다른 버전의 프로젝트를 겨냥하는 것은 악몽일 수 있다.파이썬이라고 해도 다를 게 없어요.사실은 상황이 더 나쁘다.예를 들어, 더 이상 지원되지 않음에도 불구하고 일부 라이브러리는 Python 2에만 적용됩니다.다행히도, 몇 가지 도구가 서로 다른 파이썬 버전을 빈틈없이 처리하는 데 도움을 줄 수 있다.
이 설명서에서는 Linux를 중점적으로 소개하지만, MacOS에 쉽게 적응할 수 있습니다.사실, 나는 MacBook 한 대가 일하고 있으며, 같은 절차를 따라 나의 작업 구역을 설정하고 있으며, 조금만 수정하면 된다.그 밖에 저는 zsh을 기본 셸으로 사용하지만 이 안내서도 bash에 적용됩니다.
따라서 다음은 Python 작업공간을 설정하는 방법입니다.

첫걸음요구 사항 정의
실제 설정에 들어가기 전에, 가장 좋은 설정을 정의하는 데 시간이 좀 걸릴 것입니다.나에게 있어서 그것은 이렇게 보인다.
  • 은 파이톤 2.7+, 파이톤 3.6, 파이톤 3.7, 파이톤 3.8을 설치해야 한다.
  • Python 3.8은 기본 버전이어야 합니다.
  • 버전을 쉽게 전환할 수 있어야 합니다.
  • 제가 지정한 기본python 버전으로 ipython 을 시작해야 합니다.
  • 내가 사용하는
  • 의존 도구 pipenvpoetry은 모든 Python 3+버전과 함께 사용해야 한다.

  • 두 번째 단계.여러 파이썬 버전 설치 및 구성
    여러 버전을 설치하고 전환하려면 pyenv 을 사용합니다.pyenv은 다음과 같은 이점을 제공합니다.
  • 은 사용자마다 전역 Python 버전을 변경할 수 있도록 합니다.
  • 은 항목별 파이썬 버전을 지원합니다.
  • 모든 컨텐츠는 $HOME 디렉토리에 설치됩니다.이것은 기본 Python 설치를 파괴할 위험이 없다는 것을 의미합니다.
  • pypy, anaconda, CPython, Stackless-Python 및 기타를 지원합니다!
  • pyenv을 제외한 pyenv-virtualenv 플러그인을 사용하여 가상 환경을 관리합니다.
    pyenv 및 플러그 인 설치
    작년 이래로 나는 맥OS와 리눅스에서 Homebrew을 사용해 왔다.따라서 다음 절차는 나에게 있어서 알 수 없는 운영체제이다.
    brew install pyenv
    brew install pyenv-virtualenv
    

    가상 vs 디렉터리 만들기
    모든 항목은 반드시 자신의 가상 환경이 있어야 한다.이런 방식을 통해 우리는 여러 항목을 한 번에 처리할 수 있으며, 그들의 의존 관계에 충돌을 도입하지 않는다.나는 나의 모든 Virtual NV를 $HOME/.ve 디렉터리에 저장한다.
    mkdir -p $HOME/.ve
    
    폴더를 만든 후 경로를 ~/.zshrc에 추가합니다. (bash 사용자는 ~/.bashrc에 추가합니다.)
    cat <<"EOT" >> ~/.zshrc
    # pyenv config
    # Set virtualenv dir
    export WORKON_HOME=~/.ve
    # Initialize pyenv
    if command -v pyenv 1>/dev/null 2>&1; then
      eval "$(pyenv init -)"
    fi
    # Initialize pyenv-virtualenv
    eval "$(pyenv virtualenv-init -)"
    EOT
    
    변수 WORKON_HOMEpipenv where to place your virtual environments에게 알려준다.
    완료되면 새 창을 닫고 열거나 다음 명령을 실행하여 셸을 다시 시작할 수 있습니다.
    exec $SHELL
    

    필요한 모든 Python 버전을 설치합니다.
    PY_DEFAULT=3.8.5
    PY_VERSIONS=( $PY_DEFAULT 3.7.8 3.6.11 2.7.18 )
    
    for py_version in "${PY_VERSIONS[@]}"
    do
        echo -e "Installing Python $py_version...\n\n"
        # Install specific Python version
        pyenv install $py_version
    done
    

    세 번째.설치 도구
    의존 관계 관리에 대해 나는 두 가지 다른 도구를 사용한다. 그것이 바로 pipenv 과 최근의 poetry 이다.결국 나는 두 가지가 필요할 때 poetry을 선택할 수 있다.
    그 밖에 저는 주피터 노트북에 의존하여 빠른 데이터 분석 임무를 완성합니다.그리고 ipython 은 특이한 파이톤 해석기로서
    다시 한 번 말하지만, 나는 전 세계 시설을 오염시키고 싶지 않다.이러한 상황을 피하기 위해서, 우리는 pyenv-virtualenv을 사용하여 이 도구들을virtualenvs로 만들 수 있습니다.
    Jupyter,pipenv, 시를 설치합시다.
    # Creating tools3 venv
    pyenv virtualenv $PY_DEFAULT tools3
    
    # Activating
    pyenv activate tools3
    
    # Upgrade pip
    pip install --upgrade pip
    
    # Install Jupyter
    pip install jupyter
    
    # Install Jupyter extensions
    pip install jupyter_nbextensions_configurator rise
    jupyter nbextensions_configurator enable --user
    
    # pipenv
    pip install pipenv
    
    # poetry (using preview version to fix a bug in the 1.0.10 version)
    pip install --pre poetry -U
    
    pipenv을 사용하는 경우 스크립트가 설치되었는지 확인합니다.다음과 같이 셸에 추가할 수 있습니다.
    echo 'eval "$(pipenv --completion)"' >> ~/.zshrc
    
    poetry의 경우:
    # Oh-My-Zsh
    mkdir -p $ZSH/plugins/poetry
    poetry completions zsh > $ZSH/plugins/poetry/_poetry
    
    완성은 oh-my-zsh 플러그인이기 때문에, ~/의 플러그인 목록에 시를 추가해야 합니다.zshrc 파일입니다.
    plugins(
        poetry
        ...
    )
    
    sed을 사용하면 다음과 같은 이점을 얻을 수 있습니다.
    sed -i.bak 's/^plugins=(\(.*\)/plugins=(poetry\n        \1/' ~/.zshrc
    
    현재 우리는 poetry을 설정하여 ~/.ve 내부에virtualenvs를 pipenv처럼 만들어야 한다.
    echo 'export POETRY_VIRTUALENVS_PATH=$WORKON_HOME' >> ~/.zshrc
    

    기타 시가 구성
    또 하나, pipenv의 기본 동작은 .env에 정의된 환경 변수를 프로젝트의 루트 디렉터리에 불러오는 것입니다.이 작업은 pipenv shellpipenv run을 실행할 때 두 가지 상황에서 수행됩니다.반면, poetry은 이를 지원하지 않습니다.해결 방법으로 나는 수동으로 그것을 불러올 필요가 있다.
    이 과정을 자동화하기 위해 셸 함수를 만들었습니다. poetry shell이나 poetry run을 실행할 때마다 셸 함수를 불러옵니다.만약 내가 그것을 사용하지 않으려고 한다면, 나는 POETRY_DONT_LOAD_ENV 변수를 설정할 수 있다.이것은 PIPENV_DONT_LOAD_ENV의 작업 원리와 유사하다.
    cat <<"EOT" >> ~/.zshrc
    # Get the poetry's full path
    POETRY_CMD=$(which poetry)
    # Allow poetry to load .env files
    function poetry() {
        # Define the full command. i.e. poetry [run|shell|version]
        POETRY_FULL_CMD=($POETRY_CMD "$@")
    
        # if POETRY_DONT_LOAD_ENV is *not* set, then load .env if it exists
        # also, only loads when for "run" and "shell" commands.
        if [[ -z "$POETRY_DONT_LOAD_ENV" && -f .env && ("$1" = "run" || "$1" = "shell") ]]; then
            echo 'Loading .env environment variables…'
            env $(grep -v '^#' .env | tr -d ' ' | xargs) $POETRY_FULL_CMD
        else
            $POETRY_FULL_CMD
        fi
    }
    EOT
    
    현재 virtualenv tools3을 사용하지 않습니다.
    # Deactivating the venv
    pyenv deactivate
    

    네 번째 단계.통역사 우선 순위 설정
    기왕 우리가 필요한 모든 버전을 설치한 이상, 우리는 반드시 어떤 우선순위를 확정해야 한다.기본적으로, 나는 poetry 또는 그 어떠한 다른 도구를 사용하고 싶지만, 그것들을 설치한virtualenv를 활성화하지 않으려고 한다.우리는 pyenv global 명령을 사용하여 실현할 수 있다.
    PY_DEFAULT=3.8.5
    PY_VERSIONS=( $PY_DEFAULT 3.7.8 3.6.11 2.7.18 )
    pyenv global $PY_VERSIONS tools3 system
    
    다음 사항을 살펴보겠습니다.
    $ pyenv versions
    * system (set by /home/miguel/.pyenv/version)
    * 2.7.18 (set by /home/miguel/.pyenv/version)
      2.7.18/envs/tools2
    * 3.6.11 (set by /home/miguel/.pyenv/version)
    * 3.7.8 (set by /home/miguel/.pyenv/version)
    * 3.8.5 (set by /home/miguel/.pyenv/version)
      3.8.5/envs/tools3
    * tools3 (set by /home/miguel/.pyenv/version)
    
    모든 것이 좋아 보이니 케이스를 다시 가동할 때가 되었다. 이렇게.

    예기치 않은 패키지 설치 방지
    내가 자주 만나는 일은 pip을 사용하여 전역 해석기에 패키지를 설치하는 것이다.앞에서 언급한 바와 같이, 모든 파이톤 해석기를 완전하게 유지하는 것은 좋은 생각이다.만약 우리가 어떤 물건을 설치해야 한다면, 나는 tools3을 위해 만든 것처럼 새로운virtualenv를 만드는 것을 더욱 좋아한다.
    현재, 우리는 어떻게 모든 Python 설치를 잠그나요?
    이것은 사실 매우 간단하다.우리는 pip을virtualenv가 활성 상태일 때만 패키지를 설치하는 것으로 설정할 수 있습니다.
    echo 'export PIP_REQUIRE_VIRTUALENV=true' >> ~/.zshrc
    

    그럼 비파와 시는?
    현재 Python 3.6의 poetry 프로젝트가 필요하다면 poetry에 3.6 버전을 사용하라고 알려 드리겠습니다. 이것은 제가 설치한 Python 3.6.11을 사용하여virtualenv를 자동으로 만들 것입니다.
    예:
    # pyproject.toml 
    ...
    [tool.poetry.dependencies]
    python = "~3.6"
    ...
    
    출력:
    $ poetry env use 3.6   
    Creating virtualenv sandbox-aBhl6cgV-py3.6 in /home/miguel/.ve
    Using virtualenv: /home/miguel/.ve/sandbox-aBhl6cgV-py3.6
    $ poetry shell        
    Loading .env environment variables…
    Spawning shell within /home/miguel/.ve/sandbox-aBhl6cgV-py3.6
    $ . /home/miguel/.ve/sandbox-aBhl6cgV-py3.6/bin/activate
    (sandbox-aBhl6cgV-py3.6) $
    

    결론
    거의 이렇다!나는 이 강좌가 너에게 유용하길 바란다. 마치 나처럼.나는 작업 공간을 재배치해야 할 때마다 이 절차를 따른다.이 안내서에서 복사하고 붙이는 것이 아니라 셸 스크립트를 만들어서 자동화할 수도 있습니다.이 강좌는 처음에 https://medium.com/@henriquebastos/the-definitive-guide-to-setup-my-python-workspace-628d68552e14을 기반으로 하여 내가 자신의 업무 공간을 어떻게 설정하는지 계발했다.
    How I Set up My Python Workspacemiguendes's blog에 처음 등장했다.

    좋은 웹페이지 즐겨찾기