가상환경 (Virtual environment)
같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경. 각 프로젝트마다 가상환경을 만들고, 그 안에 필요한 패키지를 설치해주면, 필요한 버전이 다르거나 두 패키지가 충돌을 일으키는 등의 문제 없이 관리를 할 수 있다.
가상환경은 기본적으로 Python 에서 제공하는 도구(ex)'venv') 를 이용하여 생성하나, 다른 플랫폼에서도 유사한 개념을 가진 도구를 제공한다. Node.js의 npm과 yarn 이나 Java의 Gradle 과 같이 의존성을 관리하는 이들의 역할이다.
가상환경과 의존성 관리 도구의 차이점
가상환경 :
- python의 가상환경은 실제로 독립적인 python 실행환경을 제공한다.
- 프로젝트 별로 독립적인 Python 해석기와 패키지를 사용할 수 있다.
- 시스템 전역 Python 환경과 완전히 격리된 환경을 만든다.
의존성 관리 도구 (npm, Gradle) :
- 의존성 관리 도구는 독립적인 실행 환경을 제공하지 않지만, 프로젝트별로 패키지나 라이브러리를 관리.
- 프로젝트 디렉토리에 의존성을 설치하여, 각 프로젝트가 독립적으로 필요한 패키지를 가질 수 있게 한다.
- 특정 언어의 해석기나 런타임 자체를 격리하지는 않는다.
npm 이나 Gradle 은 가상환경을 제공하지는 않지만, 프로젝트별 의존성 관리라는 면에서 유사한 기능을 수행한다. 이 도구들은 프로젝트별로 패키지를 설치하고 관리하는 데 중점을 둔다. 즉, npm 이나 Gradle은 Python의 가상환경과는 다른 개념이지만, 프로젝트 별 독립성을 제공하는 유사한 역할을 수행한다.
VM 활용하기
먼저 가상환경을 생성해보자.
python3 -m venv 가상환경이름
가상환경을 생성했다면, 이름으로 디렉토리가 생성되었을 것이다. (로컬에서도 확인 가능)
Terminal 에서 다음과 같이 가상환경을 활성화
(venv 를 생성한 곳으로 가서 활성화해야한다)
source .venv/bin/activate
활성화되면 아래와 같이 프롬프트의 앞부분이 가상환경 directory의 이름이 된다.
prac_python git:(chapter03) source .venv/bin/activate
가상환경 비활성화
deactivate
pip
Python Package Index 저장소로부터 파이썬으로 작성된 각종 라이브러리를 설치하고 관리해주는 도구이다.
앱을 설치할 때 앱스토어/플레이스토어를 가듯이, 새로운 프로젝트의 라이브러리를 가상환경에 설치하려면 pip 를 이용하게 된다.
(가상환경은 물론 시스템 전역에서도 사용할 수 있다.)
pip는 자주 업데이트 되므로 가상환경에서 최신버전의 pip로 업그레이드 해주는 것이 좋다.
전역에서 파이썬 패키지를 설치할 때처럼 pip install 을 이용해 가상환경 안에 라이브러리를 설치해주면 된다.
pip install --upgrade pip
pip --version
requests 라는 라이브러리를 설치하려면 아래와 같이 Terminal 에 입력하면 된다.
pip install requests
로컬에서 requests 라이브러리를 이용하여 weather.py 파일을 작성하였고, 이를 가상환경에서 실행시켜 보자.
#weather.py
import requests
r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()
print(rjson)
print(rjson['RealtimeCityAir']['row'][0]['NO2']) #중구의 NO2 농도
gus = rjson['RealtimeCityAir']['row']
#모든 구의 IDEX_MVL 값 프린트하기
for gu in gus:
print(gu['MSRSTE_NM'], gu['IDEX_MVL'])
#IDEX_MVL 값이 60 미만인 구의 이름과 값 프린트하기
gus = rjson['RealtimeCityAir']['row']
for gu in gus:
if gu['IDEX_MVL'] < 60:
print (gu['MSRSTE_NM'], gu['IDEX_MVL'])
가상환경을 활성화시킨 python 명령어를 입력하면 출력이 잘 되는 것을 확인할 수 있다.
python weather.py
ref :
- https://didi-universe.tistory.com/entry/python-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BDvirtual-environments-%EC%97%90%EC%84%9C-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0
- https://bentist.tistory.com/52
- https://ggangtalife.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-pipPackage-Installer-of-python%EC%9D%98-%EB%9C%BB-%EC%82%AC%EC%9A%A9%EB%B2%95