티스토리 뷰
Python 가상 환경은 프로젝트마다 독립된 Python 실행 환경을 제공하여, 프로젝트 간에 의존성 충돌을 방지하고, 각 프로젝트가 필요로 하는 패키지와 라이브러리 버전을 독립적으로 관리할 수 있게 해주는 도구입니다. 가상 환경을 사용하면, 프로젝트마다 필요한 Python 패키지들을 독립된 환경에서 관리할 수 있어, 다양한 프로젝트를 동시에 관리할 때 유용합니다.
가상 환경이 필요한 이유
- 프로젝트별 의존성 충돌 방지: 여러 프로젝트에서 서로 다른 버전의 패키지를 사용할 수 있습니다. 예를 들어, 한 프로젝트에서는 Django 3.0을 사용하고, 다른 프로젝트에서는 Django 4.0을 사용하는 경우, 가상 환경을 사용하지 않으면 서로 다른 버전의 패키지가 충돌할 수 있습니다.
- 글로벌 패키지 설치 방지: 가상 환경을 사용하지 않으면 패키지를 전역 시스템에 설치하게 되어, 다른 프로젝트에서도 해당 패키지를 참조하게 됩니다. 가상 환경을 사용하면 특정 프로젝트에만 패키지를 설치할 수 있습니다.
- 프로젝트 이식성 향상: 가상 환경을 통해 프로젝트마다 독립적인 환경을 제공하면, 다른 개발자나 서버에 프로젝트를 배포할 때 필요한 패키지들을 명확하게 관리하고 설치할 수 있습니다.
Python 가상 환경 설정
Python은 venv 모듈을 사용하여 가상 환경을 생성할 수 있습니다.
1. 가상 환경 생성
먼저, 프로젝트 폴더로 이동한 후 가상 환경을 생성합니다.
python -m venv 가상환경이름
예를 들어, venv라는 이름의 가상 환경을 생성하려면 다음과 같이 실행합니다.
python -m venv venv
이 명령을 실행하면 프로젝트 디렉터리에 venv 폴더가 생성되고, 그 안에 가상 환경이 설정됩니다.
2. 가상 환경 활성화
가상 환경을 활성화하면 해당 환경에 설치된 패키지들만 사용할 수 있게 됩니다. 운영체제에 따라 활성화 명령어가 다릅니다.
- Windows:
venv\Scripts\activate
- macOS/Linux:
source venv/bin/activate
가상 환경이 활성화되면, 명령어 프롬프트 앞에 (venv) 같은 표시가 나타나며, 이 상태에서 설치한 패키지들은 가상 환경 내에 설치됩니다.
3. 패키지 설치
가상 환경이 활성화된 상태에서 패키지를 설치하면, 해당 패키지들은 가상 환경 안에 설치됩니다. 예를 들어, Django를 설치하려면 다음과 같이 실행합니다.
pip install django
이렇게 설치된 패키지들은 가상 환경 안에만 존재하고, 다른 프로젝트나 전역 시스템에는 영향을 미치지 않습니다.
4. 가상 환경 비활성화
가상 환경을 비활성화하려면 다음 명령어를 실행합니다.
deactivate
이 명령어를 실행하면 가상 환경이 비활성화되고, 시스템 전역 Python 환경으로 돌아갑니다.
가상 환경 관련 파일
requirements.txt: 가상 환경에서 설치된 모든 패키지를 기록한 파일입니다. 다른 사람이 이 프로젝트를 사용할 때 같은 패키지들을 설치하도록 할 수 있습니다.
가상 환경에서 설치된 패키지를 requirements.txt 파일로 저장하려면:
pip freeze > requirements.txt
그리고 이 파일을 사용하여 다른 환경에서 같은 패키지를 설치하려면:
pip install -r requirements.txt
장점
- 의존성 관리: 각 프로젝트에 필요한 패키지를 독립적으로 설치하고 관리할 수 있습니다.
- 충돌 방지: 여러 프로젝트가 서로 다른 버전의 라이브러리를 사용할 때 패키지 충돌을 방지할 수 있습니다.
- 이식성: 프로젝트에 필요한 패키지를 requirements.txt 파일로 기록하면, 다른 개발자나 서버에 프로젝트를 배포할 때도 동일한 환경을 재현할 수 있습니다.
결론
Python 가상 환경은 프로젝트마다 독립된 실행 환경을 제공하여 의존성 충돌을 방지하고, 패키지 관리를 단순하게 만들어주는 중요한 도구입니다. 특히 여러 프로젝트를 동시에 개발하거나 배포 환경을 고려할 때 매우 유용합니다. venv는 간편하고 기본적으로 제공되기 때문에 많은 Python 프로젝트에서 사용되고 있습니다.
'Study > Python' 카테고리의 다른 글
zip 함수란? (0) | 2024.11.16 |
---|---|
SQLAlchemy란? (2) | 2024.09.18 |
RotatingFileHandler란? (0) | 2024.09.16 |
파이썬 객체를 문자열로 표현하기 __str__ (0) | 2024.09.11 |
pip란? (0) | 2024.09.10 |
- Total
- Today
- Yesterday
- inp
- stdlib.h
- counter
- pwa(progressive web app)
- chrome extension 자동 배포
- jackson 라이브러리
- useEffect
- structuredclone()
- 원시값(primitive)
- x.y.z (메이저.마이너.패치)
- 시맨틱 버전(semantic versioning
- 소프트웨어 버전 관리
- 프로세스 강제 종료
- math.h
- styled-components
- named export vs default export
- react router
- semver)
- ajax (asynchronous javascript and xml)
- Collections
- public vs assets
- mermaid-cli
- json.parse(json.stringify())
- Jest
- 쉽게 풀어쓴 C언어 Express
- defaultdict
- javascript 필수 문법
- 중첩 함수(nested function)
- core web vitals
- react
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |