이번에는 윈도우, 맥 운영체제에 가상환경을 구성하고 패키지 매니저인 pip와 requirements.txt을 이용하여 패키지를 어떻게 관리하는지에 대해서 살펴보자.
Python에서 가상환경을 사용하는 이유
우리가 여러 프로젝트를 진행하다 보면, 여러 패키지들을 통해서 코드를 작성하고 버전을 관리하며 진행되는 것을 알 수 있다. 만약 A, B라는 프로젝트가 있고, A, B 프로젝트에는 temp_package라는 패키지를 사용하고 있다고 가정한다.
여기서 문제가 생기는데 "A 프로젝트에는 temp_package 버전이 1.1을 사용하여야 작동하고 B 프로젝트에는 temp_package 버전 3.1 이상을 사용하여야 돌아간다."라는 것이다.
현재 우리는 글로벌 파이썬 환경을 사용하기 떄문에 temp_package에 대한 버전을 하나 밖에 사용하지 못한다. 이 때문에 A 프로젝트를 실행하기 위해서는 temp_package 1.1 버전을 설치하고 실행한 다음 B 프로젝트를 할 때는 A 프로젝트를 위해 설치한 temp_package 1.1 버전을 삭제 한 뒤 3.1 버전을 새로 설치해 주어야 하는 번거로움이 발생하게 된다.
이러한 부분을 보안 하고자 나온 개념이 각 프로젝트에 가상환경을 설정하는 것이다. A 프로젝트에는 temp_package 1.1 버전을 사용할 수 있는 환경을, B 프로젝트에는 temp_package 3.1 버전을 사용할 수 있는 환경을 제공할 수 있도록 하는 가상환경이 만들어진다면 보다 쉽게 패키지를 관리할 수 있다.
운영 체제에 따른 Python 가상환경 설정하기
각 운영체제에 따라서 Python 가상환경을 설정하는 방법이 다양하다. virtualenv을 통해 관리하는 방법이 있고, pipenv을 사용하여 관리하는 방법, venv을 이용하여 관리하는 방법 등등이 있는데, 이 중에서 virtualenv을 이용하여 가상환경을 설정하는 방법을 작성한다.
📣 왜 venv로 작성하는 것이 아닌 virtualenv 인가?
원래는 필자는 주로 venv을 이용하여 가상환경을 많이 구성하였으나, venv가 virtualenv의 일부분이 파생되어 만들어진 것이기도 하고 파이썬 버전을 다르게 하여 가상환경을 만들고 싶을 때가 있는데 이를 위해 "py -python_version -m venv venv" 명령어를 주로 사용하곤 했다. 하지만 해당 명령어가 window에서만 실행되고 mac 운영체제에서는 실행되지 않는 문제도 가지고 있어서 Python 2, 3 버전에도 문제없고 현재까지도 잘 사랑받고 있는 virtualenv로 가상환경을 구성하는 방법을 선택하였다.
터미널을 연 다음, pip 패키지 관리 툴을 이용하여 virtualenv 을 설치한다.
🖥️ terminal
pip install virtualenv
그 다음 가상환경을 만들어 줄 경로로 이동 한 다음 아래 명령어를 통해 가상환경을 설정한다. -p 옵션을 통해서 설치되어 있는 다른 파이썬 버전의 가상환경을 구성할 수 있다. 주로 가상환경의 이름을 "venv" 만들어 진행하는데 이는 사용자의 필요에 따라 변경될 수 있다.
🖥️ terminal
virtualenv venv # 현재 설정되어 있는 기본 파이썬 버전을 사용하고 싶은 경우
virtualenv venv -p [python_version] # 현재 설치되어 있는 다른 파이썬 버전을 사용하고 싶은 경우
마지막으로 구성한 가상환경에 진입하고, 가상환경을 빠져나오는 명령어이다. 이를 통해 가상환경을 자유롭게 다룰 수 있다. 여기에서 만들어지는 가상환경 적용방식이 운영체제에 따라 다르기 때문에 유의해서 적용한다.
🖥️ terminal
# 가상환경을 적용 한다.
source venv/scripts/activate # 운영체제가 window인 경우
source venv/bin/activate # 운영체제가 mac인 경우
# 가상환경으로 부터 빠져 나온다.
deactivate
'Programing Language > Python' 카테고리의 다른 글
컬렉션 객체의 내장 함수 시간 복잡도 모음 (0) | 2023.06.29 |
---|---|
파이썬 파일 실행 할 때 생기는 __pycache__ 파일에 대해 알아보기 (0) | 2023.06.29 |
typing module (Type annotation and Typehint) 을 통한 가독성 좋은 코드 작성하기 (0) | 2023.06.29 |
리스트 컴프리헨션과 삼항연산자을 이용하여 코드 작성하기 (0) | 2023.06.29 |
아스테리스크와 패킹, 언패킹 기법 (0) | 2023.06.29 |