Python venv 참고 자료
유용한 venv 명령어 몇 가지
Venv는 가상 환경 관리 명령줄 도구. Anaconda에 비해 훨씬 간단한 도구입니다. 다음은 유용한 venv 명령입니다.
파이썬에서 패키지 및 환경 관리에 있어, 개인적으로 보다 우수한 도구가 있다고 생각합니다. 바로 uv입니다. 자세히 알아보세요: uv - 새로운 파이썬 패키지, 프로젝트 및 환경 관리자
파이썬 venv 빠른 참고
가상 환경 생성
-
표준 명령 (Python 3.3+):
python -m venv venv
이 명령은 현재 디렉토리에
venv
라는 이름의 가상 환경을 생성합니다. -
특정 Python 버전 사용 (설치된 경우):
python3.10 -m venv venv
또는
virtualenv
사용:virtualenv -p /usr/local/bin/python3.10 venv
(이 작업은
virtualenv
패키지가 필요합니다).
가상 환경 활성화
- Windows:
.\venv\Scripts\activate
- macOS/Linux:
쉘 프롬프트는 이제 환경 이름을 표시해야 합니다.source venv/bin/activate
가상 환경 비활성화
- 모든 플랫폼:
이 명령은 시스템의 기본 Python으로 돌아갑니다.deactivate
패키지 설치
pip
사용:
예시:pip install
pip install numpy pandas
pip
업그레이드 (권장):python -m pip install --upgrade pip
패키지 목록 저장 및 요구사항 파일에서 설치
- 현재 환경의 패키지 목록 저장:
pip freeze > requirements.txt
- 요구사항 파일에서 설치:
이 명령을 실행하기 전에 가상 환경이 활성화되어 있어야 합니다.pip install -r requirements.txt
가상 환경 삭제
deactivate
rm -rf <env path>
파이썬 가상 환경 관리 시 흔한 실수
가상 환경을 활성화하지 않음
- 가상 환경을 활성화하지 않고 명령을 실행하는 것은 일반적인 실수로, 전역 환경이나 잘못된 venv에 패키지를 설치하게 되어 의존성 충돌 및 예측 불가능한 동작을 초래할 수 있습니다.
패키지 버전을 고정하지 않음
requirements.txt
에서>=
대신==
와 같은 정확한 버전을 지정하지 않으면 재현성에 문제가 생깁니다. 정확한 버전 고정은 모든 사람이 동일한 패키지 버전을 사용하도록 보장하여 배포 또는 협업 시 예상치 못한 문제를 방지합니다.
전역 환경과 가상 환경을 섞음
- 전역 환경에 패키지를 설치하거나 전역 환경과 가상 환경을 섞는 것은 특히 다른 프로젝트가 호환되지 않는 패키지 버전을 요구할 경우 충돌을 일으킬 수 있습니다. 항상 올바른 환경에서 작업해야 합니다.
가상 환경을 버전 관리에 포함함
- 가상 환경 디렉토리(예:
venv/
)를 버전 관리에 포함하면 저장소가 불필요하게 팽창하게 되며, 이는 불필요합니다. 항상.gitignore
에 venv 디렉토리를 추가하여 저장소를 깔끔하게 유지해야 합니다.
개발 및 프로덕션 의존성을 구분하지 않음
- 개발 및 프로덕션 의존성을 구분하지 않으면 프로덕션 환경이 불필요하게 비대하거나 보안 취약할 수 있습니다. 각각에 대해 별도의 요구사항 파일이나 구성 섹션을 사용해야 합니다.
환경 설정 및 자동화 문서화 부족
- 환경 설정 단계를 문서화하지 않거나 자동화 과정(스크립트나 Makefile을 통해)을 생략하면 새로운 기여자에게 온보딩이 어려워지고 환경을 재현하는 것이 더 복잡해집니다.
이용되지 않은 가상 환경 정리하지 않음
- 시간이 지나면서 사용되지 않은 가상 환경이 쌓이면 디스크 공간을 낭비하고 혼란을 초래할 수 있습니다. 오래된 venv를 정기적으로 삭제하여 작업 공간을 깔끔하게 유지해야 합니다.
시스템 파이썬 및 패키지 관리자 경계를 무시함
- 시스템 파이썬을 수정하거나 pip와 시스템 패키지 관리자를 섞는 것은 시스템 도구를 손상시키고 진단이 어려운 문제를 일으킬 수 있습니다. 항상 프로젝트 의존성에 venv를 사용하고 시스템 관리 패키지에 간섭하지 않도록 해야 합니다.
요약 표
실수 | 영향 |
---|---|
가상 환경을 활성화하지 않음 | 잘못된 환경에 패키지를 설치함 |
패키지 버전을 고정하지 않음 | 예측 불가능한 빌드, 재현이 어려운 버그 |
전역 환경과 가상 환경을 섞음 | 의존성/버전 충돌 |
가상 환경 디렉토리를 버전 관리에 포함함 | 저장소가 불필요하게 팽창함 |
개발 및 프로덕션 의존성을 구분하지 않음 | 불필요하게 비대하거나 보안 취약한 프로덕션 환경 |
문서화 및 자동화 부족 | 온보딩이 어려우며, 설정이 불일치함 |
오래된 환경을 정리하지 않음 | 디스크 공간 낭비 및 혼란 |
시스템 파이썬 또는 패키지를 수정함 | 시스템 불안정 및 도구 손상 |
가상 환경을 항상 활성화하고 의존성을 고정하고 환경을 분리하며 명확한 문서화를 유지함으로써 이러한 흔한 실수를 피할 수 있습니다.
Conda와 가상 환경의 재현성에 대한 주요 차이점
기능 | Conda 환경 | 파이썬 가상 환경 (venv/virtualenv) |
---|---|---|
관리 범위 | 파이썬 패키지 및 비파이썬 의존성(예: 시스템 라이브러리, 컴파일러)을 관리 | pip 를 통해 오직 파이썬 패키지만 관리 |
파이썬 버전 관리 | 환경별로 어떤 파이썬 버전도 지정 및 설치 가능 | 시스템에 설치된 파이썬 버전 사용 |
플랫폼 간 일관성 | 모든 의존성을 관리하므로 OS(Windows, macOS, Linux) 간 더 일관된 동작 | 시스템 라이브러리에 의존하므로 OS에 따라 다를 수 있음 |
패키지 출처 | Conda 저장소(사전 컴파일된 바이너리, 과학 스택) 사용 | PyPI(pip)를 통해 파이썬 패키지 사용 |
재현성 | 복잡한, 과학적, 또는 다언어 프로젝트에 대해 더 높음; 전체 환경(conda env export )을 내보낼 수 있음 |
순수 파이썬 프로젝트에 대해 좋음; 시스템 의존성이 포함된 경우 재현성이 떨어질 수 있음 |
비파이썬 의존성 | 설치 및 관리 가능(예: OpenBLAS, libpng) | 관리 불가; 별도로 설치해야 함 |
환경 내보내기/불러오기 | conda env export / conda env create 로 완전한 재현성 가능 |
pip freeze > requirements.txt / pip install -r requirements.txt (파이썬 패키지만) |
성능 | 대규모 과학 패키지(예: numpy, pandas)에 대해 더 빠르고 신뢰성 있음 | Windows에서는 소스 코드로 컴파일해야 할 수 있음 |
복잡성 | 약간 더 높은 설정 및 관리 오버헤드 | 기본 파이썬 프로젝트에 적합한 가볍고 간단한 환경 |
주요 포인트 요약
-
Conda 환경은 파이썬 및 비파이썬 의존성이 필요한 프로젝트 또는 플랫폼 간 정확한 복제가 중요한 경우에 재현성에 이상적입니다. Conda는 Python 자체, 라이브러리, 심지어 컴파일러까지 포함한 전체 스택을 관리하여 복잡한 환경을 공유하고 재현하는 것이 더 쉬워지며, 특히 데이터 과학 및 연구 맥락에서 유리합니다.
-
파이썬 가상 환경(
venv
/virtualenv
)은 순수 파이썬 프로젝트에서 파이썬 의존성을 분리하는 데 가볍고 훌륭합니다. 그러나 시스템 수준 또는 비파이썬 의존성을 관리하지 않기 때문에, 외부 라이브러리 또는 특정 시스템 구성에 의존하는 프로젝트에서는 재현성이 약화될 수 있습니다. -
환경 내보내기 및 공유: Conda는 전체 환경 사양(
conda env export
)을 내보낼 수 있어 모든 의존성과 버전을 포함하여 다른 곳에서 정확히 재현할 수 있습니다. 가상 환경에서는pip freeze
가 오직 파이썬 패키지만 기록하고 시스템 의존성이나 파이썬 인터프리터 버전은 기록하지 않습니다. -
결론
과학적, 플랫폼 간 또는 복잡한 프로젝트에서 최대한의 재현성을 원한다면 Conda를 사용하세요. 시스템 의존성이 문제가 되지 않는 가볍고 순수 파이썬 프로젝트에서는 파이썬 가상 환경을 사용하세요.