Python 가상환경(virtualenv) 설정하기

2019. 3. 4. 20:13Python/etc





Python 가상환경이란? (Virtualenv)


여러분들은 Python을 여러분들의 각자의 목적으로 사용 할 것이다. 어떤 사람은 Django, Flask를 통한 웹 서버 개발, 어떤 사람은 Numpy, Pandas, Tensorflow를 통한 데이터 분석 및 처리, 어떤 사람은 Requests, BeautifulSoup를 통한 크롤링을 목적으로 말이다. 모두들 각자가 필요한 모듈을 설치하여 사용 할 것이다.


자 여기서 만약, 내가 작업 하던 환경에서 다른 환경으로 내가 작성한 코드들을 옮겨 실행 하려고 했을 때, 무슨 일이 벌어질까? 만약 코드를 진행하는 환경에서 사용하는 모듈의 버전이 달라진다면? 그로 인해 원래 돌아가는 코드가 안 돌아가게 된다면? 여러분들은 머리를 움켜 잡게 될 것이다.


(!@#$%^&*)


그러므로 우리는 코드를 실제로 실행 할 다른 환경위에 가상환경을 구축하여, 우리가 작성한 코드들을 안전하게 실행 해 보고자 한다. 추천하는 가이드 라인은 다음과 같다.


  1. 개발 환경 위에 가상환경 구축, 그리고 그 위에서 코드작성

  2. 필요한 모듈이 있을 때마다 가상환경에 모듈 설치

  3. 프로그램이 완성 되면 가상환경에서 모듈 목록 추출

  4. 배포 환경 위에 가상환경 구축, 그리고 추출한 모듈 목록 설치

  5. 배포용 프로그램 실행


일단 Python 3.5 미만 버전에서는 따로 virtualenv 모듈을 설치해야 했지만, 운 좋게도 Python 3.5 이상부터는 기본 탑재 되어 있으므로 걱정 하지 않아도 된다. 아 물론, 이제 Python을 시작한 분들은 자신이 무슨 버전을 쓰는 지 잘 모를 수도 있는데, 대부분 Python 3 (3.5.x)를 사용하고 있을 테니 걱정하지 말도록 하자.

(정 걱정이 된다면 터미널 혹은 명령 프롬포트를 켜서 'python --version'을 입력 해 보자.)




1. 개발 환경 위에 가상환경 구축하기


일단 명령 프롬포트 혹은 터미널을 실행한다. 그리고 가상 환경을 설치할 폴더로 이동한다. "cd 가상환경을설치할폴더" 를 이용(다른 드라이브로 이동 할 때는 드라이브명: 을 입력한 후, cd 명령어를 사용하자.), 폴더를 옮긴 후 다음 명령어를 실행한다. "python -m venv 설치할폴더" (리눅스 환경에서는 "python3 -m venv 설치할폴더")




그러면 우리가 못보던 폴더가 등장한 것을 볼 수가 있다!



그리고 우리는 우리가 만든 가상환경을 활성화 시켜야 한다.


Windows: call <venv폴더>\Scripts\activate

Linux: source <venv폴더>\bin\activate


이를 입력하면... 


이렇게 가상 환경에 접근이 된 것을 볼 수가 있다. 이 가상 환경에서 실행된 Python 스크립트는 엄연히 먼저 설치된 Python 환경과는 분리된 환경이다. 즉, 모듈이 아무것도 깔려있지 않은, 깨끗한 환경이다.


아래는 내가 실행하려는 예제 코드이다. 이를 가상 환경 위에서 실행 하고자 하면 당연히 에러가 발생할 것이다. flask 모듈이 설치 되지 않았기 때문이다.


from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Hello, World!"

if __name__ == "__main__":
    app.run()


2. 가상환경에 모듈 설치


가상환경에서 모듈을 설치하는 것은 간단하다, 가상 환경 위에서 pip를 이용하여 모듈을 설치하면 된다.

그리고 다시 실행해 보면 정상적으로 작동 할 것이다.



3. 모듈 목록 추출하기


일단 지금 가상환경에 설치된 모듈들의 목록을 뽑아 내야 할 것이다. 그 방법은 간단하다. pip에 있는 기능인 freeze를 이용하면 된다. 사용 방법은 간단하다.


$ pip freeze > 파일명.txt


일단 한번 cmd 창에서 실행해 보자.



그러면 해당 폴더에 requirements.txt가 생성된 것을 볼 수 있고, 그 안에는 설치된 모듈의 목록과 버젼들이 나열되어 있는 것을 볼 수 있다. 왜 내가 설치하지 않은 모듈도 있냐고 할 수 있다. 아마 높은 확률로 당신이 설치한 모듈과 관련하여 필요한 모듈들이 같이 설치 되었을 가능성이 높다.


 

4. 배포 환경 위에 가상환경 구축, 그리고 모듈들 설치


배포 환경에도 가상환경을 구축하는 것이 좋다. 기존에 다른 버전으로 설치 된 모듈과 충돌 할 수 있기 때문이다. 일단 cmd를 종료 하고, 기존에 깔려 있던 가상환경을 지우고 다시 처음부터 가상환경 구축 및 모듈 설치를 진행 해 보겠다.



일단 새롭게 가상 환경 구축 후 접근


그 다음에는 다음 명령어를 실행 해 보자,


$ pip install -r 파일명.txt


이는 "파일명.txt"에 있는 모듈 목록들을 재귀 적으로 전부 설치한다. 단, 파일명.txt 가 해당 폴더에 존재 하여야 한다.


5. 배포용 프로그램 실행


그리고 다시 내가 만들었던 app.py 스크립트를 실행해 보자.



정상적으로 실행 되는 것을 확인 할 수 있다.