파이썬 가상 환경 이야기 ####################### .. post:: 11, May 2024 :tags: python, venv, virtualenv :category: Python :author: search5 가상 환경 개요 *************** 필자가 처음 컴퓨터 프로그램 언어를 배웠을 때는 모든 프로그램은 한 개 파일만 만들면 되는 줄 알고 있었고 "Hello World"를 화면에 출력하는 것만으로 "프로그램 동작하네?" 하면서 금방 흥미를 잃고 말았었습니다. C, C++ 언어와 같은 컴파일 언어는 컴파일러에게 소스 코드에서 링크할 라이브러리의 경로를 제공하면 되기에 운영체제에 같은 라이브러리가 버전별로 설치가 되어 있어도 큰 문제가 되지 않습니다. 이런 점에선 자바 가상 머신을 사용하는 자바 언어도 컴파일 시에 링크할 라이브러리 경로만 알려주면 되기 때문에 프로그램을 만드는 과정에서 여러 버전을 가진 라이브러리가 있어도 상관없습니다. 하지만 파이썬의 경우는 조금 다릅니다. 파이썬은 import 또는 from import 를 사용해 프로그램이 실행될 동안에 참고할 라이브러리를 가져옵니다. 파이썬은 import가 실행되면 파이썬 라이브러리 저장소에서 라이브러리를 찾습니다. 파이썬의 라이브러리 저장소는 파이썬 인터프리터 경로에 있는 site-packages 경로 아래에서 찾습니다. [#]_ 예를 들어 파이썬 프로그램 A1과 B1 이란 이름을 가지는 프로그램을 개발하고 있고 프로그램이 request-ceta 라이브러리 1.0과 2.0를 사용하고 각 프로그램이 라이브러리 버전에 종속성을 강하게 가진다고 가정해보겠습니다. 프로그램 A1 - request-ceta 1.0 프로그램 B1 - request-ceta 2.0 프로그램 A1과 B1을 전역 파이썬 환경에서 개발한다면 전역 파이썬 환경에 request-ceta 라이브러리의 1.0과 2.0 라이브러리를 설치해야 하지만 하나의 파이썬 환경에 request-ceta 라이브러리 1.0과 2.0을 동시에 설치하는 것은 불가능합니다. 일반적으로 라이브러리는 상위 버전이 하위 버전의 기능을 포함하는 하위 호환성을 갖추고 있는 경우가 많기에 request-ceta 2.0 라이브러리를 설치해도 문제가 되지 않을수도 있습니다. 그런데 프로그램 B1을 먼저 개발하고 프로그램 A1을 나중에 개발하는 경우라면 프로그램 A1의 설치 환경을 구성할 때 request-ceta 2.0 라이브러리가 사라지고 request-ceta 1.0 라이브러리가 대신 설치됩니다. 이렇게 되면 프로그램 B1을 이어서 추가로 개발하거나 실행하려고 하면 라이브러리 버전 종속성 때문에 프로그램 B1의 개발 환경을 다시 구성해야 합니다. 라이브러리 종속성은 개발하는 프로그램에만 있는 것은 아닙니다. 라이브러리간에도 종속성을 가지고 있는 경우도 있기 때문에 파이썬 프로그램을 개발할 때는 프로그램마다 별도의 파이썬 환경을 가지는 것이 좋습니다. 바로 이런 이유 때문에 가상 환경이라는 개념이 등장합니다. 파이썬의 가상 환경 ******************** 프로그램을 개발하는 언어는 파이썬 외에도 여러개가 있다보니 운영체제에 파이썬 환경을 하나만 설치하는데 이렇게 하면 프로그램 종속성 문제가 발생하기 쉽습니다. 운영체제가 윈도우 환경이면 전역 환경에 파이썬 패키지를 설치하는 것이 가능하지만 운영체제가 리눅스 환경이면 PEP 668의 규약에 의해서 파이썬 전역 환경에 패키지를 설치하는 것이 금지되어 있습니다. 물론 PEP 668 이전에 라이브러리 종속성 문제를 해결하기 위해 파이썬 커뮤니티는 종속성 문제를 해결하기 위해 특별한 개념을 도입했습니다. `파이썬 가상 환경` 이라는 개념이 바로 그것입니다. 파이썬 가상 환경은 파이썬 인터프리터는 시스템에 설치된 파이썬 버전을 공유하고 라이브러리는 가상 환경 디렉터리 안의 site-packages 디렉터리에서 찾습니다. 파이썬에서 가상 환경을 만들어주는 라이브러리로 가장 유명한 것은 virtualenv 입니다. virtualenv는 2007년 0.8이 발표되었으며 2024년 현재도 개발이 이루어지고 있습니다. 파이썬 가상 환경은 파이썬 3.2 버전이 발표될 때 까지만 해도 별도의 외부 패키지로 제공됐었지만 3.3부터 virtualenv의 기능이 파이썬 내장 라이브러리인 venv로 공식 포함됐습니다. 지금 여러분이 사용하는 파이썬 환경이 3.3 이후 버전을 사용한다면 virtualenv를 사용하지 않아도 가상 환경을 만들 수 있습니다. 파이썬 가상 환경 만들기 ========================= 파이썬 가상 환경을 만들 수 있는 방법은 다음과 같은 방법이 있습니다 * venv 모듈을 사용하기 * virtualenv 패키지를 사용하기 * pyenv에 있는 virtualenv 기능을 사용하기 물론 이 방법 외에도 다른 방법이 있지만 이런 방법에 대해선 추후 다른 글에서 설명하겠습니다. 이 글에서는 virtualenv 패키지와 파이썬 공식 venv 모듈을 사용하는 방법만 살펴보겠습니다. virtualenv 패키지를 설치하는 방법도 여러가지가 있어 이 글에서 전부 소개하지 않으며 이 글에서는 여러분의 파이썬 환경에 virtualenv 패키지가 설치되어 있다고 가정합니다. virtualenv 패키지를 사용해 파이썬 가상 환경 만들기 ----------------------------------------------------- virtualenv 패키지가 파이썬 환경에 설치되어 있다면 다음과 같은 명령으로 쉽게 설치할 수 있습니다. .. code-block:: shell $ virtualenv <가상환경 이름> virtualenv 패키지는 virtualenv라는 명령을 사용해서 파이썬 가상 환경을 생성합니다. <가상환경 이름>은 영문자로 시작하는 이름을 사용하는 것이 좋습니다. 파이썬 가상 환경이 디렉터리로 생성되기 때문입니다. venv 모듈을 사용해 파이썬 가상 환경 만들기 -------------------------------------------- 파이썬 내장 모듈인 venv를 사용해서 만드는 방법은 다음과 같습니다. .. code-block:: shell $ python -m venv <가상환경 이름> venv 모듈은 파이썬 내장 모듈이기 때문에 모듈이 있는 파이썬 인터프리터 경로를 명시해야 합니다. 리눅스와 맥은 인터프리터 경로로 python 이 아니라 python3 을 사용해야 합니다. 윈도우는 python 명령을 사용하면 됩니다. <가상환경 이름>은 영문자로 시작하는 이름을 사용하는 것이 좋습니다. 파이썬 가상 환경이 디렉터리로 생성되기 때문입니다. 파이썬 가상 환경 진입 하기 ============================= 파이썬 가상 환경을 만드는 것은 virtualenv 패키지와 venv 모듈은 동일한 구조를 가지는 가상 환경 디렉터리가 만들어지기 때문에 가상 환경 진입은 윈도우일때와 리눅스/맥 일 때 환경이 다릅니다. 윈도우에서 진입 하기 ----------------------- 윈도우에서 파이썬 가상 환경 진입은 "명령 프롬프트"를 사용할 때와 "파워셸"일 때가 조금 다릅니다. .. code-block:: shell :caption: 명령프롬프트 일 때 파이썬 가상 환경 진입 > <가상환경 이름>\Scripts\activate 파워셸에서 파이썬 가상 환경을 진입하려면 윈도우에서 ExecutionPolicy 정책이 RemoteSigned로 설정 되어 있어야 합니다. ExecutionPolicy 정책의 값이 어떤 값으로 설정되어 있는지 확인합니다. .. code-block:: shell :caption: ExecutionPolicy 정책 설정 확인 PS > Get-ExecutionPolicy ExecutionPolicy 정책 설정 값이 Restricted 인 경우 명령으로 정책 설정을 변경합니다. .. code-block:: shell :caption: ExecutionPolicy 정책 설정 변경 PS > Set-ExecutionPolicy RemotedSigned -Scope User Get-ExecutionPolicy 명령의 결과가 RemotedSigned로 나오면 정책 설정 값을 변경하지 않아도 됩니다. 정책 설정 변경은 윈도우를 재설치하거나 새로운 컴퓨터로 변경하지 않는 이상 계속 유효합니다. 파워셸에서 파이썬 가상 환경 진입은 다음과 같은 명령어로 합니다. .. code-block:: shell PS > .\<가상환경 이름>\Scripts\Activate.ps1 이걸로 파워셸 설정이 완료됩니다. 리눅스/맥에서 진입하기 ----------------------- 리눅스나 맥은 파워셸 진입 명령은 터미널 프로그램이나 셸 종류에 상관없이 아래 명령으로 실행합니다. .. code-block:: shell $ <가상환경 이름>/bin/activate 이렇게 하면 파이썬 가상 환경으로 진입하며 셸 프롬프트가 `(<가상환경 이름>) $` 와 같이 표현됩니다. 그리고 셸이 파이썬 가상 환경에 진입하면 python, pip 명령 등의 실행 경로는 파이썬 가상 환경에서 찾아서 실행하게 됩니다. 파이썬 가상 환경에서 빠져 나오기 ================================== 파이썬 가상 환경에서 빠져나오는 것은 윈도우, 리눅스, 맥일 때가 모두 같습니다. 셸 프롬프트는 편의상 $로 표기했습니다. .. code-block:: shell $ deactivate 이것으로 파이썬 가상 환경에서 빠져나오게 됩니다. 마치며 ******** 이 글에서 소개한 파이썬 가상 환경 만들기 외에도 다양한 도구를 사용해서 파이썬 가상 환경을 만들고 진입하는 방법이 있습니다. 이런 도구는 다른 글에서 다를 수 있게 되길 바랍니다. 파이썬 가상 환경에 대한 이야기는 이걸로 마칩니다. from. 파이썬 수다장이 날다의 아저씨 .. rubric:: 각주 .. [#] 엄밀히 말하면 파이썬에서 라이브러리를 찾는 경로는 site-packages 에서 먼저 찾지는 않습니다.