가상 환경 정리 방법

PythonBeginner
지금 연습하기

소개

이 실험에서는 Python 가상 환경을 관리하는 필수적인 방법을 배우게 됩니다. 프로젝트를 위한 격리된 환경을 생성하고, 특정 종속성을 설치하고, 불필요한 패키지를 제거하고, 궁극적으로 디스크 공간을 확보하기 위해 환경을 삭제하는 방법을 다룰 것입니다. 이러한 기술은 깔끔하고 체계적인 개발 워크플로우를 유지하는 데 필수적입니다.

가상 환경 생성 및 활성화

먼저 샘플 프로젝트를 위한 격리된 환경을 생성해 보겠습니다. 가상 환경을 사용하면 이 프로젝트의 패키지가 다른 프로젝트의 패키지나 시스템 전체 Python 설치와 충돌하지 않도록 할 수 있습니다. Python 에 포함된 표준 도구인 venv 모듈을 사용할 것입니다.

설정 스크립트에서 이미 /home/labex/project/my_web_app에 프로젝트 디렉토리를 생성했습니다. 해당 디렉토리로 이동해 보겠습니다.

cd my_web_app

이제 이 디렉토리 안에 venv라는 이름의 가상 환경을 생성합니다. 환경 디렉토리 이름을 venv로 지정하는 것은 일반적인 관례입니다.

python3 -m venv venv

이 명령은 새로운 Python 설치를 포함하는 venv 디렉토리를 생성합니다. 다음 명령을 실행하여 해당 내용을 확인할 수 있습니다.

ls -F venv/

bin/, include/, lib/와 같은 하위 디렉토리와 구성 파일이 표시될 것입니다.

bin/  include/  lib/  lib64@  pyvenv.cfg

이 환경을 사용하려면 "활성화"해야 합니다.

source venv/bin/activate

이 명령을 실행한 후, 쉘 프롬프트에 (venv)가 포함되어 가상 환경이 활성화되었음을 나타내는 것을 볼 수 있습니다. 이제 실행하는 모든 Python 또는 pip 명령은 이 환경 내의 실행 파일과 패키지를 사용하게 됩니다.

Python 실행 파일의 경로를 확인하여 이를 확인할 수 있습니다.

which python

출력은 venv 디렉토리 내의 Python 바이너리를 가리킬 것입니다.

/home/labex/project/my_web_app/venv/bin/python

종속성 설치 및 격리

가상 환경이 활성화된 상태에서 프로젝트의 종속성을 설치할 수 있습니다. 필요한 패키지 목록이 포함된 requirements.txt 파일이 생성되었습니다.

pip를 사용하여 패키지를 설치합니다.

pip install -r requirements.txt

Pip 는 flaskrequests 및 해당 종속성을 venv에 다운로드하여 설치합니다.

이 환경에 특별히 설치된 패키지를 보려면 pip list를 사용합니다.

pip list

flask, requests 및 방금 설치된 다른 패키지들이 표시될 것입니다.

Package            Version
------------------ --------
certifi            ...
charset-normalizer ...
click              ...
Flask              2.2.2
idna               ...
itsdangerous       ...
Jinja2             ...
MarkupSafe         ...
pip                ...
requests           2.28.1
setuptools         ...
urllib3            ...
Werkzeug           ...

이제 격리의 힘을 확인해 보겠습니다. 환경을 비활성화하여 시스템의 전역 컨텍스트로 돌아갑니다.

deactivate

프롬프트의 (venv) 접두사가 사라집니다. 이제 pip list를 다시 실행합니다.

pip list

flaskrequests는 가상 환경 내에만 설치되었기 때문에 목록에 더 이상 표시되지 않으며, 전역 Python 환경을 깨끗하게 유지합니다.

사용되지 않는 패키지 제거

프로젝트가 발전함에 따라 일부 종속성이 더 이상 사용되지 않을 수 있습니다. 환경을 간결하게 유지하고 requirements.txt 파일을 업데이트하기 위해 이를 제거하는 것이 좋습니다.

먼저 패키지를 관리하기 위해 가상 환경을 다시 활성화합니다.

source venv/bin/activate

이제 우리 프로젝트에서 requests 패키지가 더 이상 필요하지 않다고 가정해 보겠습니다. pip를 사용하여 제거할 수 있습니다. -y 플래그는 제거를 자동으로 확인합니다.

pip uninstall -y requests

설치된 패키지를 다시 나열하여 패키지가 제거되었는지 확인합니다.

pip list

requests와 해당 종속성 (예: urllib3, certifi 등, 다른 패키지에서 더 이상 필요하지 않은 경우) 이 사라진 것을 볼 수 있습니다.

패키지를 제거한 후에는 환경의 현재 상태를 반영하도록 requirements.txt 파일을 업데이트해야 합니다. 현재 패키지 목록을 파일로 "고정 (freeze)"하여 이 작업을 수행할 수 있습니다.

pip freeze > requirements.txt

변경 사항을 확인하기 위해 업데이트된 파일을 볼 수 있습니다.

cat requirements.txt

이제 파일에는 flask와 해당 종속성만 나열됩니다.

click==...
Flask==2.2.2
itsdangerous==...
Jinja2==...
MarkupSafe==...
Werkzeug==...

마지막으로, 현재 환경을 비활성화합니다.

deactivate

전체 가상 환경 삭제

프로젝트가 완료되었거나 처음부터 새로운 환경으로 다시 시작하고 싶을 때, 가장 간단한 정리 방법은 전체 가상 환경 디렉토리를 삭제하는 것입니다.

먼저, 현재 작업 중인 디렉토리를 삭제하는 것은 일반적으로 좋지 않으므로 my_web_app 디렉토리 안에 있지 않은지 확인합니다. 상위 디렉토리로 이동하겠습니다.

cd /home/labex/project

삭제하기 전에 du (disk usage) 명령을 사용하여 가상 환경이 사용하고 있는 디스크 공간을 확인할 수 있습니다.

du -sh my_web_app/venv

출력에는 디렉토리의 총 크기가 표시됩니다.

30M     my_web_app/venv

이제 전체 venv 디렉토리를 제거합니다. rm -rf 명령은 디렉토리와 모든 내용을 재귀적으로 강제로 제거합니다. 이 명령을 사용할 때는 주의하십시오.

rm -rf my_web_app/venv

my_web_app의 내용을 나열하여 디렉토리가 사라졌는지 확인합니다.

ls my_web_app

requirements.txt 파일만 남아 있는 것을 볼 수 있습니다. 가상 환경이 완전히 정리되었습니다.

requirements.txt

요약

이 실습에서는 Python 가상 환경 관리의 전체 수명 주기를 배웠습니다. venv로 환경을 생성하고, 활성화하고, requirements.txt 파일에서 종속성을 설치하고, 패키지 격리를 관찰하고, 불필요한 패키지를 제거하고, 마지막으로 전체 환경 디렉토리를 삭제하여 정리하는 과정을 실습했습니다. 이러한 기술은 모든 Python 개발자가 깨끗하고 재현 가능하며 충돌 없는 프로젝트 설정을 유지하는 데 매우 중요합니다.