본문 바로가기

python81

[Python] FFI with Rust 이번 포스팅에서는 Rust로 작성한 코드를 Python에서 사용하는 방법에 대해 설명하겠습니다.Install maturin/PyO3먼저, python 가상 환경을 만들고 rust로작성한 코드를 python package로 빌드할 수 있는 tool을 설치해 줍니다.$ pip install maturinCreate Project다음으로 설치한 tool을 사용하여 프로젝트를 생성합니다.다음 명령을 입력하면 PyO3를 빌드 시스템으로 하는 프로젝트를 생성합니다. $ maturin init -b pyo3Implement Library Crate이제 원하는 rust 코드를 작성합니다.use pyo3::prelude::*;use std::fs::File;use std::io::{Read};#[pyfunction]fn.. 2024. 7. 22.
[Flet] Getting Started Flet은 multi-platform application을 만들 수 있게 도와주는 프레임워크입니다.파이썬을 사용하여 flutter의 UI를 구축하도록 도와줍니다.이번 포스팅에서는 간단하게 사용하는 방법에 대해 살펴보겠습니다.Prerequisite기본적으로 flutter를 사용하기 때문에 flutter SDK가 설치되어 있어야 하며, poetry도 사용할 계획이므로 이것도 설치해 주시면 좋습니다.poetry 대신 pip를 사용해서 직접 프로젝트 구성을 하셔도 괜찮습니다.전 파이썬은 pyenv를 사용 중이고, flutter는 fvm을 사용하는 중이라 몇 가지 설정을 더 해주긴 했어요.Create Project여러 방법이 있지만, 개인적으로 선호하는 poetry를 이용하여 프로젝트를 만들어 보겠습니다.먼저,.. 2024. 7. 12.
[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.