BLOG main image

분류 전체보기 (321)
free (36)
영화 (85)
드라마 (21)
게임 (28)
만화/책 (34)
개발 (46)
IT (68)
연예 (3)
Visitors up to today!
Today hit, Yesterday hit
TETRIS
rss
2018. 4. 14. 10:22

여태까지는 python 2.7 을 사용했고, 사용하는 라이브러리가 항상 일정했기 때문에 가상 개발 환경이 필요가 없었다.


python 3.6.5 로 갈아타면서, 동시에 여러 버전을 사용할 이슈가 생겨버렸다.


Docker 를 사용하는 것도 생각해봤는데,


최소 4개의 개발 환경에서 (윈도우 2, 우분투 2) 작업해야 하는데 각각 도커 셋팅하기 좀 귀찮기도하고, 

애초에 python 은 virtualenv  가 워낙 편하게 되어 있어서 이걸 그냥 사용하는 것으로 결심.


virtualenv 사용 방법은 정말 간단하다.


일단 설치


$ pip install virtualenv


그리고, 가상 환경으로 사용할 프로젝트 폴더로 이동


$ cd ~/project/greatapp


$ virtualenv -p python3 venv 


그리고, activate 시키면 된다.


$ source venv/bin/activate 


끝.



여기서, 가상 환경 이름을 venv 로 할지 아니면 .venv 로 할지 꽤 고민을 했는데

고민 끝에 일반적으로 많이 사용하는 venv 로 하기로 결정.

.venv 를 고려했던 이유는 .idea 을 비롯해서 .gitignore 에 포함할 이름을 비슷한 패턴으로 유지하고 싶어서였는데,

윈도우에서 .venv 라는 폴더 관리가 이슈도 있고, venv 쪽이 더 대세인것 같아서... 



이렇게 실행하면 프롬프트 앞쪽에 (venv) 라고 붙어서, 가상 환경 사용 상태임을 명확하게 알 수 있다.


그 후에


$ pip install flask 

$ pip install sqlalchemy 


등등, 팩키지 설치해주면 된다.


설치한 팩키지는 .gitignore 에서 제외 처리 했기 때문에 다른 환경에서는 다시 설치해줘야 하는데,


$ pip freeze > requirements.txt 


이렇게 저장해둘 수 있다.


근데, 매번 source venv/bin/activate  이거 입력하는게 좀 귀찮다.


그래서 등장한 것이 바로 autoenv


일단 설치.


$ pip install autoenv


설치했으면 실행


Ubuntu 17.10 기준으로 autoenv 실행은  $ source ~/.local/bin/activate.sh 로 한다. 


이왕이면 .bashrc 에 넣어두면 편하다.


autoenv 가 작동하면, 가상 환경으로 설정한 폴더에 .env 가 있으면 자동으로 실행해준다.


source venv/bin/activate 를 .env 에 입력해 놓으면, 폴더 진입할 때 자동으로 가상 환경으로 바뀐다.


Nice!



이 상태에서 사용하는 python, pip 는 모두 venv/bin 에 있는 것을 사용한다.


$ which python

/home/tetris/project/greatapp/venv/bin/python



PyCharm 에서 가상 환경 사용하는 것은 간단하다.


Project Setting - Project Interpreter 에서 톱니바퀴 누르고 Add 선택하면, Virtual Environment 설정이 나오는데...


 venv/bin/python 을 선택해주면 된다. 



가상 환경에서 나가려면 $ deactivate 를 입력하면 된다.


상위 폴더에 .env 를 만들고 deactivate 를 자동으로 실행해주는 방법도 있는데, 해보니까 이건 그렇게 유용하지 않더라.



*추가

하위 폴더로 접근할 떄에도 .env 를 호출하는 문제가 생김

.env 를 아래와 같이 변경하면 프로젝트 루트 폴더에서만 작동


#!/bin/bash


if [ "$PWD" = "/home/tetris/project/greatapp" ]; then

    source venv/bin/activate

fi