[python] Conda는 virtualenv의 필요성을 대체합니까?

나는 최근에 발견 CONDA를 내가 특별히 내가 개발하고있는 Heroku가 응용 프로그램에 문제가 SciPy를 설치하는 데있었습니다.

Conda를 사용하면 virtualenv 와 매우 유사한 환경을 만들 수 있습니다 . 내 질문은 :

  1. Conda를 사용하면 virtualenv가 필요합니까? 그렇지 않은 경우 두 가지를 어떻게 함께 사용합니까? Conda에 virtualenv를 설치하거나 virtualenv에 Conda를 설치합니까?
  2. 여전히 핍을 사용해야합니까? 그렇다면 여전히 격리 된 환경에서 pip로 패키지를 설치할 수 있습니까?


답변

  1. Conda가 virtualenv를 대체합니다. 제 생각에는 더 좋습니다. 파이썬에만 국한되지 않고 다른 언어에도 사용될 수 있습니다. 내 경험상 그것은 특히 과학 패키지에 대해 훨씬 부드러운 경험을 제공합니다. Mac에 MayaVi를 처음 설치했을 때는와 함께 conda있었습니다.

  2. 계속 사용할 수 있습니다 pip. 실제로, 각각의 새로운 환경에 conda설치 pip됩니다. pip-installed 패키지에 대해 알고 있습니다.

예를 들면 다음과 같습니다.

conda list

현재 환경에 설치된 모든 패키지를 나열합니다. Conda 설치 패키지는 다음과 같이 나타납니다.

sphinx_rtd_theme          0.1.7                    py35_0    defaults

를 통해 설치된 것들 pip에는 <pip>마커가 있습니다 :

wxpython-common           3.0.0.0                   <pip>


답변

짧은 대답은 콘다 만 필요하다는 것입니다.

  1. Conda는 pip 및 virtualenv의 기능을 단일 패키지에 효과적으로 결합하므로 conda를 사용하는 경우 virtualenv가 필요하지 않습니다.

  2. conda가 얼마나 많은 패키지를 지원하는지 놀라실 것입니다. 충분하지 않으면 conda에서 pip를 사용할 수 있습니다.

다음은 conda, pip 및 virtualenv를 비교 한 conda 페이지 링크입니다.

https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands .


답변

가상 환경 pip

나는 것을 추가 할 것이다 생성제거 CONDA 환경 것은 아나콘다와 간단합니다.

> conda create --name <envname> python=<version> <optional dependencies>

> conda remove --name <envname> --all 

에서 활성화 환경 , 패키지를 통해 설치 conda하거나 pip:

(envname)> conda install <package>

(envname)> pip install <package>

이러한 환경은 conda의 pip-like package management와 밀접하게 연관되어 있으므로 환경을 작성하고 Python 및 비 Python 패키지를 모두 설치하는 것이 간단합니다.


주피터

또한 환경에 설치ipykernel 하면 Jupyter 노트북의 커널 드롭 다운 메뉴에 새로운 목록이 추가되어 재현 가능한 환경이 노트북으로 확장됩니다. Anaconda 4.1 부터 노트북에 확장 기능을 더 쉽게 추가하여 nbextensions가 추가되었습니다 .

신뢰할 수 있음

내 경험에 의하면, CONDA 더 빠르고 신뢰할 수있는 등 큰 라이브러리를 설치에서이다 numpypandas. 또한 보존 된 환경 상태를 전송하려는 경우 환경을 공유 하거나 복제 하여 수행 할 수 있습니다 .


답변

Conda를 설치하면 원하는대로 Python 환경을 만들고 제거 할 수 있으므로 virtualenv 와 동일한 기능을 제공합니다 .

두 배포판의 경우, 원하는대로 파이썬 패키지 (아마도 pip로)를 설치하고 제거 할 수있는 격리 된 파일 시스템 트리를 만들 수 있습니다. 다른 사용 사례에 대해 동일한 라이브러리의 다른 버전을 사용하거나 일부 배포를 시도한 후 디스크 공간을 절약 한 후에 제거하려는 경우에 유용 할 수 있습니다.

차이점 :

라이센스 계약. VIRTUALENV 대부분의 자유에 해당되는 동안 MIT 라이센스 , CONDA은 3 절 BSD 라이선스를 사용합니다.

Conda는 자체 패키지 제어 시스템을 제공합니다. 이 패키지 제어 시스템은 종종 인기있는 비 파이썬 소프트웨어의 사전 컴파일 버전 (가장 인기있는 시스템을 위해)을 제공합니다. 즉, 시스템에 맞게 최적화 된 C / C ++ 코드를 컴파일 할 필요가 없습니다. 대부분의 사람들에게 큰 도움이되지만 그러한 라이브러리의 성능에 영향을 줄 수 있습니다.

virtualenv와 달리 Conda는 적어도 Linux 시스템에서 일부 시스템 라이브러리를 복제합니다. 이 라이브러리는 동기화되지 않아 프로그램의 일관성없는 동작으로 이어질 수 있습니다.

평결:

Conda는 훌륭하며 머신 러닝을 시작하는 동안 기본 선택이되어야합니다. 그것은 당신에게 gcc와 수많은 패키지를 엉망으로 만드는 시간을 절약 할 것입니다. 그러나 Conda는 virtualenv를 대체하지 않습니다. 항상 바람직하지 않을 수도있는 몇 가지 추가적인 복잡성을 소개합니다. 다른 라이센스하에 있습니다. 분산 환경 또는 HPC 하드웨어에서 conda를 사용하지 않을 수 있습니다.


답변

나는 (2020 년 1 월 현재) 둘 다를 사용하는데, 그것들은 저에게 다른 사용법에 도움이되는 약간의 피상적 인 차이점이 있습니다. 하여 기본 VIRTUALENV 현재 디렉토리에 폴더를 만드는 반면 CONDA는 중앙 위치에 당신을위한 환경의 목록을 관리 할 수 좋아한다. 전자 (중앙 집중식)는 예를 들어 머신 러닝을 수행하고 있고 여러 프로젝트에서 사용하고 어디에서나 뛰어 넘기를 원하는 두 개의 광범위한 환경을 보유한 경우에 적합합니다. 후자는 (프로젝트 폴더 당) 실제로 프로젝트 자체에 더 많은 완전히 다른 lib 요구 사항 세트가있는 일회성 프로젝트를 수행하는 경우 의미가 있습니다.

Conda가 생성하는 빈 환경은 약 122MB이지만 virtualenv는 약 12MB이므로 Conda 환경을 어디에나 분산시키지 않는 것이 좋습니다.

마지막으로 Conda가 중앙 집중식 환경을 선호한다는 또 다른 피상적 인 표시는 자신의 프로젝트 폴더에 Conda 환경을 만들고 활성화하면 쉘에 나타나는 이름 접두사가 (너무 길다) 절대적이라는 것입니다 (기본적으로) 폴더 경로. 이름을 지정하여 문제를 해결할 수 있지만 virtualenv는 기본적으로 올바른 일을합니다.

두 패키지 관리자가 지배하기 위해 경쟁함에 따라이 정보가 빨리 부실해질 것으로 예상되지만 오늘날의 트레이드 오프입니다. 🙂


답변

환경을 시작하고 실행하는 또 다른 새로운 옵션과 현재 선호되는 방법은 Pipenv입니다.

현재 Python.org에서 공식적으로 권장하는 Python 패키징 도구입니다.


답변

예. conda보다 설치하기가 훨씬 쉬우 며 virtualenv후자를 대체합니다.