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


205

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

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

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

Heroku에서 conda와 pip를 사용하려면 github.com/faph/conda-pip-buildpack
faph

감사. 나는 github에 Heroku를위한 많은 conda 빌드 팩이 있음을 알았습니다. 사용할 빌드 팩을 결정할 때 어떤 요소를 고려해야합니까?
Kritz

Continuum 서버에서 직접 사용할 수없는 패키지를 설치하려면 여전히 pip를 사용해야합니다.
ali_m

예, 나는 여전히 장고 1.8 (1.9 아님)에 있음을 알았습니다. 현재 나는 필요에 따라 콘다 (시피와 numpy)와 pip를 사용할 것입니다. 그러나 여전히 콘다 안에 있습니다.
Kritz

대부분의 conda Heroku 빌드 팩은 Kenneth Reitz가 만든 것입니다. 사람들이 자신의 취향에 맞게 조정합니다. 필요한 경우 conda와 pip 지원이 모두 포함되어 있는지 확인하십시오. 그리고 그들이 environment.yml 파일을 지원한다면. 항상 빌드 팩 코드를 신속하게 살펴보고 빌드 스크립트가 마음에 드는지 확인할 수 있습니다 (예 : 환경이 정확히 어떻게 생성되는지 확인).
faph

답변:


157
  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>

8
Anaconda 환경에서 pip를 사용하는 것에 대한 부정적인 점이 있습니까? Conda를 통해 패키지를 사용할 수 있지만 pip를 사용하려는 경우가 있습니까?
clifgray

차이점은 하이픈과 밑줄입니까? 패키지 이름이 없으면 어떻게됩니까? 그렇다면 차별화하는 방법?
Tom Hale

1
밑줄 또는 하이픈은 패키지 이름의 일부입니다. 이것은 핍이나 콘다와 관련이 없습니다. 이 <pip>표시는 pip로 설치되었으며 그렇지 않으면 conda로 설치되었음을 나타냅니다.
Mike Müller

4
"conda는 pip-installed packages에 대해 알고 있습니다"라는 큰 경고가 있습니다. 내 이해에서, conda env 내부에서 pip는 독립적으로 작동하므로 conda는 예를 들어 pip 설치 패키지를 제거 할 수 없습니다
information_interchange

1
@clifgray-네이티브 공유 라이브러리가있는 pip 및 conda 패키지는 C 디버거를 사용하지 않는 사람을 위해 모든 종류의 네이티브 세계 실패 (sigsegv-s 등)를 디버깅하기 어려운 바이너리 비 호환 버전을 설치할 수 있습니다. 파이썬 전용 패키지와 마찬가지로 이해하기 쉽습니다.
보바

61

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

  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 .


34

가상 환경 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. 또한 보존 된 환경 상태를 전송하려는 경우 환경을 공유 하거나 복제 하여 수행 할 수 있습니다 .


18

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

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

차이점 :

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

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

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

평결:

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


2
왜 "분산 환경이나 HPC 하드웨어에서 conda를 사용하지 않기를 원할까요?" @ y.selivonchyk
Oliver Hu

1
나는 이러한 결론 중 일부에 동의하지 않습니다. "일관되지 않은 프로그램 동작"은 conda설치된 소프트웨어 및 라이브러리 를 사용하도록 프로그램을 올바르게 구성하지 않은 결과입니다 . 그리고 HPC에서는 conda많은 경우에 바람직합니다. 실제로 HPC 관리자는 module시스템 과 같은 것을 대체하기 위해 사용하고 있습니다. HPC의 두 가지 큰 문제인 사용자 설치 소프트웨어와 더 큰 소프트웨어 격리가 가능합니다. 내가 경험하는 유일한 경고는 많은 HPC 파일 시스템이 디렉토리의 파일 수에 대한 제한이 있으며 conda는 1,000 개의 파일을 생성한다는 것입니다.
user5359531

9

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

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

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

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


좋은 설명입니다! 둘 다 사용하는데 어려움이 있습니까? 사용한 적이 pipenv있습니까?
Mikhail_Sam

8

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

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


1
이 "어? pipenv 무엇인가?"묻는 메시지를 알려준하는 reddit.com/r/Python/comments/8jd6aq/...sedimental.org/the_packaging_gradient.html . 나는 아직도 무엇을 사용 해야할지 모르겠지만 적어도 더 잘 알고 있습니다. 내 생각에
matt wilkie

소개를보고 빠르게 소개를 읽은 후 pipenv 는 Python 버전을 관리 할 수없는 것 같습니다.
Carles Alcolea

: @CarlesAlcolea의 pipenv에 의해뿐만 아니라 다양한 버전을 지정할 수 있습니다 pipenv --twopython3에 대한 Python2 및 pipenv --three 위해
쿠 리안 Benoy

3

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


6
Anaconda가 가상 환경을 대체 할 경우 가상 환경 설치에 대한 지침을 제공하는 이유는 무엇입니까?
jmh

1
@jmh Anaconda는 가상 환경을 대체하지 않으며 Python 관련 가상 환경 관리 도구 virtualenv를보다 일반적인 가상 환경 관리 도구로 대체합니다 conda. 또한 Anaconda는 Conda 도구가 포함 된 Python + 배포판 일뿐입니다. 질문과 답변은 Conda에 관한 것입니다.
merv

3
이 답변은 몇 년 전에 나온 답변 외에는 아무것도 추가하지 않습니다.
merv

1

관리자가없는 컴퓨터에서 여러 방화벽 뒤에서 회사에서 일하고 있습니다.

파이썬 (2 년)에 대한 제한된 경험에서 pip를 통해 설치할 때 C ++ 종속성 오류 오류를 발생시키는 몇 가지 라이브러리 (JayDeBeApi, sasl)를 발견했습니다 .Microsoft Visual C ++ 14.0이 필요합니다. "Microsoft Visual C ++ 빌드 도구"를 사용하십시오. http://landinghub.visualstudio.com/visual-cpp-build-tools

이들은 conda와 함께 잘 설치되었으므로 그 날부터 conda env로 작업하기 시작했습니다. 그러나 쓰기 액세스 권한이없는 c.programfiles 내부에 conda를 설치하지 못하게하는 것은 쉬운 일이 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.