Python 3.3은 표준 라이브러리에 새로운 패키지 venv
합니다. (py)?(v|virtual|pip)?env
와 일치하는 것으로 보이는 다른 모든 패키지와 어떻게 다릅니까?
질문자 :Flimm
초보자를 위한 권장 사항:
이것은 초보자를 위한 개인적인 권장 사항입니다. Python 2 및 3 및 다양한 상황에서 작동하는 도구인 virtualenv
및 pip
표준 라이브러리에 없는 PyPI 패키지:
-
virtualenv
는 Python 라이브러리용으로 격리된 Python 환경을 생성하는 매우 인기 있는 도구입니다. 이 도구에 익숙하지 않은 경우 매우 유용한 도구이므로 이 도구를 배우는 것이 좋습니다. 이 답변의 나머지 부분에서 이 도구와 비교할 것입니다.
env/
)에 많은 파일을 설치한 bin
디렉토리(예: env/bin/
)를 접두사로 추가 PATH
환경 변수를 수정하여 작동합니다. python
또는 python3
바이너리의 정확한 사본이 이 디렉토리에 있지만 Python은 환경 디렉토리에서 경로와 관련된 라이브러리를 먼저 찾도록 프로그래밍되어 있습니다. Python 표준 라이브러리의 일부는 아니지만 공식적으로 PyPA(Python Packaging Authority)의 축복을 받았습니다. pip
사용하여 가상 환경에 패키지를 설치할 수 있습니다.
pyenv
는 Python 버전을 분리하는 데 사용됩니다. 예를 들어 Python 2.7, 3.6, 3.7 및 3.8에 대해 코드를 테스트할 수 있으므로 둘 사이를 전환할 방법이 필요합니다.PATH
환경 변수에~/.pyenv/shims
접두사를 추가합니다. 여기에는 Python 명령(python
,pip
)과 일치하는 특수 파일이 있습니다. 이것은 Python에서 제공하는 명령의 복사본이 아닙니다.PYENV_VERSION
환경 변수,.python-version
파일 또는~/.pyenv/version
파일을 기반으로 실행할 Python 버전을 즉석에서 결정하는 특수 스크립트입니다.pyenv
pyenv install
명령을 사용하여 여러 Python 버전을 다운로드하고 설치하는 프로세스를 더 쉽게 만듭니다.pyenv-virtualenv
위한 플러그인입니다pyenv
같은 저자pyenv
, 당신이 사용할 수 있도록pyenv
및virtualenv
편리하게 동시에. 그러나 Python 3.3 이상을 사용하는 경우pyenv-virtualenv
는 사용 가능한 경우virtualenv
python -m venv
를 실행하려고 시도합니다. 편의 기능을 원하지 않으면pyenv-virtualenv
virtualenv
와pyenv
함께 사용할 수 있습니다.virtualenvwrapper
의 확장 집합입니다virtualenv
(참조 문서를 ). 그것은 당신이 같은 명령을 제공mkvirtualenv
,lssitepackages
, 특히workon
다른 사이를 전환virtualenv
디렉토리.virtualenv
디렉토리를 원할 때 특히 유용합니다.pyenv-virtualenvwrapper
위한 플러그인입니다pyenv
같은 저자pyenv
편리하게 통합 할 수있는,virtualenvwrapper
에pyenv
.pipenv
Pipfile
,pip
및virtualenv
를 명령줄에서 하나의 명령으로 결합하는 것을 목표로 합니다.virtualenv
디렉토리는 일반적으로~/.local/share/virtualenvs/XXX
에 배치되며XXX
는 프로젝트 디렉토리 경로의 해시입니다. 이것은 디렉토리가 일반적으로 현재 작업 디렉토리에 있는virtualenv
pipenv
는 Python 애플리케이션(라이브러리와 반대)을 개발할 때 사용하기 위한 것입니다.poetry
와 같은pipenv
대한 대안이 있습니다. 이 질문은 이름이 비슷한 패키지에 관한 것이므로 여기에 나열하지 않겠습니다.
표준 라이브러리:
pyvenv
pyenv
와 혼동하지 말 것)는 Python 3과 함께 제공되는 스크립트이지만 문제가 있기 때문에 Python 3.6에서 더 이상 사용되지 않습니다 (혼란스러운 이름은 말할 것도 없음). Python 3.6+에서 정확히 동등한 것은python3 -m venv
입니다.venv
는 Python 3과 함께 제공되는 패키지로,python3 -m venv
사용하여 실행할 수 있습니다(일부 배포판에서는 Ubuntu/Debian의python3-venv
와 같은 별도의 배포판 패키지로 분리하지만).virtualenv
와 같은 용도로 사용되지만 기능의 하위 집합만 있습니다( 여기에서 비교 참조 ).virtualenv
venv
보다 계속해서 더 인기가 있습니다. 특히 전자는 Python 2와 3을 모두 지원하기 때문입니다.
Flimm
virtualenv
사용을 피하고 대신 표준 제공 라이브러리 venv
를 사용합니다. 새 가상 환경을 만들려면 다음을 입력합니다.
$ python3 -m venv <MYVENV>
virtualenv
는 Python 바이너리를 가상 환경의 bin 디렉토리에 복사하려고 시도합니다. 그러나 해당 바이너리에 포함된 라이브러리 파일 링크는 업데이트하지 않으므로 소스에서 상대 경로 이름이 있는 비시스템 디렉토리로 Python을 빌드하면 Python 바이너리가 중단됩니다. 이것이 복사 배포 가능한 Python을 만드는 방법이므로 큰 결함입니다. BTW는 OS X에서 포함된 라이브러리 파일 링크를 검사하려면 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
가 사용되는 곳에서 자주 사용되는 것 같지만 venv
도 pyenv
가 구축된 목적을 수행한다고 생각하기 때문에 사용하지 않을 것입니다.
venv
는 사용자가 설치할 수 있는 라이브러리 를 사용하여 신선 하고 샌드박스 처리된 가상 환경을 셸에 생성하며 다중 파이썬에 안전 합니다.
Fresh : 가상 환경은 python과 함께 제공되는 표준 라이브러리로만 시작하기 때문에 가상 환경이 활성화되어 있는 동안 pip install
Sandboxed : 이러한 새 라이브러리 설치 중 어느 것도 가상 환경 외부에서 볼 수 없기 때문에 전체 환경을 삭제하고 기본 Python 설치에 영향을 미칠 염려 없이 다시 시작할 수 있습니다.
사용자 설치 가능한 라이브러리 : 가상 환경의 대상 폴더는 이미 소유한 일부 디렉토리에 sudo
없이 생성되므로 라이브러리를 설치하기 위해 sudo
multi-python safe : 가상 환경이 활성화되면 셸은 해당 가상 환경을 구축하는 데 사용된 Python 버전(3.4, 3.5 등)만 보기 때문입니다.
pyenv
는 여러 파이썬 환경을 관리할 수 있다는 점에서 venv
와 유사합니다. 그러나 pyenv
하면 라이브러리 설치를 일부 시작 상태로 편리하게 롤백할 수 없으며 라이브러리를 업데이트하려면 어느 시점에서 admin
venv
를 사용하는 것도 가장 좋은 방법이라고 생각합니다.
지난 몇 년 동안 저는 빌드 시스템(emacs 패키지, python 독립 실행형 애플리케이션 빌더, 설치 프로그램...)에서 궁극적으로 virtualenv
문제로 귀결되는 많은 문제를 발견했습니다. venv
만 사용할 때 python이 더 나은 플랫폼이 될 것이라고 생각합니다.
편집: BDFL의 트윗,
나는 venv(stdlib에 있음)와 많은 쉘 별칭을 사용하여 빠르게 전환합니다.Community Wiki
업데이트 20200825:
" 결론 " 단락 아래에 추가됨
pipenv
토끼 구멍 ( 그것은 실제로 깊고 어두운 구멍입니다 ... )을 내려 갔고 마지막 답변이 2 년 전에 끝났기 때문에 Python 가상 봉투 주제에 대한 최신 개발로 토론을 업데이트하는 것이 유용하다고 느꼈습니다. 내가 찾았 어.
부인 성명:
이 대답은 하나의 어떤 보증도하지 않습니다 pipenv 대 venv 같은 봉투 솔루션 - I의 장점에 대한 격렬한 논쟁을 계속에 대한 아닙니다. 이는 PyPA 가 상충되는 표준을 승인하고 virtualenv의 향후 개발이 둘 중 하나 또는 둘 중 하나를 선택하지 않는 것을 약속하는 방법에 관한 것입니다. 저는 이 두 도구에 집중했습니다. 왜냐하면 그것들은 PyPA에 의해 기름부음받은 도구이기 때문입니다.
벤브
OP가 언급했듯이 venv 는 환경을 가상화하기 위한 도구입니다. NOT 타사 솔루션 있지만, 기본 도구입니다. PyPA 보증 venv 가상 봉투를 만들기위한 " 버전 3.5에서 변경 : venv의 사용은 이제 가상 환경을 만드는 것이 좋습니다 ."
피펜
venv 와 같은 pipenv는 가상 봉투를 만드는 데 사용할 수 있지만 추가로 패키지 관리 및 취약성 검사 기능을 롤인합니다. 대신에 사용하는 requirements.txt
, pipenv
통해 패키지 관리 기능을 제공합니다 Pipfile . PyPA는 PACKAGE MANAGEMENT에 대해 pipenv를 승인하므로 pipfile
requirements.txt
를 대체하는 것으로 보입니다.
그러나이 : pipenv 사용하는 가상 봉투를 만들기위한 이동 - 투 도구로 PyPA에 의해 승인 된 venv, 가상 봉투를 만들기위한 도구로하지 VIRTUALENV.
상충되는 표준:
따라서 가상 엔벨로프 솔루션에 정착하는 것이 충분히 어렵지 않은 경우 이제 PyPA에서 서로 다른 가상 엔벨로프 솔루션을 사용하는 두 가지 도구를 승인하게 되었습니다. 이 충돌을 강조하는 venv 대 virtualenv 에 대한 격렬한 Github 토론은 여기에서 찾을 수 있습니다 .
갈등 해결:
위 링크에서 언급된 Github 토론은 향후 릴리스 에서 venv 를 수용하는 방향으로 virtualenv 개발을 주도했습니다.
기본 제공 venv 선호: 대상 파이썬에 venv가 있는 경우 이를 사용하여 환경을 생성합니다(그런 다음 우리가 제공하는 다른 보장을 용이하게 하기 위해 이에 대한 후속 작업을 수행합니다)
결론:
따라서 두 라이벌 가상 봉투 솔루션 사이에 미래 수렴이 있을 것으로 보이지만 현재 로서는 virtualenv
를 사용하는 venv
크게 다릅니다.
pipenv가 해결하는 문제 와 PyPA 가 축복을 주었다는 사실을 감안할 때 밝은 미래가 있는 것으로 보입니다. 그리고 virtualenv 가 제안된 개발 목표를 달성한다면 가상 봉투 솔루션을 선택하는 것이 더 이상 pipenv 또는 venv 의 경우가 되어서는 안 됩니다.
업데이트 20200825 :
이 분석을 생성할 때 내가 본 Pipenv에 대한 반복적인 비판은 적극적으로 유지되지 않는다는 것이었습니다. 과연, 지속적인 개발이 이루어지지 않아 미래가 불투명한 솔루션을 사용하는 것이 무슨 의미가 있을까요? 약 18개월의 건조 기간 후에 Pipenv 는 다시 한 번 활발히 개발되고 있습니다. 실제로 그 이후로 크고 중요한 업데이트가 릴리스되었습니다 .
F1Linux
이러한 도구가 해결하고자 하는 문제부터 시작하겠습니다.
내 시스템 패키지 관리자에 내가 원하는 Python 버전이 없거나 여러 Python 버전, Python 3.9.0 및 Python 3.9.1, Python 3.5.3 등을 나란히 설치하고 싶습니다.
그런 다음 pyenv를 사용하십시오.
서로 다른 충돌하는 종속성을 가진 여러 응용 프로그램을 설치하고 실행하고 싶습니다.
그런 다음 virtualenv 또는 venv를 사용하십시오. 이것들은 거의 완전히 상호 교환 가능합니다. 차이점은 virtualenv는 이전 Python 버전을 지원하고 몇 가지 사소한 고유 기능이 더 있지만 venv는 표준 라이브러리에 있다는 것입니다.
/application/을 개발 중이며 종속성을 관리하고 프로젝트 종속성의 종속성 해결을 관리해야 합니다.
그런 다음 pipenv 또는시를 사용하십시오.
/library/ 또는 /package/를 개발 중이며 라이브러리 사용자가 설치해야 하는 종속성을 지정하고 싶습니다.
그런 다음 setuptools를 사용하십시오.
virtualenv를 사용했지만 virtualenv 폴더가 다양한 프로젝트 폴더에 흩어져 있는 것을 좋아하지 않습니다. 환경의 중앙 집중식 관리와 간단한 프로젝트 관리를 원합니다.
그런 다음 virtualenvwrapper를 사용하십시오. 변형: pyenv도 사용하는 경우 pyenv-virtualenvwrapper입니다.
권장하지 않음
- 피벤 이것은 더 이상 사용되지 않으며 대신 venv 또는 virtualenv를 사용하십시오. pipenv 또는 pyenv와 혼동하지 마십시오.
Lie Ryan
2020년 1월 업데이트
@Flimm은 모든 차이점을 잘 설명했습니다. 일반적으로 우리는 우리에게 가장 적합한 것이 무엇인지 결정하기를 원하기 때문에 모든 도구의 차이점을 알고 싶습니다. 따라서 다음 질문은 다음 중 하나를 사용할 것입니다. 가상 환경을 관리하는 두 가지 공식적인 방법 중 하나를 선택하는 것이 좋습니다.
- Python Packaging은 이제 Pipenv를 권장합니다.
- Python.org는 이제 venv를 권장합니다.
Arnuld
- pyenv - 다양한 파이썬 버전을 관리합니다.
- 다른 모든 것 - 가상 환경 생성(격리된 python 버전 및 설치된 "요구 사항" 있음),
pipenv 는 이전에 "요구 사항"을 설치하는 것 외에도 모두 결합하기를 원합니다(활성 가상 환경에 설치하거나 활성 가상 환경이 없는 경우 자체 생성).
따라서 아마도 pipenv에만 만족할 것입니다.
그러나 나는 사용합니다: pyenv + pyenv-virtualenvwrapper, + pipenv (설치 요구 사항만을 위한 pipenv).
데비안:
apt install libffi-dev
https://www.tecmint.com/pyenv-install-and-manage-multiple-python-versions-in-linux/ 기반으로 pyenv를 설치하지만..
.. 하지만 pyenv-virtualenv 대신 pyenv-virtualenvwrapper를 설치합니다(독립형 라이브러리 또는 pyenv 플러그인이 될 수 있으며 여기서는 두 번째 옵션).
$ pyenv install 3.9.0 $ git clone https://github.com/pyenv/pyenv-virtualenvwrapper.git $(pyenv root)/plugins/pyenv-virtualenvwrapper # inside ~/.bashrc add: # export $VIRTUALENVWRAPPER_PYTHON="/usr/bin/python3" $ source ~/.bashrc $ pyenv virtualenvwrapper
그런 다음 프로젝트에 대한 가상 환경을 만듭니다(workingdir가 있어야 함).
pyenv local 3.9.0 # to prevent 'interpreter not found' in mkvirtualenv python -m pip install --upgrade pip setuptools wheel mkvirtualenv <venvname> -p python3.9 -a <workingdir>
프로젝트 간 전환:
workon <venvname> python -m pip install --upgrade pip setuptools wheel pipenv
프로젝트 내부에는 내부 버전을 수정하지 않고 requirements.txt 파일이 있습니다(일부 버전 제한이 필요하지 않은 경우). 현재 가상 환경에 설치할 수 있는 두 가지 도구가 있습니다: pip-tools 또는 pipenv . pipenv를 사용한다고 가정해 보겠습니다.
pipenv install -r requirements.txt
이렇게 하면 Pipfile 및 Pipfile.lock 파일이 생성되며 고정 버전은 두 번째 파일에 있습니다. 정확히 동일한 버전에 다시 설치하려면(Pipfile.lock이 있어야 함):
pipenv install
Pipfile.lock은 일부 Python 버전과 관련되어 있으며 다른 버전을 사용하는 경우 다시 만들어야 합니다.
보시다시피 저는 requirements.txt를 작성합니다. 여기에는 몇 가지 문제가 있습니다. Pipfile에서도 제거된 패키지를 제거해야 합니다. 따라서 Pipfile을 직접 작성하는 것이 더 나을 것입니다.
그래서 내가 pipenv를 매우 잘 사용하지 않는다는 것을 알 수 있습니다. 잘 사용하면 모든 것을 대체할 수 있지 않을까요?
2021.01 편집 : 스택을 pyenv + pyenv-virtualenvwrapper + poetry
. 즉. virtualenv 또는 virtualenvwrapper의 apt 또는 pip 설치를 사용하지 않고 대신 pyenv
의 플러그인 pyenv-virtualenvwrapper
합니다. 이것은 더 쉬운 방법입니다.
Poetry
는 저에게 좋습니다.
poetry add <package> # install single package poetry remove <package> poetry install # if you remove poetry.lock poetry will re-calculate versions
mirek
출처 : http:www.stackoverflow.com/questions/41573587/what-is-the-difference-between-venv-pyvenv-pyenv-virtualenv-virtualenvwrappe
'etc. > StackOverFlow' 카테고리의 다른 글
JavaScript 정규식에서 일치하는 그룹에 어떻게 액세스합니까? (0) | 2022.02.19 |
---|---|
rvalue, lvalue, xvalue, glvalue 및 prvalue는 무엇입니까? (0) | 2022.02.19 |
sed를 사용하여 줄 바꿈(\n)을 어떻게 바꿀 수 있습니까? (0) | 2022.02.19 |
Node.js module.exports의 목적은 무엇이며 어떻게 사용합니까? (0) | 2022.02.19 |
배열의 마지막 항목 가져오기 (0) | 2022.02.19 |