일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MicroService
- KSP2
- CDK
- 개발환경
- dunder
- 패키지 매니저
- 가상환경
- Bitcoin
- cloudformation
- 벌집성단
- 파이썸
- 천체관측
- 블록체인
- 관측일지
- MSA
- python
- monolithic
- 커벌스페이스프로그램
- 파이썬
- 비트코인
- package.json
- 얼리억세스
- Ethereum
- virtualenv
- 혼공파
- Blockchain
- Argument
- function
- terraform
- 이더리움
ulismoon
[Python] 독립적인 가상의 파이썬 실행환경, virtualenv (1) 본문
다양한 프로젝트, 수많은 패키지, 복잡한 의존성...
파이썬으로 개발을 하다보면 거의 항상 복수의 패키지를 설치, 사용하게 된다. 그런데 이걸 다 그냥 깔아버리면 해당 패키지는 그 컴퓨터에서 사용하는 모든 파이썬 패키지에 영향을 주게 되고, 이는 많은 문제를 일으킬 수 있다.
예를 들어 프로젝트 A, B가 동일한 X 라는 패키지를 사용한다고 하자.
그런데 A 프로젝트는 모종의 사정으로 X의 1.0 버전을 사용해야 하고, B는 최신버전인 X의 2.0을 사용하게 되었다면, 컴퓨터에는 어떤 버전을 설치해야 할까?
단순히 생각했을 때에는 2.0이 최신이니 2.0을 깔면 될 것이라고 생각하지만, 파이썬2 가 파이썬3 으로 넘어오면서 하위호환을 버린 것을 생각하면 무작정 최신버전을 깔아놓는 것은 패망의 지름길이다.
"프로젝트별로 패키지 버전을 명시해놓고 작업할때마다 패키지를 계속 깔게 하면 어떨까? 그러면 매번 그 프로젝트에서 사용하는 버전을 사용하니까 문제 없는거 아냐?" 라고 생각하신다면 numpy나 pandas 같은 패키지를 한번 깔아보시길 추천드린다. 이런 거대한 패키지는 설치하는 데만 수 분 이상이 소요된다. 단지 다른 프로젝트를 빌드하고 싶은 것뿐인데 패키지 설치하느라 시간을 수~수십분씩 날려먹는 건 바보같은 짓이다.
그냥 봐도 썩 좋아보이지 않는다...
내가 불편하면 남들도 불편하던데.... 누가 만들어놓은거 없나...
이 문제를 해결하기 위한 이론적으로 최선의 방안은 무엇일까? 그야 당연히 프로젝트별로 독립된 실행환경을 가지도록 해주면 아무 문제 없을 것이다. 루비 진영의 경우 rbenv라는 것을 이용해 이러한 독립 환경을 구축하고 사용한다.
파이썬에서 이와 같은 역할을 해주는 패키지가 바로 virtualenv 라는 패키지이다. 공식 문서에서는 뭐라고 하고 있는지 살펴보자.
virtualenv
is a tool to create isolated Python environments.
고립된 파이썬 환경을 만들어준단다. 매우 바람직하다. 어떻게 쓰는건지는 아직 모르겠지만 이걸 쓰면 깔끔하게 분리된 여러 개의 파이썬 실행 환경을 가질 수 있을 것 같은 기분이 든다. 그럼 본격적으로 virtualenv에 대해 살펴보자.
virtualenv 설치, 사용
*nix + python 2.7 기준으로 pip를 이용해 패키지를 설치하면 /usr/lib/python2.7/site-packages 같은 곳에 패키지가 설치된다. 문제는 저 /usr/lib 이라는 게 시스템 전체에 영향을 주는 위치라는 것이다. virtualenv는 시스템 환경변수의 PATH를 적절히 조작해 파이썬을 완전히 독립된 환경에서 사용할 수 있게 해준다.
그럼 직접 ubuntu 의 따끈한 LTS인 16.04에 virtualenv를 설치하면서 환경변수를 어떻게 만져주는지 확인해보자.
일단 virtualenv를 쉽게 설치하기 위해 시스템에 pip를 먼저 설치하자. 링크를 파일로 저장해 파이썬으로 실행시키면 된다. sudo 권한으로 실행해야 에러 없이 설치할 수 있다.
virtualenv가 독립된 가상환경을 만들어준다고 했는데, 이를 위해 virtualenv 자신만큼은 시스템에 설치를 해야 한다. 왠지 가상환경을 만들기 위해 시스템에 패키지를 설치해야 하는 게 모순인 것 같아 보인다. 그리고 사실 이것조차도 해결할 수 있는 방법이 있지만, 상당히 귀찮으므로 패스.. virtualenv는 다음 명령어로 쉽게 설치가 가능하다.
한 거 없는데 설치가 끝났다. 이제 virtualenv를 사용하기만 하면 된다. ㄹㅇ.
사용법도 설치법만큼이나 간단하다. 내가 가상환경을 만들고 싶은 폴더로 가서 다음 명령어처럼 가상환경을 만들어주기만 하면 된다.
[env_name] 자리에는 원하는 아무 이름이나 써도 상관 없으나, 통상적으로 env, venv, .env, .venv 등이 사용된다.
가상환경을 생성은 했지만 그냥 이걸 쓸 수 있는게 아니라 이 환경을 사용하기 위해 활성화를 해야 한다. [env_name]/bin/activate 라는 파일을 실행하면 만들어놓은 가상환경을 실행할 수 있다.
그럼 실제로 virtualenv를 사용하면 파이썬 개발환경이 완전히 분리되는지 확인해보자. 두 개의 프로젝트에 각각 virtualenv를 만들고 다른 버전의 sqlalchemy 패키지를 설치해 보았다. 문제 없을까?
맨 밑에서 두 번째 줄을 보면 서로 다른 버전의 SQLAlchemy가 문제 없이 공존(?)하는 것을 확인할 수 있다.
tl;dr
ps. 자동으로 현재 디렉터리에 있는 virtualenv를 잡아주는 autoenv 같은 것들도 있다. 활용하면 좋을지도..
'Development' 카테고리의 다른 글
IaC - MSA 와 AWS CDK: 코딩을 통한 직관적인 IaC (0) | 2022.04.15 |
---|---|
[Python3] Extended Iterable Unpacking - 어-썸한 파이썬의 맛을 보아라 (0) | 2017.04.27 |
[Python 2/3] dict() 안의 key 찾기...에서 시작한 dict key의 생김새 톺아보기 (0) | 2017.03.16 |
[Python] Function Argument (0) | 2016.06.22 |
[Python] 독립적인 가상의 파이썬 실행환경, virtualenv (2) (1) | 2016.05.13 |