Python 17

Alembic으로 쉽게 DB 마이그레이션하기

Alembic 도입 계기개발하고 있는 토이 프로젝트에 (정말정말 귀찮지만-) DB를 도입했다.최대한 기술스택을 간단하게 가져가고싶었지만 더 풍부한 기능지원을 위해 굴복했다. Python ORM 라이브러리 SQLAlchemy를 도입했는데, 계속 테이블을 수정하면서 수동 마이그레이션에 한계가 있다고 느껴서 찾아보니 Alembic이라는 SQLAlchemy 사용자용 DB 마이그레이션 툴이 있더라. 회사에서 백엔드 코드를 눈팅하면서 본 마이그레이션 파일들이 이녀석이 만든것이었다. 사용하기도 간편해서 다음번에 또 쓸 것 같아 간단히 사용법을 기록하겠다. 시작하기초기화Alembic을 사용하기에 앞서, 아래 명령어로 초기화하면 설정 파일인 alembic.ini 파일과 Alembic 프로젝트가 만들어진다.alembic ..

애플 실리콘 칩(M1, M2) Python 환경설정 한번에 끝내기

1. PackageManager인 Homebrew 설치 echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile eval "$(opt/homebrew/bin/brew shellenv)" 2. Rosetta (인텔 CPU 호환용) 설치 softwareupdate --install-rosetta 3. python 설치 brew install python 이 글은 파이썬 3.7을 기준으로 하고 있다. 3. ~/.zshrc를 만들어서shell 설정 파일을 추가한다. vi ~/.zshrc export LDFLAGS="-L/opt/homebrew-x86_64/opt/mysql-client/lib" export CPPFLAGS="-I/opt/homebrew-x..

[Python] zstandard로 dictionary list 압축하기

# ZstdHelper HTML 삽입 미리보기할 수 없는 소스 아래 내용을 토대로만든 Zstd 헬퍼 클래스입니다. # 압축 ZstdHelper().compress(dictlist) # 압축해제 dictlist = ZstdHelper().decompress(filename) # pickle? 파이썬에서 dictionary list를 파일로 저장하고, 다시 읽으려고 할때 일반적으로는 간편한 pickle을 이용한다. 10만개의 딕셔너리를 담고있는 파이썬 리스트를 파일로 저장하고, 읽는 예시 코드를 보자. if __name__ == '__main__': result = list() for i in range(1, 100000): result.append({"indexofitem": i}) pickle_test(..

Docker에서 shellscript crontab으로 돌리기

docker container내의 crontab에서 scripts/batch.sh를 실행시키고자 한다. 5분마다 실행을하고, 필요한 환경변수를 crontab 작업에 등록시켜준다. SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin TZ=Asia/Seoul */5 * * * * /batch/scripts/batch.sh 2>&1 | tee -a /proc/1/fd/1 /batch/logs/batch.cron.log # SHELL=/bin/bash 등록된 작업을 실행시킬 쉘을 직접 지정한다. 기본값은 /bin/sh이다. # PATH=/user/local/sbin... 쉘에서 쓰는 환경변수와 crontab에서 사용하..

CLI로 Python 실행시 No module named 오류 해결방법

# ModuleNotFoundError PyCharm같은 통합개발환경(IDE)에서 편하게 개발할때는 이슈가 없었는데, VS code로 docker에 띄울 배치 스크립트를 개발하던 중 문제가 생겼다. 가상환경(Virtual Environment)을 구성하여 활성화시키고, 실행시켰는데 모듈을 찾을 수 없다는 것이다. python .\my_game\batch1.py Traceback (most recent call last): File "C:\Users\ASUS\PycharmProjects\RankingServer\batch\my_game\batch1.py", line 6, in from libs.task.TaskManager import TaskManager ModuleNotFoundError: No mod..

[Windows] mysqlclient 설치하기 (pip install mysqlclient)

MySQLdb/_mysql.c(29): fatal error C1083: 포함 파일을 열 수 없습니다. 'mysql.h': No such file or directory error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30 133\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2 pip install mysqlclient를 하려고하면 위 오류로 인해 설치가 막힌다. # 빠른 해결법 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 사이트에 접속하여 mysqlclient 중 ..

python이 Microsoft Store를 열때 해결방법

python >> Python python이라는 명령어를 치면 뜬금없이 Microsoft Store가 열렸다. microsoft store에서 Python을 받으려다 실패한것이 화근이었는데, 환경변수에는 Windows Apps가 있어서 이 안에 python을 실행시키고 있는 것이다. 이를 해결하기 위해서는 해당 경로로 들어가서 python이나 python3등 파일을 제거해주어야한다. 다음 명령어를 터미널에 쳐서 지워주자. Remove-Item $env:USERPROFILE\AppData\Local\Microsoft\WindowsApps\python*.exe

Python 정규식 그룹명으로 match 결과 가져오기 (group name)

filename = "backup_20220409180756_20220423180756" regex = re.compile(r"^backup_(?P\d+)_(?P\d+)$") match = regex.search(filename) if match: print(match.group("end")) # "20220423180756" 정규식 그룹명을 이용하면 편리하게 원하는 부분을 추출해낼 수 있다. (?P) 같은 식으로 사용할 수 있는데 위 예제는 정규식을 활용하여 파일명에서 시작시간과 끝시간을 뽑아내는 예제이다. 정규식 작성에 앞서 정규식을 테스트 해보기위해 regexr.com를 많이 이용하는데, 그룹명 테스트 만큼은 regex101이라는 사이트가 훨씬더 친절하게 결과가 나온다.

Falcon req.get_param()으로 모든 파라미터를 받아보자

일반적으로 Falcon에서는 Query parameter에 있는 값을 req.get_param('name')으로 읽어올 수 있다. 하지만 폼데이터 역시 동일한 방법으로 얻어오면 구분은 안가긴 하지만 편할 것이다. 간단한 세팅으로 이를 실현시킬 수 있다. application/x-www-form-urlencoded application/x-www-form-urlencoded로 들어오는 값들도 req.get_param()을 통해 얻고 싶다면 아래 라인을 추가하면 된다. app.req_options.auto_parse_form_urlencoded = True multipart/form-data 추가로 falcon-multipart라는 모듈 설치가 필요하다. pip install falcon-multipart ..