テクめも

プログラミング関連のちょっとしたTipsなどを書いています。

Pythonで優先度付きキューを使う

Pythonでの優先度付きキューはheapqを使うとできます。 import heapq 最小ヒープ はじめに、リストをキューに優先度付きキューに変換します。 que = [3, 1, 5, 2] heapq.heapify(que) 先頭に最小値がきます。(先頭以外はソートされているわけではありません…

pyproject.toml利用時にアプリのバージョンを取得する

Pythonパッケージを作成する際、__init__.pyにバージョンを書いておき、setup.pyでは__init__.pyからimportすることが一般的かと思います。しかし、pyproject.toml を利用するとPythonファイルではないので setup.py のようにバージョンをimportすることはで…

Pythonでエスケープされた文字列を戻す

argparser の引数として文字列を入力すると自動的にエスケープされますが、改行などプログラム中で使いたい場合があるかと思います。そこで、エスケープされた文字列を元に戻す方法を紹介します。 はじめに、自動的にエスケープされることを確認します。 # m…

Clickでコマンド別にファイル分割する

PythonのCLIフレームワークの1つにclickがあります。 デコレータを使って簡単にCLIが作成できますが、1ファイルにすべてのコマンドのコードを書いていくと長くなります。 そこで、CommandCollectionを使って複数のコマンドをマージすることで、コマンド別に…

hackingとisortの競合を解決する

isortのデフォルトの設定では、例えば以下のようにソートされます。 import json import time from pathlib import Path from urllib.parse import urljoin, urlparse しかし、hackingを導入していると以下のようにエラーが発生します。 ./main.py:3:1: H306…

ArgumentParserをテストする

argparse を使うと簡単にCLIが作成できます。 そのままテストすることが少し難しかったので、調べた結果、parseするとことを別の関数に切り出して、その部分をテストするのが良さそうです。 # main.py def main(): args = parse_args(sys.argv[1:]) def pars…

DockerのMySQLを使う

パスワードを設定する場合 docker run --name mysql -e MYSQL_ROOT_PASSWORD=pass -d -p 3306:3306 mysql:5.7 パスワードを設定しない場合 docker run --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d -p 3306:3306 mysql:5.7