Python
multiline string の改行を除くイディオム
部分適用
functools.partial
で一部の引数を埋めた関数を返す
func.__qualname__
クラス名等がついた関数名をゲットできる
bytes を書く
open(path, mode="bw")
のように b
が必要、デフォルトは str
を書く
file.write(str(bytes_content))
は単に b'content'
のような文字列が出力される
byte mode で開いたファイルに string を書いても空
first
next(filter(iterable, lambda x: x ..., None)
久々にさわると iterator の感じを忘れててめちゃ困ってしまう
pyenv install / pipenv --python 失敗
CONFIGURE_OPTS="--with-openssl=$(brew --prefix openssl@1.1)" CFLAGS="-I$(xcrun --show-sdk-path)/usr/include" pyenv install 3.8.5
pyenv の python-build が brew に openssl あれば見てくれてないかなあ
リテラルとして解釈する
eval より安全、Spreadsheet のセルにたまに list 書いたりする時に便利...
ast.literal_eval("[1,2,3]") # => [1, 2, 3]
repl で readline が効かない
$ pip install gnureadline
Poetory
poetry update は pyproject.toml の制約を超える更新はしない
狙ったモジュールを更新するには poetry add module@latest とかする
json.dumps で unicode を \u 形式にしない
json.dumps(..., ensure_ascii=False)
line.encode('ascii').decode('unicode-escape')
map しつつ first
next(filter(None, map(lambda k: d.get(k, None), keys), None)
filter(None, itr)
で lambda 省略して falthy な値を除く
C-c で死なないやつ
sleep はさみつつなんかやってる時に殺せなくて困ったことがある
signal を trap して終了させるためにこれ書いておく、他の SIG もハンドルするには同じような感じでやる
signal.signal(signal.SIGINT, lambda s, f: exit())
ロードした module を再ロードさせる
sys.modules
にモジュール名を key としたオブジェクトが入っている
foo
や foo.bar
などパスごとなので、prefix で del していく
clear.pyimport sys
for key in list(sys.modules.keys()):
if key.startswith('name'):
del sys.modules[key]
unittest.patch が
ruff
今は ruff らしい
src/ 作るかどうか
sys.path
に src/
を明に通したりインストールする必要がある
それがめんどいので Editable Installs がある
? `.venv/lib/python3.11/site-packages/_<module>.pth` が配置されたりするのはこれ?
ローカルの Docker で動く
Jupyter Notebook からカレントディレクトリの src 以下をロードしたい、なども明に追加する or
PYTHONPATH=/mounted/src
みたいな感じで環境変数で渡すかなあ
VSCode
2023/11/29 今はこっち
python.linting.enabled
等 deprecated になっている
editable install
pip install -e .
のやつ