파이썬 코드를 하나의 실행파일로 만들어 사용하려면 pyinstaller 모듈을 설치해야 한다. $ pip install pyinstaller pyinstaller는 다양한 옵션을 제공하고 있으며, 자주 사용하는 옵션은 아래와 같다. --onefile (-F) 단일 실행 파일로 생성 --noconsole 윈도우 & 맥OS에서 콘솔창 출력 없이 실행 --distpath 최종 생성 파일 경로 지정 --workdpath 임시 작업 파일 경로 지정 --path 파이썬 코드에서 참조하는 모듈 경로 지정 add-data 실행에 필요한 non-binary 파일 지정 단일 실행 파일로 생성할 경우 실행 파일에 포함시킴 윈도우는 key, value를 세미콜론(;)로 구분하며, 유닉스 계열의 시스템은 콜론(:)으로 구분 e..
STM32F429 개발보드에서 시리얼로 출력되는 json 결과를 이용하여 J1939 데이터를 파싱하여 출력하는 간단한 모니터링 앱을 만들기 위해 파이썬으로 시리얼 통신 방법을 구글링 한 결과, pyserial 모듈을 사용하면 간단히 시리얼 통신을 할 수 있어 pip로 pyserial 모듈을 설치하도록 한다. $ sudo pip3 install pyserial 시스템 전체에 설치하고 싶지 않다면 가상환경을 만들어서 프로젝트 디렉토리에 설치하는 것도 가능하다. pyserial 모듈을 사용하여 시리얼 통신하는 방법은 인터넷에 많은 자료가 있기에 자세한 설명은 생략하기로 하고, STM32 개발보드에서 발생한 문제를 수정한 것들을 정리한 것이다. 위 앱은 일정주기로 사용자가 원하는 J1939 메시지를 PCAN_X..
파이썬 가능환경을 구성해야 하는 이유와 방법은 아래 블로그에 자세히 설명되어 있다. 파이썬에서 venv로 가상 환경 사용하기 Engineering Blog by Dale Seo www.daleseo.com 이 포스트는 위 블로그 내용을 바탕으로 속성으로 venv 사용 방법 및 VisualStudio Code 설정도 함게 정리한 것이다. 우선 venv 패키지를 설치하도록 한다. $ sudo apt install python3-venv 파이썬은 외부 라이브러리를 설치하여 개발하기 때문에, 다른 환경에서 라이브러리 버전 차이 및 미설치로 동작이 안되는 경우가 있기 때문에 개발에 필요한 라이브러리를 개발 디렉토리에서 가상의 환경을 만들어 사용하면 라이브러리로 인한 문제는 피할 수 있다. 위 블로그의 설명과 처럼..
티스토리 계정을 카카오 계정으로 전환했다면, 내가 알고 있는 지식으론 티스토리 Access Token은 자동으로 발급받을 수 없다는 결론을 내렸다. 그래서 티스토리 오픈API의 Access Token을 발급받으려면 App ID를 포함한 아래의 주소를 브라우저에 입력하도록 한다. https://www.tistory.com/oauth/authorize?client_id=&redirect_uri=https://memories.tistory.com&response_type=code 티스토리 오픈API에서 '앱 등록'을 완료하면 'App ID'과 'Secret Key'을 발급받을 수 있고, 위 주소의 client_id 값에 발급받은 'App ID' 입력하고 redirect_uri로 자신의 callback_url로..
OAuth 2.0과 티스토리 오픈 API에 대해 아래 글에서 간단하게 정리를 하였다. 즉 티스토리를 PC 앱에서 사용하기 위해서는 Access Token을 발급받아야 한다. 티스토리 OAuth 인증 with 파이썬 - 개념 파이썬 기본기를 계속 다지면서 Flask 웹 프레임워크를 보기 시작하였다. 웹 프레임워크를 공부하기 전에 가볍게 OAuth 인증을 익히고 티스토리 Open API를 이용하여 블로그를 백업하는 앱을 만들 생 memories.tistory.com 티스토리 오픈API 사용을 위한 Access Token를 계정별로 자동으로 발급하기 위해 '티스토리 API Access token 자동 받기'를 참고하여 시도하였지만, 티스토리 계정을 카카오 계정으로 통합하였다면 안된다는 결론에 도달할 때까지 삽..
파이썬 기본기를 계속 다지면서 Flask 웹 프레임워크를 보기 시작하였다. 웹 프레임워크를 공부하기 전에 가볍게 OAuth 인증을 익히고 티스토리 Open API를 이용하여 블로그를 백업하는 앱을 만들 생각이었는데, OAUTH 인증 때문에 몇 일동안 수령에 빠졌다. OAuth 2.0를 정말 쉽게 설명한 생활코딩 강의가 있어, 이것을 참고하여 OAuth 2.0에 대한 개념을 이해하였다. 내가 만든 앱이 티스토리 오픈API를 사용하려면 앱(Client)를 등록을 해야 한다. 등록을 완료하면 App ID와 Secert Key가 생성될 것이다. 이 정보를 갖고 티스토리 Access Token을 받아올 것이며, 내가 만들 앱은 웹어플리케이션이 아니기 때문에 callback url은 블로그 주소를 사용하였다. 만약..
'로또 번호 생성기'의 당첨번호를 매번 요청할 수 없기 때문에 버전 0.01은 파일로 저장하였고, 버전 0.02는 SQLite DB를 사용하였다. 데이터를 일반 파일과 DB를 모두 사용 가능하도록 아래와 같이 코딩을 하였다. C언어 오랜시간 사용했기에 위 이미지와 같이 파이썬 코딩 역시 C 스타일로 코딩을 하였는데, 클래스를 사용한다면 위 코드를 좀더 다듬을수 있을 것 같다는 생각에 아래와 계층 구조를 구성하였다. 최상위 인터페이스 클래스인 DataBase을 만들고 create / open / update 추상메소드를 갖고 있으며, 하위 클래스인 FileMGR, SqlMGR 클래스가 추상메소드를 저장 매체에 맞게 구현하면 좀더 나은 설계가 아닐까 싶다. 아주 단순하게 클래스 관계를 생각해보았지만, 스크립..
초기 버전의 '로또 번호 생성기'는 당첨번호를 DB가 아닌 파일로 저장하였고, SQLite를 사용하여 당첨번호를 파일인 아닌 DB에 저장하는 방식으로 변경하였다. 당첨번호를 파일에서 SQLite DB로 변경하는 과정에서 파일명을 변경하지 않아 기존 파일을 SQLite에서 읽었을 때 아래와 같은 에러가 발생하였다. 이것은 DB 파일이 SQLite 형식이 아니기 때문에 발생한 에러이며, SQLite에서 DB 파일을 읽기 전에 정상적인 DB 파일인지 확인할 필요가 있다. 만약 DB이 잘못된 파일이면 제거하고 다시 DB 파일을 생성해야 한다. 다행이 SQLite3 DB 파일은 첫 16바이트를 SQLite3 Magic Header를 갖고 있으며, 그 값은 아래 이미지와 같다. 파이썬에서 간단히 Magic Head..
SQLite는 임베디드 장비 또는 Serverless 환경에서 사용하는 경량화 DB로써, 동일 데이터를 파일로 처리하는 것보다 30%이상 좋은 성능을 보여준다. SQLite에 대한 자세한 설명은 아래 글을 참고하도록 한다. SQLite 개념/구조/멀티 DB 실사용기 목차 들어가면서 SQLite 특징 SQLite 이럴 때 사용 O SQLite 이럴 때 사용 X SQLite 아키텍쳐 SQLite Lock 개념 SQLite 트랜잭션 개념 부록) Oracle WAL 처리 방식 포팅할 때 겪었던 명령어들 SQLite 용례(실사용.. ehdvudee.tistory.com DB 서버가 필요없는 SQLite는 따로 설치가 필요없으며, 파이썬의 경우 SQLite 모듈은 기본 라이브러리에 포함되어 있어 DB 모듈을 추가로..
파이썬을 사용하면 http 데이터를 요청하고 결과를 받아 쉽게 처리가 가능하다. 지금 만들고 있는 '대박! 로또' 앱도 동행복권의 web api를 사용하여 당첨번호를 파일 또는 DB에 저장하였다. 파이썬에서 http 데이터를 처리하려면 requests 모듈을 사용하며, requests 모듈에 대한 자세한 설명은 아래 글을 참고하도록 한다. Python :: 파이썬3 requests 모듈 살펴보기(설치, 사용방법 및 예제) Python3 requests 모듈 API를 사용할 때, 주로 사용하곤 하는 requests 모듈에 대해 살펴보려 합니다. 사용하는 방법은 매우 쉽습니다. 사용을 할때는 보통 HTTP 메소드(method, 또는 함수)의 GET 과 POST를.. hongku.tistory.com 동행복권..
zipfile 모듈은 zip, bzip, lzma 형식의 압축 파일을 처리할 수 있다. 하지만 각 형식을 처리하기 위한 모듈이 설치되어 있어야 한다. 그 이외의 압축 형식은 NotImplementedError 예외가 발생한다. zipfile 모듈의 자세한 설명은 아래 문서를 참고 하도록 한다. zipfile — Work with ZIP archives — Python 3.9.1 documentation zipfile — Work with ZIP archives Source code: Lib/zipfile.py The ZIP file format is a common archive and compression standard. This module provides tools to create, read, ..
GUI 앱이 실행될 때, 주모니터 중앙에 실행하려면 해상도 및 앱의 윈도우 크기를 계산하여 앱의 실행 위치를 설정한다. Tkinter는 geometry() 메소드를 이용하여 위치를 설정할 수 있으며, 단일 모니터를 사용하는 환경이라 Tkinter 기본 메소드인 winfo_screenXXX()를 이용하여 실행 환경의 모니터 해상을 알 수 있지만, 2개 이상의 모니터를 사용하는 환경이라면 winfo_screenXXX() 메소드는 가로 크기는 각 모니터의 width를 모두 합한 값으로 나오기 때문에, 이 메소드는 사용할 수 없다. screeninfo 모듈을 사용하면 각 모니터의 정보를 Monitor 클래스로 확인할 수 있다. screeninfo 모듈은 pip로 설치할 수 있으며, 아래 코드와 같이 간단히 특정..
파이썬으로 AES encrypt / decrypt 수행하려면 crypto 모듈을 사용해야 하며, 이것은 pip로 설치가 가능하다. $ pip3 install pycryptodome crypto 모듈을 설치하려면 윈도우, 리눅스 환경 구분이 없이 모두 컴파일러가 설치되어 있어야 한다. 만약 컴파일러가 설치되어 있지 않다면 pycryptodome 설치시 에러가 발생한다. 윈도우에서 컴파일러 설치는 아래 MS 홈페이지에서 MS Build Tools 2015 버전을 다운받아 설치할 수 있다. Microsoft Build Tools 2015 Microsoft Build Tools 2015는 관리되는 응용 프로그램 빌드에 필수적인 도구를 제공합니다. www.microsoft.com 우분투는 개발 패키지인 build..
어떤 윈도우 프로그램은 시작할 때 DB가 존재하지 않아 DB를 생성하고 데이터를 업데이트 하는데 일정 시간이 걸린다면 그것을 표시해주는 윈도우를 출력하려고 한다. 이때 DB 업데이트 정보를 출력하는 윈도우가 실행되는 동안 메인 윈도우는 제어를 하지 말아야 한다. 이 프로그램의 윈도우는 아래와 같이 동작을 해야 한다. 두 개의 윈도우을 실행할 수 있으며, 두 개의 윈도우는 종속 관계가 있다. 서브 윈도우가 생성될 경우, 메인 윈도우의 제어가 중단되고 프로그램의 제어권은 서브 윈도우 갖는다. 서브 윈도우가 종료되야 메인 윈도우가 제어권을 가질 수 있다. 메인 윈도우가 종료되면 서브 윈도우도 함께 종료되어 한다. 아래 글과 같이 VC++ Modal Dialog와 같은 기능을 하는 윈도우(프레임)을 생성하려고 ..
파이썬에서 연산 시간을 측정하려면 time 모듈을 사용하여 아래 코드와 같이 간단하게 연산 시간을 측정할 수 있다. import time start_time = time.time() for _ in range(100000000): pass print('proc_time =', time.time() - start_time) 시간은 초(sec)단위이며, 소수점 이하는 nano second 이상의 시간을 나타낸다. 참고로, time.time() 함수는 epoch 시간을 기준으로 시간을 측정한다. 현재 날짜와 시간을 얻기 위해 datetime 모듈을 사용하며, GMT(UTC) 및 Local Time을 얻을 수 있으며, 아래 코드는 간단히 디데이를 계산하는 것을 나타낸다. import datetime today ..