개발을 하면서 패키지를 설치하는 경우가 많은데, 지금은 conda install, pip install을 사용해서 패키지를 설치하고 서버를 할당받았을 때는 apt install도 사용했었다.
여태까지는 그냥 필요하니까 설치하겠거니 하고 지나갔는데 문득 이들은 어떻게 다른걸까라는 의문이 들었다.
pip
pip는 Pypi에 저장된 파이썬 관련 패키지 설치를 관리해주는 Python에 한정된 패키지 관리자이다.
Pypi(Python Package Index)는 말그대로 파이썬 패키지를 번호 붙여서 관리하는 파이썬 패키지 저장소라고 할 수 있다.
conda
conda는 일단 가상환경을 생성할 수 있고 pip와 다르게 Python 외에도 C, Java 등 다른언어를 포함한 패키지 관리자이다.
conda는 pip가 Pypi라는 지정된 저장소에서 가져오는 것과 다르게 채널마다 자체 저장소에서 가져온다고 보면 된다.
conda의 채널은 크게 Anaconda, miniconda, miniforge가 있다.
Anaconda는 Python + 다량의 패키지들, Navigator라는 ui 툴을 제공하기 때문에 초심자의 접근이 쉽다. 하지만 일반적으로 모든 패키지를 다 사용하지는 않기 때문에 더 작은 용량인 minicodna나 miniforge를 사용한다.
miniconda는 Anaconda에서 관리하고 있고
miniforge는 오픈소스 커뮤니티에서 관리하고 있다.
지금은 어떤지 모르겠지만 이전에는 miniforge만 M1을 지원했기 때문에 나는 miniforge를 사용하고 있다.
그래서 pip? conda?
일단 기본적으로 conda로 설치하는게 좋다고 한다.
pip는 소스를 받아서 cpp빌드하는 경우가 있어서 cpp빌드에서 오류가 나는 경우가 있지만, conda는 항상 os에 맞게 미리 빌드된 패키지가 설치된다고 한다.
또 conda update -all을 사용하면 해당 가상환경에 설치된 모든 패키지들을 한번에 업데이트 시켜준다고 한다.
하지만 이때 pip로 설치된 패키지는 업데이트 되지 않으므로 처음부터 conda로만 설치하는게 좋다고 한다. (여러 라이브러리를 설치하다보면 의존성 문제가 발생할 수 있다.)
하지만 conda가 미리 빌드된 패키지를 설치해주기 때문에 최신 버전이 올라오면 pip에는 있지만 conda에는 없는 경우가 있을 수 있다.
conda로 가상환경을 활성화시키면 pip로 설치해도 해당 가상환경에 설치되기 때문에 반드시 base가 아닌 새로운 가상환경에서 패키지를 설치해야한다. (base에 설치하면 문제가 복잡해질 수 있다...)
그리고 pip가 아닌 pip2, pip3로 설치하면 가상환경이 아니라 전역에 설치되므로 조심해야 한다. (이건 사실 잘모르겠다... 어차피 안쓰던거 걍 쓰지말자...)
* pip, conda가 아니라 Python, Anaconda 관점에서 Python과 Anaconda 둘 중 하나만 설치하는 것을 추천한다고 한다. 둘다 설치하는 경우 중복되는 파일들이 많고 환경 변수 충돌 등의 문제가 발생할 수 있다고 한다. (나는 둘다 설치한거 같은데 나중에 오류나면 해결해야 겠다. 어쩐지 파이썬 인터프리터 선택할 때마다 뭔가 이상한거 같긴 했다... 나중엔 miniforge만 설치해야겠다...)
apt (advanced packaging tool)
apt 또는 apt-get은 리눅스에서 사용하는 패키지 관리자이다.
apt나 apt-get이나 큰 차이는 없으나,
일반적으로 사용할 때는 apt가 더 간결하고 가독성이 좋기 때문에 사람들이 많이 사용하고
apt-get은 설명이 자세하고 apt보다 더 많은 세부 옵션들을 가지고 있기 때문에 더 많은 기능을 사용할 수 있어서 서버에서 트러블 슈팅을 해결하거나 스크립트를 작성할 때 사용한다고 한다.
'Python' 카테고리의 다른 글
[고성능 파이썬] 3. 리스트와 튜플 (0) | 2023.01.25 |
---|---|
[고성능 파이썬] 2. 프로파일링으로 병목 지점 찾기 (0) | 2023.01.24 |
[고성능 파이썬] 1. 고성능 파이썬 이해하기 (0) | 2023.01.23 |
주식 가격 크롤링 & 엑셀 저장 (0) | 2022.11.25 |
문자열로 된 파이썬 코드 (0) | 2022.08.02 |