일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- git #github #내일배움캠프
- target
- A태그
- Display
- 알고리즘
- vscode
- WIL
- time()
- Iterator
- 함수실행시간
- sql
- AI 5기
- 가상환경
- 프로그래머스
- itertools
- Level1
- position
- iterable
- venv
- googlesheet
- googleappscript
- 내일배움캠프
- cte
- onClick
- AI
- gitignore
- with\
- python
- 우선순위
- 함수성능평가
- Today
- Total
05의 개발 계발
[TIL] 230419 coroutine & asyncio | pipenv & poetry 본문
TIL 학습목표
- coroutine & asyncio 의 개념과 관계를 안다.
- python에서 asyncio 를 사용할 수 있다.
- requirements.txt 의 한계와 의존성관리에 대해 이해한다.
- pipenv & poetry 를 사용해 패키지관리를 할 수 있다.
1) coroutine & asyncio
코루틴 Coroutine
서브루틴 / 코루틴
┌ Sub + routine : 종속적인 루틴(보조 루틴) [함수]
└ Co + routine : 협력적으로 실행되는 루틴
동기 비동기
┌동기처리 : 순차 처리 방식
└비동기 처리 : 여러 작업 동시에 처리
파이썬 코루틴 Coroutine
실행 중인 함수를 잠시 중단 하고 나중에 실행을 재생하는 기능
yield | coroutine 실행중 yield 를 만날 때마다 함수 일시 중단(후 값이 들어온다면 값을 반환 ≒ return)
next(#) | 다음 yield 를 만날 때까지 coroutine 재개(아래의 경우 무한루프 도는 중)
.send(#) | coroutine 에 값 전달하기 → coroutine 다시 실행 → yield = #
def my_coroutine():
while True:
value = yield
print('Received value:', value)
# 코루틴 객체 생성
co = my_coroutine()
# 코루틴 실행 준비
next(co)
# 값을 보내기
co.send('안녕, 반가워!')
def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
print(next(gen)) # 1 # 직전 yield 이후부터 실행 재개,
print(next(gen)) # 2 # 다음 yield 만나기 전까지 실행
print(next(gen)) # 3
asyncio
=비동기 프로그래밍을 위한 라이브러리: 코루틴 이용
await asyncio
.run() : 코루틴시작
await : 값을 받아와야하는 상황에서 대기시키기
추가학습1 추가학습2
2) requirements.txt 의 한계와 의존성관리
Module - a file containing Python definitions and statements.
Package -a way of structuring Python’s module namespace by using “dotted module names”.
Library - collection of modules
pip( = python package management)
python package installation
pip install SomePackage #설치
pip search SomePackage #검색
pip install SomePackage==1.0.4 #특정 버전 지정 설치
pip uninstall SomePackage #삭제
pip freeze # 현재 설치된 패키지와 버전 목록 조회
외부라이브러리관리(의존성관리)
┌어떤 버전/어떤 패키지가 쓰였는가
└어떤 버전/어떤 패키지가 쓰일 수 있나
ex) 장고의 의존성 패키지 = 장고설치시 같이 설치되는 패키지들
의존성을 관리하지 않는다면, 라이브러리로 인한 에러를 디버깅할 수 없다.
requirements.txt 한계
pip freeze > requirements.txt # 사용하는 패키지 기록
pip install -r requirements.txt # 사용하는 패키지 설치
한계-1 이원화되지 않은 개발용, 배포용 패키지
배포용 ⊂ 개발용
개발중 test용도로 설치한 패키지들 중 배포에 꼭 필요한 패키지가 무엇인지 파악하기 힘들다
한계-2 의존관계 파악의 어려움
한 파일 내에서 구분없이 리스트화되어 저장되어, 의존성 패키지의 관계를 파악할 수 없다.
(=패키지 트래킹이 어렵다.)
의존관계 파악이 안되니 uninstall을 해도 의존성패키지는 함께 삭제되지 않는다.
한계-3 설치시 발생하는 문제
가상환경에서 pip install -r requirements.txt??
-파이썬은 가상환경이 많다
-IDE가 바뀌면 새로적용해야한다.
그래서 이를 보완하여 나온 것이 pipenv & poetry !
3) pipenv & poetry
▶ pipenv : basic usage
- 똑같은 패키지 설치되도록 항상 보장, 스냅샷 생성
- 의존성 관리 Pipfile Pipfile.lock (→ VCS)
- (pyenv) Python 버전 전환 용이
- 개발용 패키지설치 pipenv install --dev
배포용 패키지설치 pipenv install
- 장점
+패키지 설치/가상환경/의존성 관리 한번에!
+의존성 그래프 지원
+패키지 버전별 관리 편리
+개발용,배포용 패키지 나누어 관리 가능 - 단점
- masOS에서 성능 저하 문제가 있어서
- release 지연문제
단점이 발견된 pipenv.. 그래서 요즘 대세는! poetry
▶ poetry : basic usage
- poetry search 조회기능
- poetry show 현재
- poetry show --tree 의존성 조회
- 개발용 패키지설치 poetry add --dev
배포용 패키지설치 poetry add - 장점
+패키지 설치/가상환경/의존성 관리 한번에!
+의존성 그래프 지원
+패키지 버전별 관리 편리
+개발용,배포용 패키지 나누어 관리 가능
+Publish 기능
+패키지 검색 기능
4) 알게 된 점 (Learnd)
asyncio 와 poetry 를 알게 되었다. 다음 프로젝트 때 활용해보도록 하자!
'TIL' 카테고리의 다른 글
[TIL] 230421 실패율 | try-except , dict, sorted (0) | 2023.04.21 |
---|---|
[TIL] 230420 gitignore를 무시한 .vscode 폴더 issue (+원인파악완료) (0) | 2023.04.21 |
[TIL] 230418 데이터 타입별 메서드 + 프로세스, 스레드 (0) | 2023.04.18 |
[TIL] 230417 회원가입 조건 세분화하기 | if (0) | 2023.04.18 |
[TIL] 230407 [Python] [Django] Secret_Key 를 gitignore하기 (0) | 2023.04.07 |