venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv 등의 차이점은 무엇입니까?


1022

파이썬 3.3은 표준 라이브러리에 새로운 패키지를 포함합니다 venv. 그것은 무엇을하고, 정규식과 일치하는 것처럼 보이는 다른 모든 패키지와 어떻게 다릅니 (py)?(v|virtual|pip)?env까?


20
마감 투표를 선점하기 위해 이것이 stackoverflow.com/questions/29950300/… 보다 더 일반적인 질문이라고 생각 했기 때문에 해당 질문을 편집하거나 해당 게시물에 지나치게 일반적인 답변을 게시하는 것이 불편하다고 느꼈습니다.
Flimm

12
이 안내서는 파이썬이 일을하기 위해 더 많은 "한 가지 확실한 방법"을 계속 추가함에 따라 유용하고 지속적으로 업데이트됩니다. docs.python-guide.org/en/latest/dev/virtualenvs
michael

2
3.6 현재 macOS에서 pyenv와 비교하여 virtualenv를 사용하는 것이 더 쉽다는 것을 알았습니다 (나는 pyNoob입니다)
HashRocketSyntax

@HashRocketSyntax virtualenvpyenv같은 기능을 수행하지, 서로 대체하지 않습니다. 내 대답을 참조하십시오.
Flimm

6
나는 pipenv로 하루 종일 시간을 낭비했습니다. 결론적으로, 그것은 너무 많이 팔렸습니다. py2가 필요한 경우 Venv 및 virtualenv가 적절한 도구입니다. Conda (풀 스택이 필요없는 경우 miniconda)도 매우 좋습니다. 아주 좋은 글 : chriswarrick.com/blog/2018/07/17/…
SwimBikeRun

답변:


1382

표준 라이브러리에없는 PyPI 패키지 :

  • virtualenvPython 라이브러리를위한 격리 된 Python 환경을 만드는 매우 인기있는 도구입니다. 이 도구에 익숙하지 않은 경우 매우 유용한 도구이므로이 도구를 배우는 것이 좋습니다.이 답변의 나머지 부분과 비교해 보겠습니다.

    디렉토리에 여러 파일을 설치 한 env/다음 (예 :) PATH환경 변수를 수정하여 사용자 지정 bin디렉토리 (예 :)를 접두어로 사용합니다 env/bin/. 바이너리 python또는 python3바이너리 의 정확한 사본 이이 디렉토리에 배치되지만 Python은 환경 디렉토리에서 경로와 관련된 라이브러리를 먼저 찾도록 프로그래밍되어 있습니다. 파이썬의 표준 라이브러리의 일부는 아니지만 공식적으로 PyPA (Python Packaging Authority)의 축복을 받았습니다. 활성화되면를 사용하여 가상 환경에 패키지를 설치할 수 있습니다 pip.

  • pyenv파이썬 버전을 분리하는 데 사용됩니다. 예를 들어 Python 2.7, 3.6, 3.7 및 3.8에 대해 코드를 테스트 할 수 있으므로 코드간에 전환하는 방법이 필요합니다. 활성화되면 PATH환경 변수 접두어 로 ~/.pyenv/shims, 파이썬 명령 ( python, pip)과 일치하는 특수 파일이 있습니다 . 이것들은 파이썬이 제공하는 명령의 사본이 아닙니다. 그것들은 PYENV_VERSION환경 변수, .python-version파일 또는 파일을 기반으로 실행할 Python 버전을 즉시 결정하는 특수 스크립트입니다 ~/.pyenv/version. pyenv또한 명령을 사용하여 여러 Python 버전을 다운로드하고 설치하는 과정을 더 쉽게 pyenv install만듭니다.

  • pyenv-virtualenv를위한 플러그인 pyenv과 같은 저자 pyenv, 당신이 사용할 수 있도록 pyenv하고 virtualenv편리하게 동시에. 그러나 Python 3.3 이상 pyenv-virtualenv을 사용하는 python -m venv경우 대신 대신 사용 가능한 경우 실행을 시도합니다 virtualenv. 편의 기능을 원하지 않는 경우 virtualenvpyenv없이 함께 사용할 수 있습니다 pyenv-virtualenv.

  • virtualenvwrapper의 확장 세트입니다 virtualenv( docs 참조 ). 그것은 당신이 같은 명령을 제공합니다 mkvirtualenv, lssitepackages그리고 특히 workon다른 사이의 전환을위한 virtualenv디렉토리. 이 도구는 여러 virtualenv디렉토리 를 원할 때 특히 유용합니다 .

  • pyenv-virtualenvwrapper를위한 플러그인 pyenv과 같은 저자 pyenv편리하게 통합 할 수있는, virtualenvwrapperpyenv.

  • pipenv목적은 결합 Pipfile, pipvirtualenv명령 줄에 하나의 명령으로. virtualenv디렉토리는 일반적으로에 배치됩니다 ~/.local/share/virtualenvs/XXX함께, XXX프로젝트 디렉토리의 경로의 해시되고. 이는 virtualenv디렉토리가 일반적으로 현재 작업 디렉토리에있는와 다릅니다 . pipenv(라이브러리와 달리) Python 응용 프로그램을 개발할 때 사용됩니다. pipenv와 같은 대안이 있습니다. poetry이 질문은 비슷한 이름의 패키지에 관한 것이므로 여기에 나열하지 않습니다.

표준 라이브러리 :

  • pyvenv는 Python 3과 함께 제공되지만 문제가 있기 때문에 Python 3.6 에서는 더 이상 사용되지 않습니다 (혼란되는 ​​이름은 말할 것도 없습니다). Python 3.6 이상에서 정확한 값은 python3 -m venv입니다.

  • venv는 Python 3과 함께 제공되는 패키지이며, python3 -m venv어떤 이유로 배포판을 사용 python3-venv하여 우분투 / 데비안 과 같은 별도의 배포 패키지로 분리 할 수 있습니다. 이 기능은와 같은 목적으로 사용 virtualenv되지만 기능의 하위 세트 만 있습니다 ( 여기에서 비교 참조 ). 특히 전자가 Python 2와 3을 모두 지원 virtualenv하기 때문에보다 인기가 높습니다 venv.

초보자를위한 추천 :

이것은 초보자에게 개인적으로 추천하는 것입니다. 학습으로 시작 virtualenv하고 pip, Python 2와 3에서 작동하는 다양한 도구와 다양한 상황에서 필요한 도구가 있으면 다른 도구를 선택하십시오.


115
이것은 매우 도움이됩니다! 그렇다면 왜 1 대신 8 개의 얽힌 것이 있습니까? (“한 가지 확실한 방법이 있어야합니다.”– Python의 선)
Jerry101

59
@ Jerry101, venv의 도입은 부분적으로 그 혼란에 대한 응답입니다. 상황을 개선하기 위해 venv를 사용하고 다른 사람들도 똑같이하도록 권장합니다.
Magnus Lind Oxlund

31
"venv의 도입은 부분적으로 그 혼란에 대한 반응입니다"X와 같은 것을하는 것들이 너무 많을 때 사람들은 어떻게 'X와 같은 것을하는 다른 것을 만들어서 그 혼란을 개선 할 수 있다고 항상 생각합니다. . 실제로 재미 있네요. 우리는 이제 4 년이 지난 지금 ... 물어 보는 것이 적절할 수 있습니다. venv실제로 그 문제를 해결 했습니까?
Kris

34
목록에서 동일한 영역을 실제로 다루는 유일한 두 가지 도구는 virtualenv와 venv이므로 여러 경쟁 도구로 인한 혼란을 다루는 특성은 매우 정확하지 않습니다. 그러나이 목록은 비슷한 이름을 가진 여러 가상 환경 관련 도구로 구성됩니다. 특히 배우는 사용자에게는 혼란 스러울 수 있습니다. venv가 상황을 개선 했습니까? 기본 수정과 표준 라이브러리의 이점을 활용하여 다른 가상 환경 도구에 대한보다 가벼운 대안을 제공했습니다. ...
매그너스 린드 Oxlund

11
@cowbert Python 3.5에서 Python 3.6으로 업그레이드하고 모든 virtualenvs가 중단되면 venv새로운 Python 버전으로 더 쉽게 업그레이드 할 수 있습니다.
Daniel H

276

virtualenvPython3.3 + 이후 의 사용을 피하고 대신 표준 배송 라이브러리를 사용합니다 venv. 새로운 가상 환경을 만들려면 다음을 입력하십시오.

$ python3 -m venv <MYVENV>  

virtualenv파이썬 바이너리를 가상 환경의 bin 디렉토리에 복사하려고 시도합니다. 그러나 해당 바이너리에 포함 된 라이브러리 파일 링크를 업데이트하지 않으므로 소스에서 상대 경로 이름을 가진 비 시스템 디렉토리로 Python을 빌드하면 Python 바이너리가 중단됩니다. 이것이 복사 가능한 파이썬을 만드는 방법이기 때문에 큰 결함입니다. OS X에서 내장 라이브러리 파일 링크를 검사하려면 BTW를 사용하십시오 otool. 예를 들어 가상 환경에서 다음을 입력하십시오.

$ otool -L bin/python
python:
    @executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)

따라서 나는 피할 것 virtualenvwrapper하고 pipenv. pyvenv더 이상 사용되지 않습니다. pyenv사용되는 곳에서 자주 사용되는 것처럼 보이지만 내장 된 것을 수행 virtualenv한다고 생각하기 때문에 멀리 떨어져있을 것 입니다. venvpyenv

venv있는 셸에서 가상 환경을 생성 신선한샌드 박스 로, 사용자 설치 라이브러리를 , 그리고의 멀티 파이썬 안전 . 신선한 가상 환경은 파이썬 함께 제공, 당신은 모든 것을 다시 다른 라이브러리를 설치해야하는 표준 라이브러리로 시작하기 때문에 pip install가상 환경이 활성화되어있는 동안. 이러한 새로운 라이브러리 설치가 가상 환경 외부에서 보이지 않기 때문에 샌드 박스 처리 되므로 기본 파이썬 설치에 영향을주지 않고 전체 환경을 삭제하고 다시 시작할 수 있습니다. 가상 환경의 대상 폴더가없이 생성되므로 사용자 설치 가능 라이브러리sudo이미 소유 한 일부 디렉토리에서는 sudo라이브러리를 설치할 권한이 필요하지 않습니다 . 가상 환경이 활성화되면 셸은 해당 가상 환경을 구축하는 데 사용 된 Python 버전 (3.4, 3.5 등) 만 볼 수 있기 때문에 마지막으로 다중 파이썬 안전 합니다.

pyenvvenv여러 파이썬 환경을 관리 할 수 ​​있다는 점 과 비슷 합니다. 그러나 pyenv라이브러리 설치를 시작 상태로 롤백 할 수 없으므로 라이브러리 admin를 업데이트하려면 특정 시점에 권한 이 필요할 수 있습니다. 따라서 사용하는 것이 가장 좋습니다 venv.

지난 몇 년 동안 빌드 시스템 (emacs 패키지, python 독립형 응용 프로그램 작성기, 설치 프로그램 ...)에서 많은 문제가 발생하여 결국에는 문제가 발생했습니다 virtualenv. 이 추가 옵션을 제거하고 사용하면 파이썬이 더 나은 플랫폼이 될 것이라고 생각합니다 venv.


3
add2virtualenv아래에 PYTHONPATH사용자 정의 _virtualenv_path_extensions.pth파일 을 추가하여 조정하십시오 site-packages. 또는 가상 환경을 활성화 할 때마다 호출 PYTHONPATH하는 bin/activate파일 에서 환경 변수를 업데이트 할 수 있습니다. 또는 site-packages추가 디렉토리를 가리 키도록 아래 에 심볼릭 링크를 추가 할 수 있습니다 . 이 두 가지 대안 모두 개발자가 문제 해결에 널리 사용하는 기존 명령 줄 도구에 더 투명합니다. .pth문서화되지 않은 이름 을 가진 사용자 정의 를 사용 하면 더 마술 같은 IMO처럼 보입니다.
Riaz Rizvi

15
좋아, stackoverflow.com/questions/48130371/… 에서 올바른 업데이트가 PYTHONPATH필요하지 않음 을 확인했습니다 add2virtualenv. 첫 번째 의견에서 SO에 대한 도움이 부족하다는 점에서 문제가 해결되면 답변을 게시하고 사람들이 게시 할 때 문제를 해결하도록 동기를 부여하는 유일한 제안입니다. 마우스 클릭 대신 30 분 동안의 조사 + 쓰기? 좋은 거래처럼 들리는 ...
Riaz Rizvi

7
아니오, 당신은 옳습니다-나는 공직에 능숙하려고 노력합니다. 도대체 당신이 내 지역에 있다면 맥주를 사 줄 것입니다. 나는 약속을 잘 지키고 파이썬 문서 사람들이 명확성을 위해 공식 문서를 / bin / activate 변경 사항을 추가 할 수 있는지 확인합니다. 나는 훌륭하지 않지만 파이썬에는 끔찍하지 않습니다. 어려웠다면 어쨌든 시간 내 주셔서 감사합니다. 최선을 다하십시오.
SteveJ

9
@ MalikA.Rumi 축복은 "Pipenv 제작자가 우리와 다른 사람들에게 부지런히 판매했기 때문에 Pipenv를 언급하는 이유"로 약간 줄었습니다.
Rob Grant

6
@AndreaMoro 그것은 pyvenv더 이상 사용되지 않습니다 pyenv. 이러한 도구의 이름과 혼동하기 쉽습니다.
Daniel Holmes

24

나는 pipenv토끼 구멍을 내려갔습니다 ( 실제로는 깊고 어두운 구멍입니다 ... ) 마지막 대답은 2 년 전에 끝났 으므로 Python 가상 봉투 주제에 대한 최신 개발 내용으로 토론을 업데이트하는 것이 유용하다고 느꼈습니다. 찾았습니다.

기권:

이 대답은 하지 의 장점에 대한 격렬한 논쟁이 계속에 대해 pipenv venv 같은 봉투 솔루션 - 중 어떠한 보증도하지 않습니다 I를 . 그것은 PyPA 가 상충되는 표준을지지하고 향후 virtualenv의 개발이 표준 중 하나 또는 선택 을 무효화 할 것을 약속 하는 방법에 관한 것 입니다. 이 두 도구는 PyPA 의 기름 부음 도구이기 때문에 정확하게 두 가지 도구에 중점을 두었습니다 .

venv

OP 메모에서 알 수 있듯이 venv 는 환경을 가상화하기위한 도구입니다. NOT 타사 솔루션 있지만, 기본 도구입니다. PyPA 보증 venv 만들기위한 가상 봉투를 " 버전 3.5에서 변경 : venv의 사용은 이제 가상 환경을 만드는 것이 좋습니다 ."

pipenv

venv 와 같은 pipenv는 가상 엔벨로프를 작성하는 데 사용될 수 있지만 추가로 롤인 패키지 관리 및 취약성 점검 기능을 사용할 수 있습니다. 사용하는 대신requirements.txt,pipenv를 통해 패키지 관리 기능을 제공합니다 Pipfile . PyPA가 PACKAGE MANAGEMENT를 위해 pipenv를 승인 함에 따라 이는pipfile 대체를 암시하는 것으로 보인다requirements.txt.

그러나이 : pipenv의 사용은 VIRTUALENV , 가상 봉투를 만들기위한 도구로 하지 venv 에 의해 승인 된 PyPA 가상 봉투를 만들기위한 이동 - 투 도구로.

상충되는 표준 :

따라서 가상 엔벨로프 솔루션에 정착하기가 어렵지 않은 경우 이제 PyPA 는 서로 다른 가상 엔벨로프 솔루션을 사용하는 두 가지 도구를 보증합니다. 이 충돌을 강조하는 venv vs virtualenv 에 대한 격렬한 Github 토론은 여기 에서 찾을 수 있습니다 .

갈등 해결:

위 링크에서 언급 된 Github 토론 은 다음 릴리스 에서 venv 를 수용하는 방향으로 virtualenv 개발을 주도했습니다 .

기본 제공 venv 선호 : 대상 파이썬에 venv가 있으면이를 사용하여 환경을 생성 한 다음 그에 따라 후속 작업을 수행하여 다른 보장을 제공합니다.

결론:

따라서 두 라이벌 가상 엔벨로프 솔루션 간에는 미래의 컨버전스가있을 것으로 보이지만 현재 사용되는 pipenvvirtualenv 는 (와) 실질적으로 다릅니다 venv.

pipenv가 해결 하는 문제 와 그 사실을 감안할 때 PyPA 가 축복을 준, 그것은미래가 밝아 보입니다 . 만약 VIRTUALENV이 제안 된 개발 목표에 제공, 가상 봉투 솔루션을 선택하는 것은 더 이상 하나의 경우 없어야 pipenv 또는 venv .


6
내가 이해 한 것에서 : pipenv 의 실제 가치는 이미 토론되어 왔으며 1 년이 지나도 릴리스되지 않았습니다. 그 이후로 많은 것들이 바뀌었고 pipenv ( pip-tools 와 같은 도구 는 훨씬 나은 모양입니다)에 대해서만 악화되었다고 주장합니다 . PyPA의 페이지는 오래된, 그리고 나는 그들이 강등해야 주장 pipenv을 . venv 는 표준 도구이므로 매우 효율적이지만 기능이 제한되어 있습니다. virtualenv 님 과 경쟁하지 않습니다 venv 어디 지역을 커버하지만 시도 venv이 수 없거나 (가 표준이기 때문에) 가고 싶지 않습니다.
sinoroc

@sinoroc 내 게시물은 장점이나 pipenv에 관한 것이 아닙니다 .PyPA가 pipenv venv를 모두 승인 하여 봉투 솔루션의 선택을 더 어렵게 만들고 어느 정도의 수렴이 선택의 필요성을 무효화시키는 지에 대해 그들 사이에 필자는 아무것도 보증하지 않으며 PyPA보증 하는이 두 솔루션이 어떻게 발전 하고 있는지에 대해 배운 것을 공유 했습니다 . PyPA의 관심사를 감안할 때, 내가 좋아하든 상관없이 pipenv와 venv 는 풍경의 일부가 될 것 같습니다
F1Linux

8
나는 가능한 한 venvpip 를 고수한다고 말합니다 . 이 두, 여기에 머물 수 있습니다 venv 파이썬의 표준 라이브러리의 일부이고 감지에 PIP 가 (를 통해 파이썬에서 vendored의 복지 이후로 ensurepip ). 다른 도구 ( pyenv 시리즈 제외 : 완전히 다른 것)는 venvpip에 의존하거나 (성공적으로 또는 덜 성공한) 것으로 보입니다 . 어느 것이 좋습니다. 그러나 일이 파울 경우 venvpip 는 안전한 폴백입니다. 내가 사용하는 유일한 도구는 tox입니다 ( tox-venv 사용)) 가상 환경을 작성하고 채우는 데 도움이됩니다 (직선, 마술, 이상한 것은 아닙니다).
sinoroc

2
이 최신 포스트는 주름을 다듬는 데 큰 역할을 했으므로 금입니다. 시스템 파이썬이 업그레이드 될 때 virtualenv를 사용하여 바이너리를 매달려있는 데 문제가 있으므로 pip와 venv를 고수하고 있습니다.
codeviper

1
과거에는 pipenv nonverbose 관련 오류가 발생했습니다. argl와 도랑. 또한 : chriswarrick.com/blog/2018/07/17/…
qrtLs

3

2020 년 4 월 업데이트

이 게시물을 보았을 때 같은 검색을 했습니다 . 어떤 툴을 사용해야하는지에 대한이 문제는 저와 같은 새로운 Python 사용자에게는 매우 혼란스럽고 어려운 것 같습니다. 이것은 pipenv와 관련하여 PyPA 웹 사이트에서 직접 가져온 것입니다.

이 학습서에서는 pipenv 프로젝트를 Python 라이브러리 개발이 아닌 Python 애플리케이션 개발의 요구에 주로 중점을 두는 도구로 다루고 있지만 프로젝트 자체는 현재 버그 수정 및 새로운 기능의 공개를 방해하는 여러 프로세스 및 유지 보수 문제를 해결하고 있습니다 ( 2019 년 전체가 새 릴리스없이 전달됨). 즉, pipenv는 단기적으로도 여전히 해당 문제를 해결하기위한 명확한 일정없이 몇 가지 단점과 성능 문제로 어려움을 겪고 있음을 의미합니다.

이 경우에도 프로젝트 관리자는 pipenv 대신 또는 함께 사용하기 위해 응용 프로그램 종속성 관리를위한 기타 도구를 조사하려고합니다.

2020 년 4 월 pipenv 릴리스가 계획대로 진행되고 그 이후 릴리스도 계속 진행 중이라고 가정하면 학습서의이 경고는 제거됩니다. 해당 릴리스가 제대로 유지되지 않으면 학습서 자체가 제거되고 사용 가능한 종속성 관리 옵션에 대한 토론 페이지로 대체됩니다.


pipenv는 현재 (2020 년 5 월) 아직 2020 년 4 월 릴리스의 시험판에있는 것 같습니다. 여기를 참조 하십시오 .
Andrewjames

이것은 질문에 대답하지 않습니다.
Flimm

@Flimm이 질문에 잘 대답했다고 생각합니다. 나는 F1Linux의 답변에 응답했다
Arnuld

2020년 6월 4일로, pipenv팀은 PyPI 2 버전을 출시했습니다 2020.5.28그리고 최근, 2020.6.2: pypi.org/project/pipenv/#history
nonbeing
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.