Conda vs Pip Python 가상환경과 패키지 관리 비교

2star_·2024년 10월 30일
0

Conda vs Pip: Python 가상환경과 패키지 관리 비교

오픈 소스 패키지 관리 시스템인 CondaPip에 대해 설명하고, 이 둘을 통해 어떻게 가상환경을 관리하고 설정할 수 있는지 알아보자.

Conda란?

Conda는 Python뿐만 아니라 C, Java 등 다양한 언어에 대한 패키지 환경 관리 시스템입니다. 운영체제와 관계없이 다양한 패키지와 종속성을 쉽게 설치할 수 있다는 장점이 있습니다. 또한 가상환경 생성 기능도 포함되어 있어, 여러 프로젝트를 관리하기에 적합합니다.

특히, Conda-Forge 채널을 통해 더 많은 라이브러리들을 쉽게 사용할 수 있는데, Conda-Forge는 다양한 패키지들을 사용자들에게 편하게 제공하는 역할을 합니다.

Pip란?

Pip도 Conda와 비슷한 패키지 관리자이지만, Python에만 한정되어 있습니다. 기본적으로 Python 생태계에서 가장 널리 사용되는 패키지 관리 도구이며, Conda보다 가볍고 간단하게 사용할 수 있다는 장점이 있습니다.

가상환경이란?

가상환경은 여러 버전의 Python과 라이브러리를 프로젝트 별로 독립적으로 관리할 수 있게 만들어줍니다. 이는 각 프로젝트의 호환성을 유지하는 데 매우 유용합니다.

  • Virtualenv: Python 2 버전 가상환경 라이브러리.
  • venv: Python 3.3 이후부터 기본 모듈에 포함된 가상환경 도구.
  • Conda: Anaconda에 포함된 가상환경 도구로, Pip + venv + 기타 기능을 통합한 것 같은 느낌으로 다양한 기능을 제공합니다.

Conda와 Pip 혼합 사용 시 발생할 수 있는 문제

Conda와 Pip을 혼합하여 사용하는 경우 여러 가지 문제가 발생할 수 있습니다. 예를 들어, Conda로 설치된 패키지와 Pip으로 설치된 패키지가 서로 다른 종속성을 필요로 하거나, 서로 충돌하는 경우가 있을 수 있습니다. 이는 특히 데이터 과학 프로젝트에서 복잡한 라이브러리들이 많이 사용될 때 문제가 됩니다. 예를 들어 Conda로 설치된 numpy가 특정 버전의 mkl_fft를 포함하고 있지만, Pip으로 설치된 다른 패키지가 이를 최신 버전으로 요구할 경우 충돌이 발생할 수 있습니다. 따라서, 가급적이면 한 가지 패키지 관리 시스템을 일관되게 사용하는 것이 좋습니다.

Conda와 Pip의 오류 예시

Conda는 기본적으로 Intel Distribution for Python을 포함하여 데이터 과학 연산 성능을 높이기 위한 다양한 패키지를 지원합니다. 예를 들어 conda install numpy 명령어를 실행하면 intel-numpy가 기본값으로 설치됩니다. 그러나 이 경우 mkl_fft 등 다른 패키지가 함께 설치되며, 이는 pip install -r requirements.txt를 통해 PyPI에서 최신 버전을 설치하려 할 때 충돌이 발생할 수 있습니다. 따라서, PyPI 버전에 맞춰 설치를 진행해야 합니다.

속도 비교: Conda vs Pip

일반적으로 Numpy, SciPy, Scikit-Learn 등 과학 연산 라이브러리는 Conda로 설치하는 것이 Pip로 설치하는 것보다 더 빠릅니다. 이는 Conda가 이러한 라이브러리를 최적화된 방식으로 패키징해 배포하기 때문입니다.

환경 Pack하기

지금까지 설정한 가상환경을 다른 시스템에서도 쉽게 재사용할 수 있도록 환경을 pack으로 만들 수 있습니다. 이를 통해 같은 환경을 쉽게 설정할 수 있습니다.

  1. conda-pack 설치:

    conda install conda-pack
  2. 가상환경 pack 생성:

    conda pack -n [환경이름] -o [파일명]

    예를 들어 conda pack -n py1 -o py1.zip 명령어를 사용하면 가상환경을 압축하여 py1.zip 파일로 저장할 수 있습니다.

  3. 생성된 pack 파일 위치 확인:
    Pack 파일은 명령어를 실행한 디렉토리에 저장됩니다. 기본적으로 명령어를 실행한 위치에서 해당 파일을 찾을 수 있으며, 파일의 위치를 확인하기 위해 ls(Linux, macOS) 또는 dir(Windows) 명령어를 사용해 파일 목록을 확인할 수 있습니다.
    지금까지 설정한 가상환경을 다른 시스템에서도 쉽게 재사용할 수 있도록 환경을 pack으로 만들 수 있습니다. 이를 통해 같은 환경을 쉽게 설정할 수 있습니다.

  4. conda-pack 설치:

    conda install conda-pack
  5. 가상환경 pack 생성:

    conda pack -n [환경이름] -o [파일명]

    예를 들어 conda pack -n py1 -o py1.zip 명령어를 사용하면 가상환경을 압축하여 py1.zip 파일로 저장할 수 있습니다.

Pip 패키지 자동 설치

현재 설치된 패키지를 다른 환경에서도 자동으로 설치하고 싶을 때, Pipfreeze 명령어를 사용할 수 있습니다.

  1. 현재 설치된 패키지 확인 및 저장:

    pip freeze > requirements.txt

    requirements.txt 파일은 관습적으로 Python 패키지 정보를 저장하는 파일로 사용됩니다.

  2. 패키지 설치:

    pip install -r requirements.txt

    이 명령어를 사용하면, 저장된 패키지와 버전을 다른 환경에 쉽게 설치할 수 있습니다.

단, Conda로 설치한 패키지는 pip freeze 명령어로 기록되지 않을 수 있으므로, 이러한 경우에는 Pip과 Conda를 혼합하여 사용하는 대신 한 가지 방법으로 일관되게 설치하는 것이 좋습니다.

가상환경 복원하기

Pack으로 만든 가상환경 압축 파일을 envs 폴더에 풀어주면, 가상환경이 자동으로 인식됩니다. 이를 통해 가상환경을 손쉽게 복원하고 재사용할 수 있습니다.

가상환경 복원 단계

  1. 압축 풀기: 먼저 pack으로 압축한 파일을 envs 폴더에 풀어줍니다. 예를 들어, py1.zip 파일을 풀 때는 다음과 같이 합니다.

    unzip py1.zip -d [conda 환경 폴더]/envs/

    이렇게 하면 envs 경로에 해당 가상환경이 복원됩니다.

  2. 패키지 불러오기: 복원된 가상환경을 활성화한 후, 필요한 추가 패키지를 설치할 수 있습니다. 가상환경을 활성화하려면 다음 명령어를 사용합니다.

    conda activate [환경이름]

    활성화한 후에 추가적으로 필요한 패키지를 Conda 또는 Pip으로 설치할 수 있습니다.

  3. 필요한 패키지 업데이트: 가상환경을 복원한 후 특정 패키지들이 업데이트가 필요하다면, conda update 또는 pip install --upgrade 명령어를 사용해 업데이트할 수 있습니다. 예를 들어:

    conda update scikit-learn
    pip install --upgrade requests

다른 패키지 불러오기 방법

  • 환경 파일로 복원: Conda 환경을 yaml 파일로 내보내고 이를 이용해 환경을 복원할 수도 있습니다.

    1. 환경 내보내기:
      conda env export > environment.yaml
    2. 환경 복원하기:
      conda env create -f environment.yaml
      이 방법은 가상환경을 압축하는 대신 텍스트 파일로 저장하여, 다른 시스템에서 동일한 환경을 쉽게 생성할 수 있도록 합니다.
  • Pip을 통한 복원: 만약 Pip을 사용하여 복원하고자 한다면, requirements.txt 파일을 활용해 필요한 패키지를 일괄 설치할 수 있습니다.

    pip install -r requirements.txt

    이는 Conda와 다르게 주로 Python 패키지 위주로 환경을 복원할 때 사용됩니다.

압축을 envs 경로에 풀면 환경이 자동으로 인식되며, 이를 통해 새로운 시스템에서도 기존 환경을 그대로 사용할 수 있습니다.


오늘 새로운 강의 ai 활용편 첫주차를 들으면서 conda와 pip에 대해서 공부해봤다. 확실하게 정의를 잡지않고 가상환경을 만들었었고, 그 전의 실습과제에서 공포의 라이브러리충돌을 맛봤기에 확실하게 짚고 넘어가자 생각하고 공부했다...

profile
안녕하세요.

0개의 댓글