テクめも

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

pyenv + toxで複数バージョンのテストを行う

pyenvを使用している環境で、toxで複数バージョンのテストをするときはまったのでそのメモです。 tox.iniに以下のように設定しておき、toxでテストを実行しました。 [tox] envlist = py36, py37 [testenv] deps = pytest commands = pytest $ tox GLOB sdist…

Clickのテストで例外をキャッチしない

PythonのCLIフレームワークであるClickでは、テストツールも用意されており、容易にテストを書くことができます。 invokeを使えば、コマンドと引数を渡すことができますが、デフォルトでは例外をキャッチします。 通常は、exit_codeの値を比較すればよいので…

Github Actionsでジョブが成功したら次のジョブを実行する

テストが成功したらデプロイするみたいに、あるジョブの実行には前のジョブが成功が必要となるワークフローを書くには、needsを使うとできます。 name: build on: [push] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@master # テス…

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を使って複数のコマンドをマージすることで、コマンド別に…