파이썬 프로젝트를 진행하거나 학습을 위해 많은 프로젝트를 생성하고 개발하다 보면 모듈의 버전이 꼬이는 경우가 가끔있다 ㅠ...
그런 경우를 방지하기 위해 venv를 사용하게 되는데 venv가 뭔지 알아보자 !
venv는 Virtual Environments의 줄임말로 말 그대로 가상환경이라는 뜻이다.
그러면 파이썬에서 가상환경을 쓰는 이유는 뭘까
파이썬 개발을 진행하면서 두개의 프로젝트를 개발하는 경우가 있을지도 모른다.
예를들어 1번 프로젝트에서 사용하는 모듈은 A,B모듈이고, 2번 프로젝트에서는 A,C 모듈을 사용하고 있는 상황이라고 가정을 해보겠다.
1번 2번 프로젝트 둘다 A모듈을 사용하고 있지만 1번 프로젝트에서 필요한 모듈의 버전은 1.xx버전이고, 2번 프로젝트에서 필요한 모듈의 버전은 2.xx 버전이다. 두 프로젝트에서 요구하는 모듈의 버전이 다른데 이 모듈을 글로벌 환경에 설치하고 각 프로젝트에서 사용하려면 요구사항이 맞지 않게된다.
이때, 각각 프로젝트에서 필요한 모듈을 별도의 로컬환경에 설치하여 사용하게 되는데, 여기서 가상환경을 사용하게 된다.
💡 여기서 node를 사용해본 경험이 있는 개발자라면은 프로젝트에 필요한 모듈을 별도설치하는 npm과 유사하다고 생각할 것이다.
파이썬은 pip를 이용하여 모듈을 설치하게 되는데 node와 python의 차이점은 node의 npm은 각 프로젝트별 로컬환경에 모듈을 설치하게 된다는 점이고 python의 pip는 글로벌 환경에 설치를 하게된다는 차이점이 있다. 이때문에 python에서는 가상환경이라는 개념을 적용하여 사용하게 된 것이다.
그렇다면 파이썬에서 사용할 수 있는 가상환경의 종류에는 venv만 존재하는 것일까 ?
그건 또 아니라고 한다.. 그럼 다음으로 파이썬 가상환경의 종류에 대해서 알아보자
현재의 파이썬은 가상환경을 지원해주고 있지만 초창기 파이썬에서는 가상환경을 공식적으로 지원해주지 않았다고 한다. 그렇기에 현재에는 표준 라이브러리로 지원하는 가상환경과 비표준 라이브러리가 존재한다. 표준라이브러리는 설치없이 사용이 가능하고 비표준 라이브러리는 별도의 설치과정을 거친 후 사용이 가능하다
venv가 뭔지에 대해선 간략히 알아봤으니 이제 사용법에 대해서 알아보자
venv의 모든 명령어는 프로젝트의 루트 디렉토리의 터미널에서 사용을 해야한다.
python -m venv 가상환경이름
루트 디렉토리의 터미널에서 생성할 가상환경의 이름을 설정하여 명령어를 실행해준다.
명령어 실행이 성공적으로 완료되면 루트 디렉토리에 설정한 가상환경이름으로 폴더가 생성된다.
일반적으로 가상환경의 이름은 venv로 설정한다. 그렇기에 나는 venv라는 이름으로 생성을 하였다.
생성된 디텍토리를 펼쳐보면 bin, include, lib 디렉토리와 pyvenv.cfg 파일로 생성이 되어 있는 것을 확인 할 수 있다. 이제 이 프로젝트에서 설치하는 모듈은 lib 디렉토리에 저장이 될 것이다.

여기서 주의할 점 !!
가상환경 생성을 통해 생성된 디렉토리의 구조를 수정한다거나 임시로 디렉토리, 파일을 생성하지 않는 것이 좋다 (모듈을 설치하는 명령어를 수행하여 생성된 디렉토리, 파일을 제외하고 생성되는 경우 제외)
가상환경 생성을 완료했다고 가상환경이 활성화되는 것은 아니기 때문에 가상환경을 활성화 시켜주는 과정이 필요하다. 가상환경을 활성화시키는 명령어는 window 환경과 mac환경 각각 다르기 때문에 환경에 따라 명령어 실행이 필요하다!
source 가상환경이름/bin/activate
call 가상환경이름/bin/activate
실행할 가상환경의 이름을 명시하여 실행한다. 실행할 가상환경의 이름을 명시하여 실행한다는 것은 하나의 루트 디렉토리에 다른 가상환경을 생성하여 실행시킬 수도 있다는 것이다. 즉, 하나의 루트 디렉토리에 여러개의 가상환경을 만들고, 원하는 가상환경을 활성화하여 프로그램을 실행할 수가 있다는 것이다.
가상환경을 활성화하게 된다면 터미널 창의 커멘드창에 가상환경의 이름이 표시될 것이다 !

가상환경 활성화를 시켰으니 이제 이 가상환경에 모듈을 설치해보자 !
가상환경에 모듈을 설치하는 방법은 글로벌 환경에서 설치하는 것과 동일하다. 다만, 기상환경을 활성화 시켰으니 가상환경내에 설치될 뿐이다.
예를들어 random모듈을 설치하고 싶다면 pip install random 로 설치하면 된다.
모듈 설치 명령어를 실행하면 lib폴더에 random모듈이 추가된 것을 볼 수 있다.
가상환경을 비활성화 시키려면 아래의 명령어를 실행시켜 비활성화 시켜주면 된다.
deactivate
만약 생성한 가상환경을 삭제하고 싶다면 별도의 명령어 실행 과정없이 생성한 가상환경 디렉토리를 삭제하면 된다 !
이상 Python venv에 대한 포스팅 끗 -