파이썬 venv 가상환경 배포 하기

파이썬 가상 환경은 virtualenv? pyvenv? venv!!

그동안 파이썬 가상 환경에 대해 논란이 많았습니다. 파이썬 2에서 virtualenv로 가상 환경을 생성할 수 있었는데 파이썬 3 버전이 탄생하고 파이썬 2를 개발하던 개발자들이 파이썬 3으로 넘어오면서 virtualenv를 사용하기 시작했습니다. 그러면서 정작 파이썬 3에서는 pyvenv를 사용하도록 권장하던 시절이 있었습니다.

 

하지만 이제 파이썬 2는 역사 속으로 잠들어가고 있으며 파이썬 3.6 버전부터 pyvenv 또한 폐지하게 되었습니다. 그러면 이제 남은 단 하나 venv만이 파이썬 3에서 사용할 수 있는 가상 환경으로 자리 잡게 되었습니다.

 

이제는 교통정리가 깔끔하게 되어 파이썬을 개발하면서 어떤 가상 환경을 사용하면 좋을지 고민을 할 필요가 전혀 없게 되었습니다.

 

 

파이썬 venv로 가상 환경 만들기

파이썬 venv는 파이썬 3.6 이상? 의 최신 버전을 사용한다면 기본 제공되므로 별도로 설치할 필요가 없습니다.

 

파이썬 가상 환경 실행

말이 파이썬 가상 환경 실행이지 실제로는 디렉터리 및 파일 복사입니다. 고로 해당 명령어를 수행하기 전에 가상 디렉터리를 생성할 경로로 이동한 후 명령어를 수행하면 됩니다. 아래 명령어는 "captain_bin" 디렉토리명으로 가상 환경을 만들겠다는 의미입니다. "captain_bin"은 디렉터리 명이자 곧 가상 환경 이름이 됩니다.

 

python -m venv captain_bin

 

위처럼 수행 가상 환경을 만들게 되면 그냥 파이썬 처음 설치했을 때와 동일하게 됩니다. 만약 전역에서 사용하던 패키지 들을 그대로 가상 환경에서도 사용하고 싶다면 아래와 같이 옵션 하나만 추가해 주면 됩니다.

 

python -m venv captain_bin --system-site-packages

 

위 명령어 들을 실행하면 디렉터리를 생성하고 파일들을 복사하느냐 시간이 좀 걸립니다.

 

파이썬 가상 환경 활성화

위의 명령어가 완료되면 "captain_bin"과 같은 디렉터리가 생성되어 있을 것입니다. 이 디렉터리 안에 Scripts라는 하위 디렉터리가 있는데 이곳에 있는 명령어를 수행하시면 됩니다. 정상적으로 활성화가 되었다면 아래 파이썬 경로 확인에 첨부한 그림 "가상 환경 파이썬 경로 확인" 같이 경로 앞에 괄호로 (captain_bin)이 생성된 것을 확인할 수 있습니다.

 

activate

 

파이썬 가상 환경 경로 확인? 왜? crontab 등록!!

가상 환경이 활성화된 후 where python 명령어로 파이썬이 어디에 있는지 확인합니다. 아래 그림과 같이 3줄의 파이썬이 튀어나왔습니다. 이 중 맨 위의 파이썬 경로가 바로 가상 환경의 파이썬 경로입니다.

 

where python

 

가상환경 파이썬 경로 확인

 

그렇다면 왜 파이썬 가상 환경 경로를 확인해야 할까요? 바로 타이틀과 마찬가지로 작성한 스크립트가 스케줄러에 등록될 수도 있기 때문입니다.

 

당연한 이야기이지만 가상 환경에서만 설치한 패키지 들을 이용하여 가상 환경에서 파이썬 스크립트를 작성했다면 당연히 가상 환경의 파이썬으로 가상 환경의 스크립트가 동작되어야 합니다.

 

파이썬 가상 환경 비 활성화

가상 환경을 종료할 때 아래와 같이 명령어를 수행하면 가상 환경이 종료됩니다.

 

deactivate

 

파이썬 가상 환경 삭제

그렇다면 가상 환경이 잘못되어 재생성하거나 이제는 필요가 없어졌을 때 가상 환경을 삭제하고 싶을 때는 어떻게 해야 할까요?

 

맨 위에서 파이썬 가상 환경 실행 시 생성한 디렉터리 "captain_bin"를 그냥 삭제하면 됩니다. 깔끔하네요.

 

파이썬 가상 환경 배포

삭제할 때 파이썬 가상 환경 디렉터리를 그냥 삭제했습니다. 그러면 배포는 당연하겠죠? 그냥 "captain_bin"디렉터리 압축해서 배포하면 끝입니다. 배포는 참 간단한데 문제는 다른 플랫폼에서 수행할 때 이겠군요.

 

단, 다른 곳에서 수행시킬 때 파이썬 버전을 맞춰 주는 것이 정신 건강에 매우 매우 좋습니다.

MORE