가상환경과 패키지 관리 기초 (24)
안녕하세요. 이번에는 파이썬 개발에 있어서 정말 중요하고 필수적인 내용인 가상환경과 패키지 관리에 대해 알아보도록 하겠습니다.
파이썬으로 개발을 하다 보면 다양한 라이브러리와 프레임워크를 사용하게 되는데, 이 과정에서 패키지 의존성 문제나 버전 호환성 문제가 발생하곤 합니다. 이런 문제를 해결하기 위해 바로 가상환경을 사용하는 것입니다.
가상환경을 사용하면 프로젝트별로 독립된 파이썬 실행 환경을 만들어 패키지 충돌 없이 개발할 수 있습니다. 그리고 pip라는 파이썬 패키지 관리자를 통해 필요한 라이브러리를 쉽게 설치하고 관리할 수 있죠.
이번 시간에는 가상환경을 만드는 방법과 pip를 통한 패키지 관리에 대해 구체적으로 배워보겠습니다. 또한 유용한 파이썬 패키지들도 소개해드릴게요. 가상환경 사용과 체계적인 패키지 관리는 성공적인 파이썬 개발의 핵심이라 할 수 있습니다. 지금부터 차근차근 살펴보도록 하죠!
가상환경이란?
가상환경(Virtual Environment)이란 프로젝트별로 독립된 파이썬 실행 환경을 만들어주는 도구입니다.
파이썬에는 많은 외부 패키지와 라이브러리가 존재하는데, 이를 사용하다 보면 종종 충돌이 일어나거나 다른 프로젝트에 영향을 주는 문제가 발생합니다. 이는 여러 프로젝트에서 동일한 패키지를 다른 버전으로 사용하거나, 의존성이 있는 다른 패키지 간 버전 문제가 발생하는 경우가 많기 때문인데요.
이런 문제를 해결하기 위해 파이썬에서는 격리된(isolated) 가상환경을 만들어 프로젝트별로 패키지를 독립적으로 관리할 수 있게 해줍니다. 가상환경은 완전히 분리된 파이썬 실행 환경으로, 시스템에 설치된 다른 패키지나 파이썬 버전에 영향을 받지 않습니다.
가상환경을 사용하면 다음과 같은 장점이 있습니다:
- 프로젝트 종속성 격리 : 가상환경 내에서만 패키지가 설치되므로 시스템이나 다른 가상환경의 패키지와 충돌하지 않습니다.
- 패키지 버전 관리 용이 : 프로젝트별로 필요한 패키지 버전을 자유롭게 설치하고 관리할 수 있어 협업시 용이합니다.
- 쉬운 개발 환경 공유 : 사용한 패키지 목록을 공유하여 다른 개발자가 동일한 환경을 쉽게 구축할 수 있습니다.
- 깨끗한 시스템 유지 : 가상환경에 패키지를 설치하므로 시스템 전역 파이썬에는 불필요한 패키지가 설치되지 않아 깨끗한 상태로 유지할 수 있습니다.
특히 개발 단계에서의 가상환경 사용은 필수적이라 할 수 있는데요. 패키지 의존성 문제를 사전에 방지하고 정돈된 개발 환경을 유지할 수 있기 때문입니다.
하지만 단순히 스크립트를 실행만 하는 경우라면 가상환경까지 만들 필요는 없습니다. 또한 서버 배포 환경에서는 가상환경 대신 도커(Docker)와 같은 컨테이너 기술을 사용하는 것이 효과적일 수 있습니다.
파이썬에서 가상환경을 만드는 도구로는 venv, virtualenv, conda 등이 있는데요. 기본 모듈인 venv를 사용하는 것이 가장 간단하므로 이에 대해 먼저 알아보겠습니다.
venv로 가상환경 만들기
venv는 파이썬 3.3 버전부터 기본 모듈로 제공되는 가상환경 도구입니다. 간단한 명령어로 가상환경을 만들고 활성화할 수 있어 많이 사용되고 있는데요. 지금부터 가상환경 생성 및 사용 방법에 대해 자세히 알아보겠습니다.
가상환경 생성
가상환경을 만드는 방법은 다음과 같습니다. 먼저 가상환경을 생성할 디렉토리로 이동 후 아래 명령어를 실행합니다.
python -m venv myenv
여기서 myenv는 가상환경 디렉토리명으로 원하는 이름으로 지정하면 됩니다. 이 명령어를 실행하면 현재 디렉토리 아래에 myenv라는 디렉토리가 생성됩니다.
생성된 가상환경 디렉토리에는 파이썬 실행파일, 라이브러리 폴더 등이 새롭게 담기게 됩니다.
가상환경 활성화
생성한 가상환경을 사용하려면 활성화(activate)를 해주어야 합니다. 가상환경 디렉토리 내의 activate 스크립트를 실행하면 되는데요. 운영체제별로 명령어가 조금씩 다릅니다.
- 윈도우:
myenv\Scripts\activate
- 맥OS/리눅스:
source myenv/bin/activate
가상환경이 활성화 되면 쉘 프롬프트 앞에 가상환경명이 표시되어 현재 가상환경이 적용중임을 알 수 있습니다.
(myenv) $
가상환경 상태에서는 해당 환경 내에 설치된 파이썬과 패키지만 사용되며, pip 명령어로 패키지를 설치하면 가상환경에만 적용됩니다.
가상환경 비활성화
가상환경 사용을 마치려면 아래 명령어로 비활성화 해줍니다.
(myenv) $ deactivate
비활성화 하면 쉘 프롬프트의 가상환경명이 사라지고 전역 파이썬 환경으로 돌아가게 됩니다.
가상환경 사용은 이처럼 간단합니다. 프로젝트 단위로 가상환경을 만들어 사용하면 패키지 충돌 문제를 해결할 수 있으므로 꼭 활용해 보시기 바랍니다.
virtualenv와 conda
virtualenv
virtualenv는 파이썬 가상환경을 만들어주는 도구 중 가장 널리 쓰이는 라이브러리 입니다. venv와 비슷하지만 좀 더 다양한 기능을 제공하죠. virtualenv의 주요 기능은 다음과 같습니다.
- 다른 버전의 파이썬 지정 가능
- 시스템 사이트 패키지를 가상환경에 포함할지 여부 설정
- 현재 환경을 그대로 가상환경에 복제
virtualenv를 사용하려면 먼저 pip로 설치해줍니다.
pip install virtualenv
그 다음 아래 명령어로 가상환경을 만들 수 있습니다.
virtualenv myenv
사용 방법은 venv와 동일합니다. 자세한 내용은 virtualenv 공식 문서를 참고해 보세요.
conda
conda는 파이썬 배포판인 아나콘다(Anaconda)에 포함된 패키지 관리 시스템이자 가상환경 관리 도구입니다.
conda는 pip처럼 conda install 명령어로 파이썬 패키지를 설치할 수 있을 뿐만 아니라, 다른 언어 패키지도 설치할 수 있다는 게 장점입니다. 또한 패키지의 의존성을 자동으로 관리해주므로 과학 계산, 데이터 분석 분야에서 많이 사용되고 있죠.
conda 가상환경은 다음 명령어로 만듭니다.
conda create -n myenv python=3.9
-n 옵션 뒤에 가상환경명을 쓰고, python 옵션으로 원하는 파이썬 버전을 지정할 수 있습니다.
conda 가상환경을 활성화, 비활성화하는 법은 아래와 같이 조금 다릅니다.
# 활성화
$ conda activate myenv
# 비활성화
(myenv) $ conda deactivate
conda를 설치하고 사용하는 방법은 아나콘다 공식 문서를 참고하시기 바랍니다.
패키지 관리자 pip
pip는 파이썬을 설치할 때 기본으로 딸려오는 패키지 관리 도구입니다. PyPI(Python Package Index)에 등록된 외부 패키지를 검색하고 설치, 삭제, 업그레이드할 수 있죠.
pip의 기본 사용법은 다음과 같습니다.
패키지 설치
pip install 명령어 뒤에 패키지명을 써주면 PyPI에서 최신 버전의 패키지를 내려받아 설치합니다.
pip install <package>
# 예시 - pandas 설치
pip install pandas
특정 버전을 설치하고 싶다면 패키지명 뒤에 ==로 버전을 명시합니다.
pip install <package>==<version>
# numpy 1.19.3 버전 설치
pip install numpy==1.19.3
패키지 삭제
pip uninstall 명령어로 설치된 패키지를 삭제할 수 있습니다.
pip uninstall <package>
패키지 목록 확인
pip list 명령어는 현재 환경에 설치된 패키지 목록을 보여줍니다.
> pip list
Package Version
---------- -------
numpy 1.19.3
pandas 1.2.4
pip 21.1.1
setuptools 56.0.0
pip freeze > requirements.txt 명령어를 사용하면 설치된 패키지 정보를 requirements.txt 파일로 출력할 수 있는데요. 이 파일을 다른 개발자와 공유하면 동일한 종속성을 가진 환경을 쉽게 구축할 수 있습니다.
pip 공식 문서와 PyPI에서 pip 사용법과 다양한 파이썬 패키지에 대한 정보를 얻을 수 있으니 참고해 보세요.
유용한 파이썬 패키지 소개
지금까지 파이썬 가상환경 도구와 패키지 관리자인 pip에 대해 알아보았는데요. 여기서는 파이썬 개발 시 유용하게 쓰이는 몇 가지 패키지를 간단히 소개하고자 합니다.
- NumPy : 파이썬 과학 컴퓨팅에 필수적인 라이브러리로 다차원 배열과 행렬 연산 기능을 제공합니다. 브로드캐스팅, 배열 인덱싱/슬라이싱 등 다양한 기능이 있습니다.
- pandas : 데이터 분석 라이브러리로 NumPy 기반으로 동작합니다. 테이블 형태의 데이터를 다루기에 최적화되어 있으며, 데이터프레임(DataFrame)과 시리즈(Series)라는 자료구조를 제공합니다. 데이터 로딩, 정제, 변형, 집계, 시각화 등에 활용됩니다.
- matplotlib : 파이썬 데이터 시각화의 대표 주자입니다. 라인 플롯, 히스토그램, 산점도, 이미지 플롯 등 다양한 그래프를 그릴 수 있습니다. 서브플롯 기능과 그래프 스타일 지정이 가능해 커스터마이징도 쉽습니다.
- scikit-learn : 파이썬 머신러닝 라이브러리로 사이킷런이라고 불립니다. Classification, Regression, Clustering, Dimensionality reduction 등 다양한 머신러닝 알고리즘을 구현하고 있어 데이터 분석과 모델링에 사용됩니다.
- requests : 파이썬에서 HTTP 요청을 쉽게 보낼 수 있게 해주는 라이브러리입니다. GET, POST 요청은 물론 쿠키, 세션, 인증, 파일 업로드 등 웹 개발에 필수적인 기능들을 갖추고 있어 크롤링이나 웹 API 활용시 유용합니다.
- BeautifulSoup : HTML/XML 문서에서 데이터를 손쉽게 추출할 수 있게 해주는 웹 스크래핑 라이브러리입니다. 태그로 구조화된 문서를 파싱하고 트리 순회하며 원하는 요소를 찾아낼 수 있죠. 크롤링에 많이 사용됩니다.
- Flask : 파이썬 웹 프레임워크 중 하나로 마이크로 프레임워크라 불립니다. 간단한 구조로 가볍고 확장성이 좋아 소/중형 프로젝트에 적합합니다. URL 라우팅과 템플릿 엔진 기능을 제공하죠. 풀스택 개발도 가능합니다.
- pytest : 파이썬 테스트 프레임워크입니다. 테스트 함수를 작성하고 실행해 주는 기능을 제공하는데요. unittest 등 내장 테스트 모듈보다 사용하기 쉽고 기능이 풍부해 많이 쓰이고 있습니다.
이 외에도 파이썬에는 활용도 높은 훌륭한 패키지들이 많이 있습니다. 여러분의 개발 분야에 맞는 패키지를 찾아 활용해 보시길 추천드립니다.
요약
이번 시간에는 파이썬 가상환경과 패키지 관리에 대해 살펴보았습니다.
가상환경은 프로젝트별로 독립된 파이썬 실행환경을 제공하여 패키지 충돌 문제를 해결해 주죠. venv, virtualenv, conda 등의 도구를 사용해 가상환경을 만들 수 있습니다.
그리고 파이썬 패키지 관리자인 pip를 이용하면 외부 패키지를 쉽게 설치하고 관리할 수 있습니다.
또한 NumPy, pandas, matplotlib 등 유용한 파이썬 패키지도 간단히 소개해 드렸는데요. 개발 분야에 따라 적절한 패키지를 선택해 활용하시면 좋겠습니다.
가상환경과 체계적인 패키지 관리는 성공적인 파이썬 개발의 핵심입니다. 프로젝트의 규모가 커질수록 이에 대한 중요성은 더욱 커지게 되죠.
여러분도 오늘 배운 내용을 실제 개발에 꼭 활용해 보시길 바랍니다. 그럼 이만 마치겠습니다. 감사합니다!
참고 자료
- Python Virtual Environments: A Primer
- 가상 환경 및 패키지 - Python 공식 문서
- Pipenv: Python Dev Workflow for Humans
- conda 사용자 가이드
- PyPI(Python Package Index)
한 고대 문서 이야기
여기 한 고대 문서가 있습니다. 이 문서는 B.C. 1,500년 부터 A.D 100년까지 약 1,600 여 년 동안 기록되었습니다. 이 문서의 저자는 약 40 명입니다. 이 문서의 고대 사본은 25,000 개가 넘으나, 사본간 오
gospel79.tistory.com
유튜브 프리미엄 월 1만원 할인받고 월 4000원에 이용하는 방법
올해 5월부터 월 8000원 정도이던 유튜브 프리미엄 요금이 15000원 정도로 인상됩니다. 각종 OTT 서비스, ChatGPT 같은 서비스들이 늘어나다보니 이런 거 몇 개만 이용하더라도 월 이용요금이 5만원을
stock79.tistory.com
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."