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

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



답변

표준 라이브러리에없는 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에서 작동하는 다양한 도구와 다양한 상황에서 필요한 도구가 있으면 다른 도구를 선택하십시오.


답변

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.


답변

나는 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 .


답변

2020 년 4 월 업데이트

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

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

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

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


답변