Python 찍먹 - 패키지, 가상 환경, pip

조해빈·2023년 1월 18일
0

짧은이론

목록 보기
5/22

용어집
https://docs.python.org/ko/3.8/glossary.html#term-virtual-environment

패키지는,

모듈(일종의 기능들 묶음)을 모아 놓은 단위이고, 이런 패키지의 묶음을 라이브러리라고 합니다.
하지만 일반적으로 패키지와 라이브러리는 두 용어를 혼용해서 많이 써요.

가상 환경(virtual environment)이란,

같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경

  • 한 프로젝트에서 쓰는 패키지의 수는 다양하고, 서로 다른 프로젝트에서 요구하는 패키지의 목록이나 버전이 다를 수 있습니다.
  • 이렇게 요구사항이 다른 두 프로젝트를 한 컴퓨터에서 진행해야하는 상황에서 각 프로젝트마다 가상환경을 만들고 그 안에 필요한 패키지를 설치해주면 필요한 버전이 다르거나 두 패키지가 충돌을 일으키는 등의 문제 없이 관리를 할 수 있습니다.
  • 새 프로젝트에서 설치하는 패키지가 많다면 가상환경을 새로 잡아주는 게 좋습니다.

파이썬에서 가상 환경(virtual environment)은 하나의 PC에서 프로젝트 별로 독룁된 파이썬 실행 환경(runtime/interpreter)을 사용할 수 있도록 해줍니다. 가상 환경을 사용하지 않으면 PC 내의 모든 프로젝트에서 운영체제에 설치된 하나의 파이썬 런타임을 사용하게 되고 동일한 위치에 외부 패키지를 설치하고 서로 공유하게 됩니다. 이럴 경우, 하나의 프로젝트에서 설치한 패키지의 버전이 다른 프로젝트에서 설치한 동일 패키지의 다른 버전과 충동을 일으킬 소지가 생기기 때문에, 프로젝트 별로 독립된 가상 환경을 구성하여 사용하는 것이 권장됩니다.

파이썬에서 외부 패키지를 설치할 때는 일반적으로 pip이라는 패키지 매니저를 사용하는데, 기본적으로 운영체제에 파이썬이 설치된 위치의 site-packages 디렉터리에 안에 설치됩니다. 노드의 npm이나 자바의 maven과 같은 패키지 매니저가 프로젝트 별 패키지 설치를 지원하는 반면에, 아직 파이썬의 pip는 시스템 전역으로만 패키지를 설치할 수 있습니다. 파이썬의 가상 환경을 이용하면 프로젝트 별로 따로 패키지를 설치하고, 다른 프로젝트로 부터 격리시킬 수 있기 때문에 시스템 전역 패키지 설치로 인한 불필요한 이슈를 방지할 수 있습니다.

프로젝트 루트 폴더에서 아래와 같이 가상환경 생성.

python3 -m venv .venv

아래와 같이 가동.

source .venv/bin/activate
이거나 아니면
.venv\Scripts\activate
(그때그떄 폴더 명 맞는지 확인하면 될듯)

그러면 프롬프트의 앞부분이 가상환경 directory의 이름이 됩니다.

pip(python install package)

앱을 설치할 때 앱스토어/플레이스토어를 가듯이, 새로운 프로젝트의 라이브러리를 가상환경(공구함)에 설치하려면 pip 를 이용하게 됩니다.

  • pip list명령으로 현재 설치된 package들의 목록을 볼 수 있습니다.
  • pip install <package_name>명령으로 원하는 패키지를 설치할 수 있습니다.

다음 명령을 실행하여 requests 패키지를 설치합시다.

pip install requests


설치가 됐다.

우리가 자바스크립트에서 ajax를 써서 GET요청을 보냈던 것처럼, 파이썬에서는 아래 코드처럼 requests 패키지를 이용하여 서울시 대기 OpenAPI에서 미세먼지 정보를 받아올 수 있습니다.

import requests <------ 설치 후에 import해야 됨!

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 값

중구의 NO2값으로 0.0이 프린트된다.
아래를 보면 역시 옳게 출력됐음을 알 수 있다.

그럼 조건문, 반복문 연습을 위해 IDEX_MVL 값이 60 미만인 구의 이름과 값 프린트하기를 해본다.

import requests

r = requests.get('http://openapi.seoul.go.kr:8088/6d4d776b466c656533356a4b4b5872/json/RealtimeCityAir/1/99')
rjson = r.json()

gus = rjson['RealtimeCityAir']['row']

for gu in gus:
    if gu['IDEX_MVL'] < 60:
        print (gu['MSRSTE_NM'], gu['IDEX_MVL'])


중구 0.0
은평구 0.0
도봉구 58.0

profile
UE5 공부하는 블로그로 거처를 옮겼습니다!

0개의 댓글