Python 가상 환경 관리

PythonBeginner
지금 연습하기

소개

Python 프로젝트는 종종 서로 다른 버전의 패키지를 필요로 합니다. 가상 환경은 프로젝트마다 고유한 Python 인터프리터와 패키지 디렉토리를 제공하므로, 특정 프로젝트를 위해 패키지를 설치해도 전역 Python 환경이나 다른 프로젝트에 영향을 주지 않습니다.

이번 실습에서는 내장된 venv 모듈을 사용하여 가상 환경을 생성하고, 활성화한 뒤 패키지를 설치해 볼 것입니다. 또한 두 번째 환경을 생성하여 각 환경이 서로 격리되어 있음을 확인합니다. 모든 작업은 /home/labex/project 디렉토리에서 진행됩니다.

프로젝트 가상 환경 생성

이 단계에서는 Python 프로젝트를 위한 가상 환경을 생성합니다. 가상 환경은 Python 실행 파일, 활성화 스크립트, 그리고 해당 환경 전용 패키지 설치 영역을 포함하는 디렉토리일 뿐입니다.

먼저 프로젝트 작업 공간으로 이동합니다. 실습 파일을 /home/labex/project 아래에 두면 환경을 찾기 쉽고 시스템 파일과 작업 내용을 분리할 수 있습니다.

cd /home/labex/project

환경을 생성하기 전에 시스템에서 사용 가능한 Python 버전을 확인합니다. python3 --version 명령은 venv가 사용할 인터프리터 버전을 출력합니다.

python3 --version

다음과 유사한 Python 3 출력 결과를 볼 수 있습니다.

Python 3...

이제 project-env라는 이름의 가상 환경을 생성합니다. -m venv 옵션은 Python에게 내장된 venv 모듈을 명령줄 도구로 실행하도록 지시하며, project-env는 환경이 저장될 디렉토리 이름입니다.

python3 -m venv project-env

새로 생성된 디렉토리를 나열하여 venv가 만든 구조를 확인합니다.

ls project-env

정확한 항목은 약간 다를 수 있지만, 다음과 같은 파일과 폴더를 볼 수 있습니다.

bin
include
lib
pyvenv.cfg

pyvenv.cfg 파일은 환경이 어떻게 생성되었는지 기록합니다. 지금 확인해 보세요.

cat project-env/pyvenv.cfg

include-system-site-packages = false 항목을 찾으세요. 이 설정은 해당 환경이 전역으로 설치된 Python 패키지를 자동으로 공유하지 않음을 의미합니다.

환경 활성화 및 패키지 설치

이 단계에서는 project-env를 활성화하고 그 안에 패키지를 설치합니다. 활성화는 셸 환경 변수를 변경하여 pythonpip와 같은 명령이 가상 환경을 우선적으로 참조하도록 합니다.

프로젝트 작업 공간에 있는지 확인하세요.

cd /home/labex/project

source를 사용하여 현재 셸에서 활성화 스크립트를 실행합니다. 자식 스크립트는 부모 셸을 변경할 수 없지만, source는 현재 사용 중인 셸을 업데이트할 수 있기 때문에 이 과정이 중요합니다.

source project-env/bin/activate

활성화 후에는 셸 프롬프트가 보통 (project-env)로 시작합니다. Python에서 두 가지 경로를 출력하여 python이 이제 가상 환경 내부를 가리키고 있는지 확인합니다. sys.prefix는 활성 환경을, sys.base_prefix는 기본 Python 설치 위치를 나타냅니다.

python -c "import sys; print(sys.prefix); print(sys.base_prefix)"

첫 번째 줄은 가상 환경 경로여야 하며, 두 번째 줄은 시스템 Python 위치여야 합니다.

/home/labex/project/project-env
/usr...

활성 환경에 colorama라는 작은 패키지를 설치합니다. python -m pip를 실행하면 현재 활성화된 Python 인터프리터에 속한 pip가 사용됩니다.

python -m pip install colorama==0.4.6

설치가 완료되면 pipcolorama가 성공적으로 설치되었음을 보고할 것입니다.

Python에서 패키지를 가져오고 버전을 출력하여 확인합니다.

python -c "import colorama; print(colorama.__version__)"

출력 결과는 다음과 같아야 합니다.

0.4.6

deactivate를 사용하여 가상 환경에서 나갈 수 있습니다. 이렇게 하면 pythonpip의 참조 동작이 일반 셸 환경으로 돌아갑니다.

deactivate

두 번째 격리된 환경 생성

이 단계에서는 또 다른 가상 환경을 생성하고 project-env와 비교합니다. 별도의 환경은 동일한 기본 Python 인터프리터를 사용하면서도 설치된 패키지는 서로 분리하여 유지할 수 있습니다.

프로젝트 작업 공간으로 돌아갑니다.

cd /home/labex/project

시스템 python3 실행 파일을 찾습니다. command -v 명령은 셸이 특정 명령어를 실행할 때 참조하는 경로를 출력합니다.

command -v python3

경로는 보통 다음과 같습니다.

/usr/bin/python3

tools-env라는 이름의 두 번째 환경을 생성합니다. --prompt tools-env 옵션은 활성화 프롬프트 텍스트를 설정하며, 여러 환경을 작업할 때 유용합니다.

python3 -m venv --prompt tools-env tools-env

이제 두 환경의 접두사(prefix)를 비교합니다. 각 명령은 서로 다른 가상 환경 내의 Python 실행 파일을 실행하고 활성 접두사를 출력합니다.

project-env/bin/python -c "import sys; print(sys.prefix)"
tools-env/bin/python -c "import sys; print(sys.prefix)"

두 개의 서로 다른 디렉토리가 출력되어야 합니다.

/home/labex/project/project-env
/home/labex/project/tools-env

마지막으로 tools-env에서 colorama를 사용할 수 있는지 확인합니다. coloramaproject-env에만 설치했으므로, 두 번째 환경에서는 찾을 수 없어야 합니다.

tools-env/bin/python -c "import importlib.util; print(importlib.util.find_spec('colorama'))"

예상되는 출력 결과는 다음과 같습니다.

None

이는 한 가상 환경에 설치된 패키지가 다른 가상 환경에 자동으로 나타나지 않음을 확인시켜 줍니다.

요약

Python 가상 환경을 생성하고, 구성을 검사하고, 활성화하며, 패키지를 설치하고, 두 번째 환경을 생성하여 패키지 격리를 확인했습니다. 또한 python3 -m venv, source, python -m pip 및 직접적인 환경 Python 경로를 사용하여 어떤 인터프리터가 실행 중인지 파악하는 방법을 연습했습니다.