pyenv와 가상 환경을 사용하여 파이톤의 복잡성을 관리하다

10400 단어 python
In my earlier postpyenv가 같은 호스트에서 여러 개의 Python 버전을 실행하는 위대한 도구에 대한 글을 썼습니다.이것은 워크스테이션이나 서버에 여러 버전의 파이톤을 설치하는 것을 간단하게 하고 셸에서 어떤 버전을 실행하는지 제어합니다.그러나 파이썬 개발자로서 파이썬 버전은 환경의 일부일 뿐이다.대부분의 파이톤 개발자들은 한 번에 여러 프로젝트를 처리하고, 프로젝트마다 사용할 수 있도록 여러 개의 파이톤 패키지를 설치하기를 희망한다.전 세계적으로 모듈을 설치하는 것은 좋은 생각은 드물다. 특히 이 파이톤 버전을 여러 프로젝트에 사용할 수 있다면.한 항목이 가방의 특정 버전을 원하고 다른 항목과 함께 사용할 수 없을 때 어떤 일이 일어날까요?반대로 virtualenv 또는anaconda을 사용해야 한다.다행히도 둘 다 pyenv와 함께 잘 일할 수 있었다.본고에서basicvirtualenv,pyenvvirtualenv 플러그인과anaconda를 어떻게 사용하여 격리된 가상 환경을 구축하는지 소개할 것이다. 그 중에서 이 환경과 격리된 패키지를 설치했다.
이러한 세부 사항을 토론하기 전에 내가 언급하고자 하는 것은 본고는 가상 환경에서 소프트웨어 패키지 호환성을 유지하는 복잡성을 논의하지 않았다는 것이다.이것은 다른 문장(또는 한 조의 문장)의 주제다.

가상적
만약 first post on pyenv 의 설치 절차를 따랐다면, 특정한 버전의 파이톤을 사용하기 위해 셸을 설정하는 방법을 알고 있을 것입니다.그 글에서, 나는 계속해서 독특한 파이톤 버전을 설치할 것이다.그리고 이 버전을 사용하면
  • virtualenv 설치(글로벌)
  • virtualenv 명령을 사용하여virtualenv 생성
  • virtualenv 활성화
  • pip를 사용하여 패키지를 이virtualenv
  • 에 설치
    이 모든 예는 macOS Catalina를 실행하고 zsh를 사용하는 Mac에서 실행됩니다.이 모든 것은 Mac, Linux, Windows에서 선택한 셸 WSL 을 사용하여 실행할 수 있습니다.
    ❯ pyenv install --list | grep 3.8 # look for the latest 3.8 version
      3.8.0
      3.8-dev
      3.8.1
      3.8.2
      3.8.3
      3.8.4
      3.8.5
      3.8.6
      miniconda-3.8.3
      miniconda3-3.8.3
    ❮ pyenv install 3.8.6
    python-build: use [email protected] from homebrew
    python-build: use readline from homebrew
    Installing Python-3.8.6...
    python-build: use readline from homebrew
    python-build: use zlib from xcode sdk
    Installed Python-3.8.6 to /Users/mcw/.pyenv/versions/3.8.6
    
    ❯ pyenv shell 3.8.6 # sets the version just for this shell
    ❯ pyenv which pip # show which executable is running for pip, it's the newly installed one
    /Users/mcw/.pyenv/versions/3.8.6/bin/pip
    ❯ pip install virtualenv
    Collecting virtualenv
      Using cached virtualenv-20.1.0-py2.py3-none-any.whl (4.9 MB)
    Collecting appdirs<2,>=1.4.3
      Using cached appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
    Collecting filelock<4,>=3.0.0
      Using cached filelock-3.0.12-py3-none-any.whl (7.6 kB)
    Collecting distlib<1,>=0.3.1
      Using cached distlib-0.3.1-py2.py3-none-any.whl (335 kB)
    Collecting six<2,>=1.9.0
      Using cached six-1.15.0-py2.py3-none-any.whl (10 kB)
    Installing collected packages: appdirs, filelock, distlib, six, virtualenv
    Successfully installed appdirs-1.4.4 distlib-0.3.1 filelock-3.0.12 six-1.15.0 virtualenv-20.1.0
    
    
    현재 Virtual Environment가 Python 환경에 설치되어 있습니다. 테스트 프로젝트에virtualenv를 설정할 수 있습니다.이 예에서, 나는virtualenv를 프로젝트 디렉터리에 두지만, 원본 코드 트리의 숨겨진 디렉터리를 포함하여, 예를 들어 .env 어디에 두든지 할 수 있다.
    ❯ cd projects
    ❯ virtualenv myenv
    created virtual environment CPython3.8.6.final.0-64 in 407ms
      creator CPython3Posix(dest=/Users/mcw/projects/myenv, clear=False, global=False)
      seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/mcw/Library/Application Support/virtualenv)
        added seed packages: pip==20.2.4, setuptools==50.3.2, wheel==0.35.1
      activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
    ❯ . myenv/bin/activate # activates the 3.8.6 virtualenv to isolate our pip installs
    ❯ pip install requests
    Collecting requests
      Using cached requests-2.24.0-py2.py3-none-any.whl (61 kB)
    Collecting idna<3,>=2.5
      Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
    Collecting chardet<4,>=3.0.2
      Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)
    Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1
      Using cached urllib3-1.25.11-py2.py3-none-any.whl (127 kB)
    Collecting certifi>=2017.4.17
      Using cached certifi-2020.6.20-py2.py3-none-any.whl (156 kB)
    Installing collected packages: idna, chardet, urllib3, certifi, requests
    Successfully installed certifi-2020.6.20 chardet-3.0.4 idna-2.10 requests-2.24.0 urllib3-1.25.11
    ❯ python
    Python 3.8.6 (default, Nov 1 2020, 17:41:10)
    [Clang 11.0.3 (clang-1103.0.32.62)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    >>> requests. __file__'/Users/mcw/projects/myenv/lib/python3.8/site-packages/requests/ __init__.py'
    >>> requests. __version__'2.24.0'
    
    이제 VirtualNV가 왜 좋은지 빠르게 보여드리기 위해 서로 다른 VirtualNV에 서로 다른 버전의 요청을 설치할 것입니다.이것은 근본적으로 너무 많은 일을 필요로 하지 않는다.
    ❯ deactivate # deactivate our old environment
    ❯ virtualenv myenv2. # same output as above, but for 2nd environment
    ❯ . myenv2/bin/activate # activate our new one
    ❯ pip install requests==2.23.0. # pick a different version than last time
    ❯ python
    Python 3.8.6 (default, Nov 1 2020, 17:41:10)
    [Clang 11.0.3 (clang-1103.0.32.62)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    >>> requests. __version__'2.23.0'
    
    현재 두 개의 독립된 환경이 있는데, 환경마다 서로 다른 버전의 요청 모듈이 있다.우리는 필요에 따라 둘 사이를 쉽게 전환할 수 있다.

    pyenv virtualenv 플러그인
    사실에 의하면 pyenv는 플러그인을 지원합니다. pyenv-virtualenv 플러그인은 pyenv와virtualenv (또는 conda, 우리는 아래에서 토론할 것) 를 결합해서 사용할 수 있습니다.설치 프로세스 문서를 검토합니다.이것은pyenv 자체의 설치와 매우 비슷하다.설치되면 pyenv에서 사용할 수 있는 새 명령을 얻을 수 있습니다.
       activate Activate virtual environment
       deactivate Deactivate virtual environment
       virtualenv Create a Python virtualenv using the pyenv-virtualenv plugin
       virtualenv-delete Uninstall a specific Python virtualenv
       virtualenv-init Configure the shell environment for pyenv-virtualenv
       virtualenv-prefix Display real_prefix for a Python virtualenv version
       virtualenvs List all Python virtualenvs found in `$PYENV_ROOT/versions/*'.
    
    만약 우리가 이 명령을 사용하여 우리가 위에서 한 일을 복제한다면, 그것은 이렇게 될 것이다.
    ❯ pyenv virtualenv 3.8.6 myenv3 # makes a 3rd virtualenv using the 3.8.6 version
    # output as before
    ❯ pyenv virtualenvs
      3.8.6/envs/myenv3 (created from /Users/mcw/.pyenv/versions/3.8.6)
      myenv3 (created from /Users/mcw/.pyenv/versions/3.8.6)
    ❯ pyenv deactivate # if you still have another virtualenv activated from earlier, you can deactivate this way
    ❯ pyenv activate myenv3
    pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
    ❯ pip install requests
    # output as before
    ❯ python
    Python 3.8.6 (default, Nov 1 2020, 17:41:10)
    [Clang 11.0.3 (clang-1103.0.32.62)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    >>> requests. __file__'/Users/mcw/.pyenv/versions/myenv3/lib/python3.8/site-packages/requests/ __init__.py'
    

    활용단어참조
    pyenv의 또 다른 장점은 사용Anaconda을 매우 간단하게 하는 것이다.나는 여기서 Anaconda를 상세하게 소개하지 않지만, 대량의 의존항을 가진 데이터 과학 프로젝트 (예:numpy,pandas,scikit learn,tensorflow 등) 에 종사할 계획이라면, 보통 Anaconda나 미니콘다를 사용하여 모든 의존항을 설치하는 것이 훨씬 쉽다.Anaconda는 완전한 설치입니다. 미니conda는 기본 필수품만 설치하고 디스크 공간을 더 빨리 설치하고 절약해야 하는 패키지를 선택할 수 있습니다.
    Pyenv는 모든 버전의 anaconda와 미니콘다를 검색하기 쉬워지고 설치 프로그램을 검색하기 위해 사이트를 어렵지 않게 찾아볼 수 있다.pyenv를 사용하여 Anaconda 버전을 설치하면 conda (환경과 의존 항목을 관리하는 명령) 을 사용하면 환경에 적합하기 때문에 conda 명령을 사용하여 기본 환경을 만들 필요가 없습니다.
    ❯ pyenv install --list | grep conda # to see what's available
    ❯ pyenv install miniconda3-4.7.12
    Downloading Miniconda3-4.7.12-MacOSX-x86_64.sh...
    -> https://repo.anaconda.com/miniconda/Miniconda3-4.7.12-MacOSX-x86_64.sh
    Installing Miniconda3-4.7.12-MacOSX-x86_64...
    
    # <lots of other output snipped>
    
    ❯ pyenv versions
      system
      3.6.10
      3.8.6
      3.8.6/envs/myenv3
      3.9.0
      miniconda3-4.7.12
    * myenv3 (set by PYENV_VERSION environment variable)
    ❯ pyenv deactivate # if we had an environment activated already (myenv3 from above)
    ❯ pyenv virtualenv myconda
    # this will generate lots of output as conda builds the environment
    
    ❯ pyenv activate myconda
    pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
    
    현재, 케이스에는pyenv 대신 환경을 만들 수 있는 conda 도구가 제공됩니다.Conda는 패키지를 설치하는 데도 사용됩니다.나는 여기에서 상세하게 소개하지 않지만, 완전하게 보기 위해서, 우리는virtualenv를 사용하여 완성한 초기 임무를 복제하지만, 이번에는 conda를 사용합니다.
    ❯ conda env list # see that we have our new environment activated
    # conda environments:
    #
    base /Users/mcw/.pyenv/versions/miniconda3-4.7.12
    myconda * /Users/mcw/.pyenv/versions/miniconda3-4.7.12/envs/myconda
    ❯ conda install requests # instead of pip
    # this generates a lot of output showing all the dependencies being installed
    ❯ python
    Python 3.8.5 (default, Sep 4 2020, 02:22:02)
    [Clang 10.0.0] :: Anaconda, Inc. on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import requests
    >>> requests. __file__'/Users/mcw/.pyenv/versions/myconda/lib/python3.8/site-packages/requests/ __init__.py'
    
    Pyenv는 여러 버전의 Python을 설치하고 격리할 수 있을 뿐만 아니라 Anaconda와virtualenv의 가상 환경을 쉽게 관리하는 데 유용한 도구입니다.파이썬 개발자가 워크스테이션이나 서버에 한 버전이 아닌 파이썬을 필요로 한다면 이것이 복잡성을 관리하는 좋은 방법이다.

    좋은 웹페이지 즐겨찾기