본문 바로가기

python79

[Typer] Python으로 CLI App 만들기 Typer는 FastAPI를 만든 곳에서 만든 CLI app을 만들수 있도록 도와주는 라이브러리입니다. FastAPI도 사용성이 너무 좋았었는데, Typer도 역시 너무 맘에 들어서 이렇게 소개를 드립니다. Installation 먼저 필요한 패키지를 설치합니다. $ pip install "typer[all]" Rich라는 패키지도 설치가 되는 데 이것도 아주 재밌는 패키지라서 app 만들 때 종종 사용하려고 합니다. ㅎㅎ Create a First Example 간단히 사용 예제를 보여드릴게요. import typer def main(name: str): print(f"Hello {name}") if __name__ == "__main__": typer.run(main) argparse 같은 내장 패키.. 2024. 3. 30.
[Python] PyPI에 패키지 배포하기 이번 포스팅에서는 직접 만든 패키지를 PyPI에 배포하는 방법에 대해 살펴보겠습니다. 여기서 소개드린 방법 외로도 다양하게 가능하지만, 좀 더 쉽고 간단하게 하실 수 있도록 한 가지 방법만 소개시켜드리는 것이니 유일한 방법으로 오해하지 않으시길 바랍니다. Create Project 먼저, 배포할 패키지 내용을 작성해 보겠습니다. 예제로 단순하게 인사말을 출력하는 패키지를 만들어 볼게요. root/ └── src/ └── hpractice/ ├── __init__.py └── main.py 나중에 프로젝트가 확장될 것을 고려하여 미리 이런 구조를 잡았습니다. 간단한 프로젝트라면 src 폴더 하위에 코드를 넣어도 되지만, 나중에 확장되어 유닛테스트 등이 생길 것을 고려하여 미리 폴더를 한 겹 더 감쌌습니다... 2024. 3. 16.
[FastAPI] Getting Started 최근 가벼운 서버를 구축할 필요가 생겨 사용하는 김에 정리를 해봅니다. 배우기 쉽고 빠른 성능을 보인다고 하니 가볍게 사용할 수 있고, Python 기반이라 금방 익힐 수 있는 것 같아요. Install Module 먼저, 필요한 모듈들을 설치해 줍니다. $ pip install fastapi "uvicorn[standard]" Implement Server 다음으로, server application을 구현합니다. # main.py from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"} Root("/") 경로로 요청이 오면 "Hello World"를 반환해 줍니다.. 2023. 9. 13.
[PyQt6] Save and Load Settings using QSettings 이번 포스팅에서는 QSettings를 사용하여 설정 정보를 저장하고 불러오는 방법을 살펴보겠습니다. Example Application import sys from PyQt6.QtGui import QCloseEvent from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget class MainWindow(QMainWindow): def __init__(self) -> None: super().__init__() widget = QWidget() self.setCentralWidget(widget) self.load_settings() def save_settings(self) -> None: print("Save") def load_settings.. 2023. 4. 6.
[Python] Create and Draw Graph 최근에 graph가 필요한 일이 있어서 써먹은 김에 정리해서 공유드립니다. 요기서 말하는 그래프는 알고리즘 공부를 하셨다면 마지막쯤에 보셨을 바로 그 그래프입니다. ㅎㅎ Create Undirected Graph 먼저 무지향성 그래프를 만들어보겠습니다. 이미 아시는 바와 같이 node 사이의 edge에 방향성이 없는 그래프입니다. 먼저, 간단하게 도와줄 모듈을 설치합니다. $ pip install networkx 해당 모듈을 사용하여 그래프를 만드는 것은 매우 쉽습니다. import networkx as nx my_graph = nx.Graph() 이게 끝이에요. ㅎㅎ 이제 간단히 노드 3개를 추가하고 2:1로 연결을 해줄게요. my_graph.add_node('A') my_graph.add_node('.. 2023. 3. 1.
[Python] Abstract Base Classes 이번에는 ABCs(Abstract Base Classes)에 관해 살펴보겠습니다. ABC는 인스턴스를 생성할 수 없고, 상속을 받아 사용되는 클래스입니다. ABC and ABCMeta 둘 다 ABC 개념을 나타냅니다. ABCMeta는 일반 클래스에서 사용할 수 있는 것 이상의 추가 기능을 갖춘 ABC를 정의하고 생성하는 데 사용되는 metaclass 입니다. from abc import ABC, ABCMeta, abstractmethod class HABC(ABC): @abstractmethod def test_habc(self): pass class HABCMeta(metaclass=ABCMeta): @abstractmethod def test_habcmeta(self): pass abc_instanc.. 2023. 2. 23.
[Python] Enumeration 이번에는 Python에서 enum 사용법에 대해 살펴보겠습니다. 당연히 포스팅 했던 내용인줄 알았는데, 없어서 찐당황했네요. ㅋ Fundamental 먼저 기본 사용법을 살펴보겠습니다. from enum import Enum # class syntax class Color(Enum): RED = 1 GREEN = 2 BLUE = 3 # functional syntax Color = Enum('Color', ['RED', 'GREEN', 'BLUE']) 각각 클래스 문법과 함수형 문법입니다. 값을 정의한 범위로 제한할 수 있어 예상치 못한 오류를 예방할 수 있습니다. IntEnum & StrEnum from enum import IntEnum, StrEnum class Numbers(IntEnum): ON.. 2023. 2. 21.
[Python] Data Classes 이 모듈은 C언어나 Go언어의 struct와 유사하게 class를 data type처럼 사용할 수 있도록 도와줍니다. dataclass Decorator from dataclasses import dataclass @dataclass class Vector: x: int y: int vector = Vector(1, 2) print(vector) # Vector(x=1, y=2) @dataclass decorator를 사용하여 class를 정의하면 Data Class가 됩니다. Data Class는 __init__() 혹은 __repr__()와 같은 special methods를 자동으로 정의해 줍니다. 또한, 다음의 parameter들을 명시적으로 넣어줄 수 있습니다. init : True일 경우, _.. 2023. 2. 20.
[Python] customtkinter 사용하기 customtkinter는 tkinter를 좀 더 modern한 UI로 이쁘게 만들어 줍니다. 간단한 예제와 함께 소개시켜 드릴게요. Installation 간단하게 pip로 customtkinter만 설치하시면 됩니다. $ pip install customtkinter First Example 이제 간단하게 첫 번째 example을 만들어 볼게요. import customtkinter class App(customtkinter.CTk): def __init__(self): super().__init__() self.title("minimal example app") self.minsize(400, 300) self.button = customtkinter.CTkButton(master=self, com.. 2023. 1. 17.
[PyQt6] GroupBox, CheckBox, RadioButton in QML 이번 포스팅에서는 GroupBox, CheckBox, RadioButton에 대해 살펴보겠습니다. 매우 쉽게 사용하실 수 있으니 예제를 따라와보세요. QML을 사용하여 기본적인 application을 구성하는 것은 이전 포스팅을 참고해주세요. 2022.11.03 - [Python] - [PyQt6] Getting Started with QtQuick [PyQt6] Getting Started with QtQuick 지금까지는 QtWidgets를 주력으로 사용했었는데, 항상 디자인에 대한 아쉬움이 있었어요. 그래서 계속 다른 것들을 알아봤었는데, electron.js 외에는 마땅한 대안을 찾기가 어렵더라고요. 이제와서 hdevstudy.tistory.com GroupBox with CheckBox // m.. 2022. 11. 21.
[PyQt6] Dialogs in QML 이번 포스팅에서는 다이얼로그에 대해서 살펴보겠습니다. 기본 형태를 먼저 다뤄보고, 가장 많이 사용하는 파일 선택 다이얼로그도 맛보기로 다뤄볼게요. 기본 application 작성은 이전 포스팅을 참고하여 따라와주세요. 2022.11.03 - [Python] - [PyQt6] Getting Started with QtQuick Create Dialog // main.qml import QtQuick import QtQuick.Layouts import QtQuick.Controls import QtQuick.Controls.Material ApplicationWindow { visible: true width: 640 height: 480 title: "Example App" Material.theme: .. 2022. 11. 20.
[PyQt6] User Input in QML 이번 포스팅에서는 user의 입력을 받을 때, 가장 흔하게 사용하는 TextInput, TextField에 대해 다뤄보았습니다. 이번에도 역시 응용을 하실 수 있도록 기초가 되는 부분만 간단한 예제로 쉽게 다뤄보았습니다. Application 작성 방법부터 모르시는 분은 이전 포스팅을 먼저 참고해주세요. 2022.11.03 - [Python] - [PyQt6] Getting Started with QtQuick TextInput Example import QtQuick import QtQuick.Layouts import QtQuick.Controls import QtQuick.Controls.Material ApplicationWindow { visible: true width: 640 height: .. 2022. 11. 19.