suyeonme

[Python] 의존성 충돌과 가상환경(venv) 본문

프로그래밍👩🏻‍💻/Python

[Python] 의존성 충돌과 가상환경(venv)

suyeonme 2024. 7. 14. 18:24

의존성 충돌

하나의 컴퓨터에서 Python으로 개발된 여러 개의 프로젝트 돌리는 경우, 의존성이 충돌할 수 있다.

  • 프로젝트 1: package v3.x 사용
  • 프로젝트 2: Django v4 사용

이유

두 개의 프로젝트가 동일한 컴퓨터에 설치된 하나의 파이썬 실행 환경(runtime)을 사용하므로, 파이썬 패키지를 서로 공유하게 되기 때문에 의존성이 충돌할 수 있다.

pip 패키지 매니저의 동작 방식

파이썬은 기본적으로 패키지 설치시 pip을 사용하는데 시스템 전역으로 패키지를 설치한다.

  • pip으로 패키지 설치시, 컴퓨터의 site-packages 디렉터리에 안에 설치된다.
  • npm이나 maven의 경우, 패키지 매니저가 프로젝트별로 패키지 설치를 지원 (의존성이 충돌하지않음)

pip 명령어

pip -V

pip install [pacakge]
pip install [pacakge]==2.28.0 # 특정 버전 설치
pip show requests # 설치된 패키지 확인
pip uninstall [pacakge]
pip list # 컴퓨터에 설치된 전체 패키지 확인

requirements.txt

프로젝트에서 개발하기 위해서 필요한 모든 패키지의 목록을 저장한 파일이다.

# 현재 가상 환경에서 설치된 패키지 목록을 requirements.txt 파일로 저장
pip freeze > requirements.txt

# 의존성 다운로드
pip install -r requirements.txt

가상환경(venv)

프로젝트별로 독립적인 Python 실행 환경을 생성하여, 각 프로젝트마다 필요한 패키지들을 격리된 상태에서 관리할 수 있게한다.

venv 내장 모듈을 통해서 쉽게 가상 환경을 만들 수 있으며, 이를 통해 프로젝트 간 의존성 충돌 문제를 예방할 수 있다.

가상환경을 사용하지 않는다면?

컴퓨터 내의 모든 프로젝트에서 하나의 파이썬 실행 환경을 사용하면서 동일한 경로에 패키지를 설치하고 서로 공유한다. 따라서 하나의 프로젝트에서 설치한 패키지의 버전이 다른 프로젝트에서 설치한 동일 패키지의 다른 버전과 충돌할 수 있다.

가상환경 사용하기

가상 환경이 활성화된 상태에서 패키지를 설치하면, .venv 디렉터리 내부에 해당 패키지가 설치된다. 따라서 다른 파이썬 프로젝트에 영향을 미치지않는다.

cd [directory]

# 가상환경 생성
python -m venv .venv
# 가상환경 활성화
source .venv/bin/activate
# 가상환경 비활성화
deactivate

# gitignore에 가상환경 파일 추가해서 사용!
Comments