python

mysqlclient が Django の推奨ドライバになりました

MySQL-Python (MySQLdb) のメンテナンスが停滞したことで fork して後方互換性を保ったままメンテナンスをしている mysqlclient ですが、 Django の recommend になりました。 Databases | Django documentation | Django もともと推奨になっていた MySQLdb …

Web アプリケーションにおいては Python 3 への移行は簡単だという話

Python 2 / 3 両対応のライブラリをメンテナンスしている人にとって、 Python 3 の メリットは享受できずメンテナンスコストだけが上がるつらい状況がずっと続いています。 しかし、「Python 3 への移行が大変」というのは、Python 2 を捨てるのが大変、 Pyt…

PyCon JP 2014 の1日目 keynote について

今年は娘ができたこともあり、 PyCon JP に発表だけじゃなく参加もしませんでした。 (娘と妻次第ですが、来年からはまた行きたいと思っています。) さて、 Twitter を眺めていると Python 3 に対するネガティブな反応がいきなり 流れ始めました。元になった…

Tornado-MySQL をリリースしました

PyMySQL をベースに Tornado をサポートした Tornado-MySQL をリリースしました。 Github: https://github.com/PyMySQL/Tornado-MySQL PyPI: Tornado-MySQL 0.2 : Python Package Index 単に IO 部分を Tornado に置き換えるだけでなく、簡単なコネクション…

mysqlclient-python を簡易的に非同期I/Oに対応させた

libmysqlclient を利用した Python の MySQL ドライバである libmysqlclient-python を、 gevent, meinheld など非同期I/O + 軽量スレッド環境で使いやすいようにしました。 libmysqlclient の API について libmysqlclient は基本的に同期IOのことしか考え…

mysqlclient をリリースしました

前回の記事で しかし、長年の実績がある本家といえども、個人プロジェクトで、1年に数回しかコミットされてない現状です。 一応、「いま転職直後で時間ないんだけど、できれば週末に見ておくよ」という感じのレスを貰ったのでしばらく待ってみますが、進展…

MySQL-python の Python 3 対応

去年10月に Python 3 の MySQL ドライバ事情 という記事で次のように書いていました。 多分デファクトスタンダードな MySQLドライバなのですが、現状リリースされている 1.2.4 では Python 3 対応ができていません。 Fork の MySQL-for-Python3 が推奨されま…

Python 2/3 両対応のために `unicode_literals` を使うべきか

背景 Python 2 用のコードを書くときは、 Python 3 対応を見越して # -*- coding: utf-8 -*- from __future__ import division, print_function, absolute_import をテンプレとして書いています。 __future__ はファイルごとにバラバラだと混乱を招くので、…

Python でシェル経由でコマンド実行するときのバッドノウハウ

PHPだってシェル経由でないコマンド呼び出し機能が欲しい コマンド実行でシェルが怖いなら使わなければいいじゃない どちらの記事でも Python の subprocess を使ってシェルを介在せずにコマンドを実行する方法が紹介されています。 シェルを介在すると、エ…

次世代標準非同期I/Oフレームワーク asyncio (Tulip)

Python Advent Calendar 2013 の4日目です。 Python 3.4 で標準ライブラリに追加される asyncio を触ってみます。 なお、 Tulip とは asyncio のリファレンス実装のプロジェクト名です。 背景 Python はよく非同期 I/O プログラミングに使われます。 Twisted…

PyPy 2.2 を Amazon Linux (など)で使う

PyPy 2.2 がリリースされました。 PyPy は、 RPython -> C -> バイナリという流れでビルドされますが、 C 言語のソースコードが配布されていないので、バイナリ配布物を使うか最初からビルドするしかありません。 ちなみに、(ソース配布物の Makefile による…

Mac で Python の開発環境構築(2013.11)

しばらく Mac からおさらばしていたのですが、ゆえあって戻ってきました。 Python 3.3 ベースで Python 環境の構築をしたので、参考までに手順を残しておきます。 1. Homebrew で Python 3 をインストール とりあえずベースになる Python を用意します。いま…

iterable と iterator

イテレータを介して見るPHPクラスの内部構造 を読んだのですが、 最近の php はちゃんと Python などの言語を参考にしてるなーと思うことが多かったのにこの仕様は残念です。 Python など多くの言語では、イテレータの取得とイテレータの使用を明確に区別し…

Python でパッケージのインストール時に rpath を設定する方法

libmysqlclient を static リンクする方法 を紹介したばかりですが、 MySQL 5.6 だとこの方法でビルドしても Import エラーになるという報告がありました。 static link は動的ライブラリの検索パスを考えなくて良くなる代わりに、動的ライブラリなら芋づる…

libmysqlclient を static link して MySQL-python を使う

ディストリのものではなくて Oracle からダウンロードした MySQL を使う場合など、 そのままでは libsqlclient_r.so が動的リンクできない場合の解決策の一つとして、 static link してしまうという方法があります。 MySQL-python の場合、 pip install を諦…

言語とリーダビリティ

この記事は 勝手に添削: PHP初心者向けのコード最適化 の続編です。リーダビリティの定義は前と同じく、「そのコードが何をしたいかを把握する時間+そのコードをレビューして正しいと自信を持てるまでの時間」の短さです。 よく「php よりも Python の方が…

pip や easy_install が突然速くなるかもしれない

PyPI を安全に利用するために、先日デフォルトで https を利用する pip がリリースされました。 ですがこれで終わりではありません。 pip や easy_install は PyPI のページからリンクを辿ってスクレイピングしてパッケージを探しています。リンク先がhttps…

wsaccel を Tornado に対応しました

最初の wsaccel は UTF-8 のバリデート処理だけを高速化していたのですが、 WebSocket Frame のマスク処理も1バイトごとビットでxorをとる処理だったので高速化するようにして、 0.5 をリリースしました。 Tornado はUTF-8のバリデートをしていない (このバ…

dotCloud で独自のWebサーバーを使いたい場合は type: *-worker が便利

個人的に今 dotCloud がアツいです。無料枠を無制限に使える、WebSocketに対応している、設定の自由度がメチャ高いので、ちょっと作ったものを他人に見せたり自分の携帯から見たりするために気軽に作れちゃいます。 さて、 dotCloud で golang を使うとか、 …

wsaccel の効果

wsaccel で、 UTF-8 のバリデートだけでなく、同じく1バイトずつの処理である mask も Cython で実行するようになりました。 UTF-8 のバリデートはテキストフレームのみに行われる処理であり、JSONをバイナリだと言って転送してバリデートをJSONデコーダに…

AutobahnPython と WebSocket4Python の高速化

Python の WebSocket ライブラリの Autobahn と ws4py は、テキストフレームを受信した時にその内容が正しい UTF-8 になっているかどうかをバリデートしています。 このバリデートが1バイトずつの処理を Python でやっているために、 PyPy を使ってない場合…

Python の WebSocket ライブラリ

ちょっと調べてみたら、想像してたよりもライブラリが充実していたので、各ライブラリの特徴をまとめておきます。 AutobahnPython Autobahn が Python 用にサーバー、クライアント用のライブラリを提供しています。 AutoBahn Python は Pure Python で Twist…

スライスは Project Eular でも大活躍

id:hnw に感化されて、 Project Eular で遊び始めました。 今のところ Python 3.3 と Haskell で挑戦していて、 Python ならだいたい1分〜5分で解けるけど Haskell だとまだまだどう書いたらいいのかわからない場面が多いですね。これからgoもやっていきます…

Python のカッコ無いところを紹介してみる

Haskellのカッコいいところを紹介してみる をみて、 Python と比較してみようと思います。 以下、 heading は上記記事の heading の引用で、 Python のことではなく Haskell の特徴です。 数学や英語の知識で「読める」表現が多い 一応、 instanceof など多…

Flaskの闇

Merry, Xmas. Python advent calendar 2012 (#python_adv) 24日目の記事を、ミクパの再放送をBGMにお送りします。 今日は Flask のイケてないところとのつきあいかたを紹介します。 循環 import 問題 app.py 1ファイルだけの構成から成長してファイルを分け…

ipython 0.12 と virtualenv を同時に使う方法

ipython と virtualenv を同時に使う方法 - Ian Lewis はとても便利な設定なので参考にさせてもらっていたんだけれど、 IPython 0.12 からは設定の方法が変わったのでこの設定方法では動かなくなった。IPython 0.12 での設定方法は、 (1) ipython profile cr…

Ubuntu 12.04 で Python 2.6 をビルドする

Ubuntu 12.04 でもまだUbuntuパッケージとして Python 2.6 が提供されているのですが、将来消えるのかもしれないのでそろそろ後方互換性確保用の 2.6 は自前ビルドをしておくことにしました。Python をビルドするとき、 Ubuntu 11.10 からだと思うのですが、…

バージョン番号を2度書かないために

Python では、下らない問題は、賢く綺麗に解決しようとせずに、 Python 本体が持っている柔軟さを使って強引に解決する方が楽な場合があります。 問題ごとに綺麗な仕組みを作ってしまうと、新しく Python を覚えるひとは無数にある下らない問題の数だけ用意…

Python-dev ML watch: 文字列リテラルに u プリフィックスがつきました。

更新が滞っているので、 Python-dev の ML の内容を伝える記事を気が向いた時に書くことにします。Python 3.3a1 がリリースされましたが、その直後にコミットされたのが、文字列リテラルのu プリフィックスです。この prefix は、 Python 2 と 3 に同一のコ…

Python の GC のデバッグ機能

Python のデーモン型のプログラム(具体的に言うと Loggerhead という bzr のリポジトリブラウザ)が大量(具体的に言うと100MB以上)メモリを食っていたので、それを調べた時のメモ。まず、本当にそれだけのメモリを利用しているのかどうかを meliae という…

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