Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python

파이썬 가상 환경

by
Difficulty:IntermediateLength:MediumLanguages:

Korean (한국어) translation by Dae-yeop Lee (you can also view the original English article)

개요

많은 사람들이 동시에 여러 파이썬 프로젝트를 진행합니다. 이때 여러 프로젝트가 동일한 라이브러리의 서로 다른 버전에 의존할 수 있습니다. 이것은 문제입니다. 단 하나의 프로젝트만을 진행하고 그것을 운영 환경에 배포하더라도 해당 서버의 시스템에 설치된 파이썬이 OS 업그레이드나 보안 패치로 인해 변경될 수 있으며, 그 결과 애플리케이션이 실패할 수 있습니다. 일반적으로 여러분은 프로젝트의 파이썬 환경을 완벽하게 제어하고 싶을 것입니다. 가상 환경으로 들어가 봅시다...

가상 환경의 기본 개념은 시스템에 있는 것과 별도로 파이썬 인터프리터와 사이트 패키지를 만드는 것입니다. 게다가 그러한 가상 환경을 여러 개 만들 수도 있습니다. 이 방식은 두 가지 문제를 해결합니다. 자체적인 의존성을 가진 별도의 가상 환경을 각 프로젝트에 할당하고 다른 프로젝트 및 시스템에 설치된 파이썬과의 충돌에 대해 신경 쓰지 않아도 됩니다.

이번 튜토리얼에서는 가상 환경의 기본 개념과 가상 환경을 만들고 사용하는 방법을 배우며, 특별한 상황에 대한 다양한 대안을 살펴보겠습니다.

Virtualenv

virtualenv 패키지는 가상 환경의 개념을 지원합니다. virtualenv는 pip install virtualenv로 설치할 수 있습니다.

virtualenv가 설치되면 가상 환경을 만들 수 있습니다. "venv_1"과 "venv_2"라는 두 개의 환경을 만들어 봅시다.

어떤 일이 있어났는지 봅시다.

"bin" 하위 디렉터리에 몇 개의 실행 파일과 심볼릭 링크가 만들어진 것을 확인할 수 있습니다. 여기에는 파이썬 인터프리터 자체와 pip, easy_install, 그리고 가장 중요한 활성화 스크립트가 들어있습니다.

activate 스크립트가 핵심입니다. 특정 가상 환경을 활성화하려면 source ~/venv_1/bin_activate와 같이 activate 스크립트를 실행합니다. 위 명령을 실행한 효과는 다수의 환경변수를 설정하고 프롬프트를 활성화된 가상 환경의 이름으로 변경하는 것입니다. 또한 모든 것을 재설정할 deactivate() 셸 함수를 추가합니다. 일단 가상 환경이 활성화되고 나면 python을 입력했을 때 해당 의존성을 가진 파이썬이 실행될 것입니다.

이번에는 비활성화해봅시다.

시스템에 여러 개의 파이썬 인터프리터가 설치돼 있는 경우 -p 옵션을 사용해 가상 환경에 사용할 인터프리터를 지정할 수 있습니다. 다음은 파이썬 3 가상 환경입니다.

virtualenv는 pypy에서도 작동합니다.

첫 번째 환경을 비활성화하지 않은 상태에서 한 환경에서 다른 환경으로 곧바로 전환할 수 있습니다.

좋습니다. 이번에는 두 개의 서로 다른 가상 환경에서 동일한 패키지의 두 가지 버전을 사용하는 방법을 살펴보겠습니다. 이는 각 환경을 활성화하고 원하는 버전을 설치하는 것만큼이나 간단합니다. 환경은 완전히 독립적이므로 다른 환경에 다른 버전이 있다는 사실은 문제가 되지 않습니다.

sh 패키지 버전 1.0.0을 "venv_1"에 설치해 봅시다.

"venv_2"로 전환하고 1.11 버전을 설치해 봅시다.

이제 "venv_1"로 되돌아가 sh 패키지의 버전이 여전히 1.0인지 확인해 봅시다.

Virtualenvwrapper

가상 환경의 활성화, 비활성, 전환은 시간이 좀 지나면 오래 걸릴 수 있습니다. 여러 가상 환경을 관리하는 경우 제어가 불가능해질 수 있습니다. 이때 virtualenvwrapper가 유용합니다. Virtualenvwrapper를 이용하면 가상 환경을 나열, 생성, 삭제, 복사할 수 있습니다. 또한 환경을 손쉽게 전환할 수 있습니다.

다음은 모든 명령어입니다.

저는 mkvirtualenvworkon라는 두 가지 명령을 많이 사용합니다. 모든 가상 환경은 ~/.virtualenvironments 아래에 만들어집니다.

새로운 가상 환경을 만드는 방법은 다음과 같습니다.

virtualenv와 비슷하지만 디렉터리를 지정할 필요 없이 이름만 지정하면 됩니다. 새로운 환경은 다음과 같습니다.

환경을 전환하려면 workon 명령을 사용합니다. 이때 인자를 지정하지 않으면 모든 가상 환경이 나열되기만 합니다. 보다시피 저도 몇 개 있습니다.

Virtualenv-Burrito

Virtualenv-Burrito는 virtualenv와 virtualenvwrapper를 하나의 명령으로 설치하는 프로젝트입니다.

파이썬 3 Venv

venv 모듈은 파이썬 3.3에 추가됐으며 virtualenv와 마찬가지로 내장된 가상 환경 생성 및 관리 기능을 제공합니다. 가상 환경을 만드는 명령은 pyenv입니다. 그 외에는 virtualenv와 상당히 비슷합니다.

Conda

가상 환경은 여러 프로젝트 간의 의존성을 격리하는 데 매우 유용합니다. 그러나 그것은 네이티브 라이브러리로 확장되지 않습니다. 많은 C 확장은 특정 버전의 네이티브 라이브러리에 의존하며, 가상 환경별로 다를 수 없습니다.

Conda는 이 같은 문제를 해결할 수 있습니다. Conda는 파이썬 의존성뿐 아니라 모든 의존성을 처리하는 패키지 관리 시스템입니다. 심지어 비파이썬 소프트웨어를 패키징하는 데도 사용할 수 있습니다.

가상 환경의 대안

가상 환경을 사용해야 합니까? 별로 그렇지는 않습니다. 어떤 이유로 가상 환경이라는 마법을 좋아하지 않는다면 다른 방법이 있습니다.

직접 구축하기

가상 환경의 기능은 매우 간단합니다. 완전한 제어가 필요하다면 직접 해보고 정확히 원하는 도구나 패키지의 부분집합을 대상 디렉터리 구조로 복사하고 환경변수를 설정하기만 하면 됩니다.

VM 또는 도커화된 시스템 파이썬

애플리케이션을 도커 컨테이너나 클라우드 이미지로 만든 다음에는 프로젝트가 하나뿐이므로 중간에 가상 환경이 필요하지 않을 수 있습니다. 그럼 시스템 파이썬을 기반으로 구축할 수 있으며, 이것은 변경되지 않으리라 확신할 수 있습니다.

Tox

다른 인터프리터와 환경에서 코드를 테스트하는 것이 신경 쓰이는 경우 Tox가 모든 어려운 작업을 대신 해줄 수 있습니다. Tox는 여전히 가상 환경을 기반으로 사용하지만 여러분은 그것들을 다루지 않아도 됩니다.

모범사례

시간이 지남에 따라 견고한 파이썬 시스템을 위해 등장한 패키징 및 가상 환경 모범사례가 있습니다.

요구사항 파일에 정확한 버전을 지정하십시오

고정(pin)은 의존성의 버전을 정확하게 지정하는 것을 의미합니다. 새 버전이 나와서 새 서버에 애플리케이션을 설치하더라도 테스트한 버전이 계속 사용되고 작동하겠지만 그것은 최신 버전이나 최적의 버전이 아닙니다. 이 경우 의존성을 계속 최신 버전으로 유지하고 싶다면 명시적으로 버전을 업그레이드해야 한다는 단점이 있지만 보통 그렇게 할 만한 가치가 있습니다.

절대 시스템 파이썬을 사용하지 마십시오

시스템 버전에 의존하는 것은 거기에 의존하는 다른 도구가 있기 때문에 좋지 않은 사례에 해당하며, 시스템 패키지를 업그레이드할 경우 다른 도구가 망가질 수 있습니다. 또한 시스템 패키지를 수정하는 보안 업데이트의 영향을 받을 수도 있습니다. 또는 일반적으로 OS를 업그레이드하려는 경우 시스템 파이썬이 이제 다르다는 사실을 알게 될 수도 있습니다.

이미지 생성 시 개인 패키지 색인을 사용하십시오

PyPI가 다운됐을 수 있습니다. 새 이미지를 만들어야 하고 PyPI에 접근할 수 없는 경우 문제가 발생합니다. Devpi는 이때 사용하기 좋은 도구입니다.

결론

한 시스템에서 여러 파이썬 프로젝트를 충돌 없이 관리할 수 있는 여러 방법이 있습니다. 어떤 방법이 가장 적합한지 알아내고 사용하십시오. 가상 환경을 만드는 것은 빠르고 쉽습니다. 이처럼 유용한 도구를 활용하는 것에 주저하지 마십시오. 특별한 요구사항이 있는 경우에도 이를 위한 여러 솔루션이 있습니다.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.