본문 바로가기

더 나은 엔지니어가 되기 위해/파이썬을 파이썬스럽게

(18)
Poetry 에서 바로 실행 명령 가능한 패키지 만들기 배경 어떤 파이썬 패키지들을 설치한 뒤 터미널에서 특정 명령어로 바로 실행가능한 경우가 있다. 예를 들면 다음과 같다. # 다음 처럼 패키지를 설치한 뒤 $ poetry add pytest # pip install pytest 로 해도 상관없다. # 다음 처럼 바로 실행 가능하다. $ pytest 이렇게 설치 후 터미널에서 특정 명령어로 바로 실행가능한 poetry 패키지를 만들려면 어떻게 해야할까? 해결 방법 poetry 프로젝트 내에 있는 pyproject.toml 의 [tool.poetry.scripts] 를 활용하면 된다. 간단한 예제로 직접 확인해보자. 이전 포스트 "Poetry 에서 로컬 패키지 add 하기" 의 예제를 그대로 이어서 사용해본다. 프로젝트 구조는 다음과 같다...
Poetry 에서 로컬 패키지 add 하기 배경 poetry 를 쓰면 일반적으로 add 명령어로 패키지를 가상 환경에 추가한다. 예를 들어 pandas 를 추가하고 싶으면 다음처럼 하면 된다. $ poetry add pandas 대부분의 경우 이렇게 pypi 에 등록된 패키지를 설치하곤 한다. 그런데 만약 pypi에 등록되지 않은 로컬 패키지를 add 하고 싶은 경우라면 어떨까? 예를 들어 프로젝트 패키지 구조가 다음처럼 되어 있다고 하자. my-project ├── dependencies │ └── my-sub-package │ ├── README.rst │ ├── my_sub_package │ │ ├── __init__.py │ │ └── my_func.py │ └── pyproject.toml └── pyproject.toml my-proj..
슬기로운 파이썬 트릭 5, 6 - 반복과 이터레이션 & 딕셔너리 트릭 이 글은 슬기로운 파이썬 트릭을 읽고 핵심만 빠르게 정리한 글이다. 6, 7장에서 정리할 내용이 적어 한 글에 압축하여 포스팅한다. 6장. 반복과 이터레이션 6장 앞 부분은 다음 파트들로 이루어져 있다. 6.1. 파이썬다운 반복문 작성하기 6.2. 리스트 컴프리핸션 이해하기 6.3. 리스트 분할 트릭과 스시 연산자 6.4. 아름다운 이터레이터 6.5. 제너레이터는 단순화된 이터레이터다. 6.6. 제너레이터 표현식 이 파트들은 너무 간단한 파이썬 내용이거나, 이전에 공부하며 기록했던 내용이라 그냥 과감히 넘어간다. 이터레이터, 제너레이터 관련해 이전에 공부한 기록은 파이썬 클린 코드 1 - 파이썬스러운 코딩을 파이썬 문법 컨셉에 가면 볼 수 있다. 6.7. 이터레이터 체인 이터레이터 체인이란 아래 예와 같..
슬기로운 파이썬 트릭 4 - 파이썬의 일반 데이터 구조 이 글은 슬기로운 파이썬 트릭을 읽고 핵심만 빠르게 정리한 글이다. 5.1. 딕셔너리, 맵, 해시테이블 dict : 믿음직한 딕셔너리 phonebook = { "bob": 1234, "alice": 3719 } 딕셔너리의 키는 불변타입(immutable) 만 가능하다. 조회, 삽입, 갱신 및 삭제의 시간복잡도는 O(1) 이다. 사용하지않을 이유가 거의 없다. collections.OrderedDict : 키 삽입 순서 기억 >>> import collections >>> d = collections.OrderedDict(one=1, two=2, three=3) >>> d OrderedDict([('one', 1), ('two', 2), ('three', 3)]) 해시의 특성상 데이터의 순서 개념이 없는데..
슬기로운 파이썬 트릭 3 - 클래스와 객체 지향 프로그래밍 이 글은 슬기로운 파이썬 트릭을 읽고 핵심만 빠르게 정리한 글이다. 전반적으로 대부분 아는 내용이지만 remind up 한다는 느낌으로 정리해본다. 4.1. 객체 비교: is vs == 예제 a = [1, 2, 3] b = a c = [1, 2, 3] >>> a == b True >>> a is b True >>> a == c True >>> a is c False 요점 정리 두 변수가 동일한(identical) 객체를 가리키는 경우, is 표현식은 True 로 평가된다. 두 변수가 동등한(equal: 내용이 같은) 객체를 가리키는 경우,== 표현식은 True 로 평가된다. 4.2. 문자열 변환(모든 클래스는 __repr__ 이 필요하다) 예제 class Car: def __init__(self, col..
슬기로운 파이썬 트릭 2 - 효과적인 함수 이 글은 슬기로운 파이썬 트릭을 읽고 핵심만 빠르게 정리한 글이다. 3.1. 파이썬 함수는 일급 객체다 함수는 객체다 파이썬의 함수는 일급 "객체"다. 즉, 함수를 변수에 할당하고 데이터 구조에 저장하고, 인자로 다른 함수에 전달하고, 반환할 수 있다. 함수 객체와 이름은 별개다. def yell(text): return text.upper() + "!" >>> bark = yell >>> bark("heumsi") "HEUMSI!" >>> bark.__name__ "yell" 함수는 데이터 구조에 저장할 수 있다. >>> funcs = [bark, str.lower, str.capitalize] >>> funcs[0]("heumsi") "HEUMSI!" 함수는 다른 함수로 전달할 수 있다. def gr..
슬기로운 파이썬 트릭 1 - 파이썬 코드를 정돈하기 위한 패턴 이 글은 슬기로운 파이썬 트릭을 읽고 핵심만 빠르게 정리한 글이다. 더 나은 파이썬 개발자가 되기 위해, 파이썬다운 코드에 대한 내용을 다룬다. 1장은 소개 글이라, 1장은 생략하고 2장부터 시작한다. 2.1. assert 문으로 방어하기 파이썬의 단언문은 프로그램 내부 자체 검사로 조건을 테스트하는 디버깅 도구다. def apply_discount(product, discount): price = int(product['price'] * (1 - discount)) assert 0 > test = Test() >>> test.__baz AttributeError: 'Test' object has no attribute '__baz' >>> test._Test__baz 42 __var__ 파이썬에서 정의..
파이썬 클린 코드 3 - 좋은 코드의 일반적인 특징 이 장에서는 훌륭한 소프트웨어 디자인을 위한 몇 가지 원칙들을 살펴본다. 개인적으로 개발적으로 정리하고 유념해야 할게 많았던 장이라 내용이 조금 길다. 책의 내용을 따라가되, 내가 추가적으로 살을 붙인 것들도 있다. 1. 계약에 의한 디자인 컴포넌트는 기능을 숨겨 캡슐화하고 함수를 사용할 고객에게는 API를 노출한다. API를 디자인할 때는 예상되는 입력과 출력 그리고 부작용을 문서화해야 한다. 코드가 정상 동작하기 위해 기대하는 입력과 호출자가 반환받기를 기대하는 것은 디자인의 하나가 되어야 한다. 여기서 계약이라는 개념이 생긴다. 계약에 의한 디자인이란 양측이 동의하는 계약을 먼저한 다음, 계약을 어겼을 경우 명시적으로 왜 계속할 수 없는지 예외를 발생시키는 것이다. 계약은 주로 사전 조건과 사후 조..