python

/var/lang/bin/python: No module named amazon_linux_extras

mysqlclientがAWS Lambda Pythonにインストールできないという報告があったので試してみた。 シェルを使う $ docker run -it --rm public.ecr.aws/lambda/python:3.11-arm64 bash 09 Nov 2023 04:46:42,532 [INFO] (rapid) exec '/var/runtime/bootstrap' (c…

Python 3.12 から Unicode のサイズが小さくなります

Python 3.11 までは、空文字でも64バイトのメモリを使用していました。(64bitプラットフォームの場合) Unicodeの内部表現のうち一番小さい PyASCIIObject 構造体が48バイトで、その構造体の後ろにASCII文字列が続きます。その文字列はNUL終端されているので…

Python 3.15からデフォルトのエンコーディングがUTF-8になります

Pythonがファイルを開くときなどに使われるエンコーディングはロケール(WindowsではANSIコードページ)依存でした。 Unixの世界ではどんどんUTF-8ロケールが一般的になっている一方、WindowsのANSIコードページはなかなかUTF-8になりません。 そのために、U…

Python 3.11のdictのメモリ消費削減

Pythonのdictのサイズをよりコンパクトにする改善をしました。今日リリースされたPython 3.11.0a6に含まれています。 bpo-46845: Reduce dict size when all keys are Unicode. by methane · Pull Request #31564 · python/cpython · GitHub Pythonのdictで…

Python 3.11 からデフォルトの文字列ハッシュアルゴリズムが SipHash13 になります

Pythonの文字列やバイト列に対するハッシュアルゴリズムは、HashDoS対策としてPython 3.4から SipHash24が使われていました。 その後、ラウンド数を減らしたSipHash13でも十分に安全だとして2015年にRustが、2016年にRubyが、SipHash24からSipHash13への切り…

`from __future__ import annotations` がPython 3.10でデフォルトにならなくなりました

PEP 563 は Python 3.10 でデフォルトになる予定で、実際に去年の10月から master ブランチでは有効になっていました。今までの Python 3.10 のアルファ版でも有効になっています。 www.python.org このPEPはアノテーションの実行時の利用に後方非互換性と大…

gzip, bz2, lzma の binary mode でのイテレーションを高速化しました。

次の2つのプログラムは、どちらも test.gz というファイルを開いて、片方はバイナリモードで、もう片方はテキストモードでイテレートします。Pythonの使用上ファイルをイテレートしたら行単位で内容を読み出せます。 $ cat dec_gzip.py import gzip with gzi…

staticmethod が callable になりました

github.com Pythonで定義した関数とCで定義した関数は型が異なり、振る舞いにも幾らかの違いがあります。これがPython実装とC実装の両方を提供する場合に、挙動の一貫性がないという問題になります。 今回問題になったのは、Cで定義した関数は勝手にメソッド…

PYTHONWARNDEFAULTENCODINGを使おう

methane.hatenablog.jp この記事で紹介した、 open() などでエンコーディングを指定せずに暗黙でデフォルトのエンコーディングが使われた時に EncodingWarning を発生させる機能のPEPが受理され、実装し、昨晩リリースされた Python 3.10a7 に入りました。 .…

パターンマッチングがAcceptされました

Mailman 3 [python-committers] Acceptance of Pattern Matching PEPs 634, 635, 636, Rejection of PEPs 640 and 642 - python-committers - python.org パターンマッチング構文が複数提案されていたのですが、 PEP 634, 635, 636 が Accept されました。順…

関数アノテーションを軽量化しました

この記事は KLab 2020 Advent Calendar の 12/2 分になります。 qiita.com 最近の Python に対する改善を紹介します。私が設計、コードレビューまでしましたが、実装は他のコントリビューターにしていただきました。 (プルリクエストはこちら) 背景として、P…

PyPIのTOP 4000 パッケージのsdistをダウンロードする

Deprecate済みの機能をそろそろ削除していいかどうか悩んだときに、Githubのソースコード検索だとソースコードのコピーが置いてある個人リポジトリがたくさんあったりして役に立ちません。 PyPIのミラーを作って全部のパッケージを確認できればいいのですが…

PEP 8騒動について

今週PEP 8の小さい変更についてMLで騒動が起こってしまいました。 該当のコミットはこれです。 PEP 8: Change requirement to adhere to Standard English (#1470) · python/peps@0c6427d · GitHub 変更点はごくごくシンプルなものです。 - When writing Eng…

Python 3.10 の開発(お掃除)に参加しよう

訂正 昔から deprecate されているのにずっと生き残ってるヤツたちはクセモノのぞろいで、全然初心者向けではありませんでした。 代わりに、Docディレクトリを deprecated-removed:: で grep して、 3.10 で削除する予定になっているものを削除する方がずっ…

PEP 623: Remove wstr from Unicode について

今週新しいPEPを作りました。 www.python.org 背景 Python 3.3からUnicodeの内部表現が変わり、文字列に含まれる最大のコードポイントから1byte(ASCII or latin1), 2byte (UCS2), 4byte (UCS4)を選ぶようになっています。 (PEP 393 Flexible Unicode Represe…

(PEP 584) dict + dict 演算子追加について

注意:この記事は議論中の機能について紹介し自分の考えを述べるものです。 Python 3.8 で追加されるらしいよ!みたいな拡散はしないでください。 Python-ideas で dict + dict が提案され、PEPになった。 www.python.org d3 = d1 + d2 の動作は、 d3 = {**d…

Python の repr(float) を高速化する

Python の repr(float) は、 float(repr(float)) が保証される最短の表現を返します。 実装には netlib の dtoa を使っています。 この dtoa より速い実装が世の中にはあって、 V8 なんかで使われているようです。 github.com float の repr の実装をこの速…

Python 目線からの GAE/node.js Standard Environment 発表の解説

Google I/O 2018 で GAE/node.js Standard Environment が発表されました。 www.youtube.com 以下、「Python 3 早く来い!」の視点で注目点をピックアップしていきます。 9:00 頃から、 node.js Standard Environment が in a few weeks で登場すると発表 13…

RHEL 7.5 で Python 2.7 が deprecated になりました

Red Hat Enterprise Linux 7.5 がリリースされ、そのリリースノートで "Python 2 has been deprecated" とアナウンスされました。 Chapter 54. Deprecated Functionality - Red Hat Customer Portal Python 2 has been deprecated Python 2 will be replaced…

Homebrew の Python で何が変わって何がもとに戻ったのか

rcmdnk.com 大分混乱した状態になってしまったので、今年何が変わってきたのか、今回の変更でどこまでもどったのかを整理しておきます。 1/19 python という formula が python コマンドをインストールしなくなりました。 python コマンドを起動すると、通常…

3月1日、Homebrew のデフォルトの Python が Python 3 になります。

以前からアナウンスされていた 通り、 3/1 (日本時間では 3/2 になるかも)にデフォルトの Python が Python 3 に切り替わる予定です。 現在そのプルリクエストがレビュー中です。 github.com 具体的には、今まで "python" という formula は Python2.7 で…

Python の正規表現で IGNORECASE するときは気をつけよう

Python 3 で文字列が Unicode になりました。というだけで感のいい人は分かるかもしれません。 はい、大文字小文字の判断も ASCII じゃなくて Unicode になります。 In [6]: re.match("[a-z]", 'ı', re.I) Out[6]: <_sre.SRE_Match object; span=(0, 1), match='ı'> この文字は LATIN SMALL LETTER DOTLESS I</_sre.sre_match>…

Heroku 上での Python 3 率

requestsなどの作者として有名な、HerokuのKenneth Reitzさんが、とてもうれしいグラフを公開してくれていたのでシェアさせていただきます。 % of Heroku builds using Python 3: (it's the blue) pic.twitter.com/clUiZd0b01— Kenneth Reitz (@kennethreit…

Windows では2020年を待たずに Python 2.7 が使い物にならなくなっていく

昨日 mysqlclient 1.3.10 をリリースしました。 今までは Windows 版の wheel は Python 2.7 だけに提供していたのですが、 1.3.10 からは 3.5 と 3.6 だけに提供して 2.7 はドロップしました。 そもそも今まで Python 3 に wheel を提供できてなかったのは…

pip 9.1 から msgpack が使われるようです

Adopt cachecontrol 0.12.0 with msgpack support というコミットがありました。 どうやら CacheControl というのが pip が使っている requests 用のキャッシュライブラリで、その最新版が msgpack を使っているようです。 前のバージョンはバイナリデータを…

CPython の Core Developer になりました

Python 3.6 に取り込まれた dict の新実装などでコアコミッターに興味を持ってもらい、 Core Developer (要するにコミッター) に推薦しようか?という提案をもらいました。 最初はコミッターとか面倒そうだし、コミットメッセージとかNEWSエントリー(通常パ…

Python 3.6 の(個人的に)注目の変更点

Python 3.6b1 がリリースされましたね。(フライング) beta1 ということで、 3.6 に向けた新機能の追加は (provisional package を除いて) 終了です。ただし、仕様が確定したと言うわけではなくて、beta版に対するフィードバックを元に新機能を修正したり、…

Python 3.6 に向けて新しい dict 実装の人柱募集

会社のBlogに書いた通り、現在新しい dict の実装を試しています。 また、 shared key を削除して実装を削れた分、別の効率のいい特殊化 dict を実装して、 compact + shared よりも高い効率を狙うこともできます。 今はあるアイデアのPOCを実装中なので、採…

manylinux1 wheel を作ってみる

先日の記事 で紹介した、 manylinux1 wheel を作ってみます。 manylinux1 docker image ビルド環境を Docker image として公開してくれています。 Github manylinux Docker (amd64) Docker (x86) docker pull quay.io/pypa/manylinux1_x86_64; docker pull q…

Wheel が Linux でもバイナリパッケージに対応しました

PEP 0513 -- A Platform Tag for Portable Linux Built Distributions | Python.org 今まで Windows と Mac では、ビルド済みのバイナリ形式の拡張モジュールを wheel にして配布することができました。 WindowsやMacに比べてLinuxは環境の差が激しいのでバ…

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。