virtualenv와 pyenv의 관계는 무엇입니까?


175

최근에 워크 플로에서 virtualenv 및 virtualenvwrapper를 사용하는 방법을 배웠지 만 몇 가지 가이드에서 pyenv를 언급했지만 pyenv가 무엇인지, pyenv가 무엇이고 어떻게 그것이 virtualenv와 다른지 또는 유사한 지 이해하지 못하는 것 같습니다. pyenv가 virtualenv 또는 무료 도구를위한 더 나은 / 새로운 대체품입니까? 후자의 경우 어떻게 다르게 작동하며 두 가지 (및 해당되는 경우 virtualenvwrapper)가 어떻게 함께 작동합니까?


3
fgimian.github.io/blog/2014/04/20/… : 그러나 pyenv 라는 또 다른 대안이 있는데 몇 가지 중요한 이점이 있습니다.
Martijn Pieters

11
나와 같이 pyenv혼동 하지 마십시오pyvenv
User

답변:


162

Pyenvvirtualenv 는 다른 방식으로 작동하여 다른 작업을 수행하는 매우 다른 도구입니다.

  • Pyenv 는 bash 확장 프로그램입니다-Windows에서는 작동하지 않습니다-파이썬, 핍 등에 대한 호출을 차단하여 여러 시스템 파이썬 도구 체인 중 하나에 연결합니다. 따라서 선택한 Python 버전으로 설치 한 모든 라이브러리를 항상 사용할 수 있습니다. 따라서 다른 버전의 Python간에 전환해야하는 사용자에게 좋습니다.

  • VirtualEnv 는 순수한 파이썬이므로 어디에서나 작동하며, 현재 시스템 툴 체인에 대한 링크를 포함하거나 포함하지 않을 수있는 활성화 환경에 로컬로 선택적으로 특정 버전의 파이썬 및 pip 사본을 만듭니다. 라이브러리의 알려진 서브 세트 만 해당 환경에 설치하십시오. 따라서 어떤 라이브러리가 어떤 버전에서 사용되는지와 전체 변경 사항이 모듈에 영향을 미치지 않음을 정확히 알기 때문에 테스트 및 배포에 훨씬 더 좋습니다 .

venv python> 3.3

Python 3.3부터는 venv라는 VirtualEnv 구현이 내장되어 있습니다 (일부 설치에서는 pyvenv라는 래퍼가 있습니다-이 래퍼는 Python 3.6에서 더 이상 사용되지 않습니다 ). 래퍼의 가능한 문제를 피하기 위해 종종 래퍼를 사용하여 직접 사용하는 것이 좋습니다. /path/to/python3 -m venv desired/env/path또는을 사용하여 pyWindows 에서 우수한 파이썬 선택기를 사용할 수 있습니다 py -3 -m venv desired/env/path. desired/env/pathconfigure로 지정된 디렉토리를 작성하고 적절하게 채 웁니다. 일반적으로 VirtualEnv를 사용하는 것과 매우 유사합니다.

추가 도구

위에서 언급 한 것 중 하나 이상을 사용하는 데 도움이 될 수 있으므로 언급하고 고려할 가치가있는 여러 도구가 있습니다.

  • VirtualEnvWrapper VirtualEnv- 크로스 플랫폼 의 사용 및 관리를 관리 및 단순화 .
  • pyenv-VIRTUALENV , 설치 pyenv-설치 파이썬의 여러 버전을 포함하는 기본 설치를하고 각 내에서 격리 환경을 만들 수 있습니다 이것으로 - - 관리 및 VIRTUALENV에 인터페이스에 대한 PyEnv 도구를 제공, 리눅스 / OS -을 X . Johann Visagie가 제안 함
  • PyInstaller 는 VirtualEnv에서 개발 및 테스트 된 python 코드를 가져 와서 번들로 묶어 파이썬 버전이 설치 되지 않은 하나의 플랫폼을 실행할 수 있습니다 -크로스 컴파일러가 아니므로 Windows (가상)가 필요합니다. -) Windows 설치 등을 빌드하는 머신이지만, 파이썬이 설치 될 것임을 확신 할 수 있지만 파이썬 버전 및 모든 라이브러리가 코드와 호환되는지 확실하지 않은 경우에도 편리합니다.

3
pyenv와 virtualenv가 완벽하게 작동하도록하는 pyenv 플러그인 인 pyenv-virtualenv를 언급 할 가치가 있습니다. pyenv-installer를 사용하여 pyenv를 설치 한 경우 pyenv-virtualenv가 이미 존재합니다. * github.com/yyuu/pyenv-virtualenv * github.com/yyuu/pyenv-installer
wjv

1
무엇에 대한 venv, 지금은 표준 라이브러리에서?
Flimm

@Flimm : python 3.3부터 venv는 표준 라이브러리의 일부이며 종종 virtualvirv 대신 "virtualenv done right"로 설명되므로 virtualenv 대신 사용해야합니다 -reddit.com/r/learnpython/comments/4hsudz/pyvenv_vs_virtualenv
Steve Barnes

2
pyenv-virtualenv는 리눅스 전용이 아니거나 더 이상은 아닙니다. MacOS에 쉽게 설치할 수 있도록 homebrew 패키지가 있습니다.
돌려

상호 운용성을 강조해 주셔서 감사합니다!
HashRocketSyntax

16

virtualenv예를 들어 프로젝트의 하위 디렉토리에 사용자 정의 Python 설치를 작성할 수 있습니다. 따라서 각 프로젝트는 python각각의 virtualenv 아래에 고유 한 (또는 여러 개의) 프로젝트를 가질 수 있습니다 . 일부 / 모든 가상 환경이 python충돌없이 동일한 버전 (예 : 2.7.16)을 갖더라도 완벽하게 좋습니다. 개별적으로 존재하며 서로를 모릅니다. 당신이 그 어떤 사용하려는 경우 python들, 당신은에 있습니다 activate(귀하 일시적으로 수정하는 스크립트를 실행하여 PATH그 VIRTUALENV의 수 있도록 bin/디렉토리가 먼저). 이 시점에서 python(또는 pip기타 등)을 호출하면 virtualenv의 버전이 호출 될 때까지 deactivate(을 복원합니다 PATH) 호출합니다 .

pyenv보다 넓은 규모로 작동합니다 virtualenv-파이썬 설치 레지스터를 보유하고 있으며 새 설치를 설치하는 데 사용할 수 있으며 python명령 을 사용할 때 실행할 Python 버전을 구성 할 수 있습니다 . 비슷하지만 실제 사용은 약간 다릅니다. 그것은 python당신의 PATH(영구적으로) shim 스크립트를 추가하고 어떤 "진짜" python를 호출 할 것인지 결정 함으로써 작동합니다 . pyenv-virtualenv플러그인 을 사용하여 virtualenv 파이썬 중 하나를 호출하도록 pyenv를 구성 할 수도 있습니다 . 설치 한 Python 버전 pyenv은 해당 $(pyenv root)/versions/디렉토리 로 이동하므로 (기본적으로 pyenv 루트는 ~ / .pyenv 임) virtualenv보다 '전역'입니다. 일반적으로 설치된 Python 버전을 복제 할 수 없습니다pyenv 적어도 그렇게하는 것이 주요 아이디어는 아닙니다.

특정 Python 버전으로 virtualenv를 만들려면 시스템 어딘가에 있든 없든 해당 버전을 PATH가져 와서 새로 만든 virtualenv에 복제해야합니다. 물론 특정 버전을 얻는 한 가지 방법은을 통해 설치하는 것 pyenv입니다. 일단 완료되면 개별 virtualenv는 다른 모듈 (또는 그 버전)을 설치하여 자유롭게 분기 할 수 있습니다.

한마디로 :

  • virtualenv 기존 설치에서 복제하여 로컬 독립적 인 Python 설치를 작성할 수 있습니다.
  • pyenv 여러 버전의 파이썬을 동시에 (시스템 전체 또는 로컬 사용자를 위해) 설치 한 다음 주어진 시간에 실행할 수많은 파이썬 (virtualv 또는 Anaconda가 만든 것을 포함하여)을 선택할 수 있습니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.