1. Python3.4のensurepip(それとpyvenvの更新)

    ensurepipとpyvenv

    Python3.4b1 が 2013/11/24 にリリースされました。

    今回はあまり文法的なアップデートはなく、いくつかの重要なモジュールが追加されています。 とりあえずパッケージ方面で重要なensurepipがb1リリースにぎりぎり間に合ったので、試してみました。

    ensurepipモジュールは PEP 453 -- Explicit bootstrapping of pip in Python installations で提案されています。

    現在のPythonパッケージングは、 setuptoolspip の2つを使うようになっています。 しかし、これらのツールはPythonの標準の配布物には含まれていませんでした。 Pythonインストール後は、 setuptools, pip, virtualenv をそろえるのが最初の作業でした。

    これまでのvirtualenvを使うまで:

    $ wget https://bitbucket.org/pypa/setuptools/src/1.4.1/ez_setup.py
    $ wget https ...
    read more

    There are comments.

  2. Pylons/PyramidユーザーのためのZope2

    Zopeは、それをモノにしたときのすばらしい悟り体験のために勉強しましょう

    —How To Become A Pythonista

    嘘です。

    まあでも、Zopeを実戦で使うことはなかろうとも、そのコンセプトを知るのは無駄ではないでしょう。 特にPyramidはrepozeというZopeとWSGIの合流を目的にしたプロジェクトが出自なので、Zopeからのアイディアも多く採用されています。 Pyramidを使っていてZopeを再発見することも少なからずあるようなので、今更ながらでもZope2で遊ぶガイドとして、なんか書いてみようと思います。

    Zopeとは?

    Zopeの言葉がさまざまに利用されているため、どれがZopeなのかわかりにくくなっています。 だいたい以下のものがZopeな気がします。

    • Zope2
    • Zope Corporation
    • 過去にZope3と呼ばれていたBluebreamというフレームワーク

    ここではZope2だけを対象にします。

    Zope3はコンポーネントに分解され、汎用コンポーネントはZope Toolkitに、管理画面などのアプリケーション部分は ...

    read more

    There are comments.

  3. PythonのいろんなWebフレームワークでゲストブックアプリケーション

    作りました。

    動機となったtokibitoのエントリ

    まあロジックもそれほどないし、 bottle+peewee と比べてpyramidで書いたらどうなるかってので、1つ書いたのが こちら

    オリジナルをほぼそのまま使いつつ、モデル定義を SQLAlchemy に変更。viewの関数の引数調整やURLの登録とかやって完成。

    その後、調子に乗って、Zope2とPloneでもやってみた。

    Zope2版では、five.grokを使ってみた。 grokはZope Toolkitを使ったWebアプリケーションフレームワークで、規約ベースとなっています。 five.grokはこれをZope2上で使えるようにしたもの。 規約ベースなので、規約を知らないと、なぜこれだけで動くのかってのがわかりにくいはず。

    app.py には Guestbookクラスが実装されていて、唯一のモデルクラスとなっています。 なので、同じapp.pyにある2つのビュークラスは自動でGuestbookクラス用のビューになる。 さらに app_templates にあるクラスと同名(厳密にはlowerした名前)のテンプレートも自動でビューが利用します。 Postクラス用のテンプレートがないけど、これは render メソッドをオーバーライドしているため。 あとはZope2の管理画面(ZMI)から扱えるように、なんか作法にのっとってファクトリを登録しているのがイマイチですが ...

    read more

    There are comments.

  4. Pythonライブラリメモ

    分野別メモ(一部、趣味嗜好による偏りがあります)

    日付

    • python-dateutil
    • arrow
    • mxDateTime

    webプログラミング

    データ処理

    • simplejson
    • lxml
    • pycrypto

    クライアント

    • requests
    • openid2rp
    • httplib2

    WSGI/フレームワーク

    • pyramid
    • flask
    • bottle
    • wheezy
    • web2py
    • turbogears2
    • pylons
    read more

    There are comments.

  5. wheelを使って開発する

    とりあえず、 pyvenv で作った仮想環境に pip がインストールされているというところから。

    pyramid の開発を例にします。

    wheelをインストールする

    wheelパッケージを使うために wheel <http://pypi.python.org/pypi/wheel> をインストールします。

    $ pip install wheel --use-wheel
    

    pip は1.4以降でwheelパッケージをインストールできます。 しかし、 setuptools は、wheelパッケージを作成できません。 wheel をインストールすると、setup.pyで bdist_wheel というサブコマンドが使えるようになります。 また、 pip でも wheel サブコマンドが使えるようになります。

    wheelでライブラリをインストールする

    現在PyPIにはそれほどwheelパッケージはあげられていないため、sdistパッケージを使ってローカルでwheelパッケージを作成します。

    pyramidとその依存ライブラリのwheelパッケージを作成する:

    $ pip wheel pyramid --pre
    

    wheelパッケージをインストールする:

    $ pip install ...
    read more

    There are comments.

  6. Python開発環境

    ansible化のためのメモ

    とりあえずdebianで試してますが、たいていのUNIX系OSでは同じでしょう。

    Pythonインストール

    MacやLinuxであれば、ほぼ間違いなくデフォルトでPythonはインストールされています。 が、システムでばりばり利用されている上にCentOSなど古いバージョンのままだったり、Macのように不可思議なパッチがあてられていたり、 古いsetuptoolsが添付されていたりと、問題の火種になる要素がてんこもりです。

    公式サイト からダウンロードしてクリーンな環境を作成しましょう。

    ダウンロード:

    $ wget http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.bz2
    

    Note

    2013/10/05時点では3.3.2が最新バージョンです。

    インストールに必要なライブラリ

    ビルドするためには、 build-essential が必要です。 そのままビルドまで進めると、以下のようにライブラリが足りないために作成されなかったモジュールが表示されるので、 必要なライブラリもインストールします。

    _bz2               _curses            _curses_panel
    _dbm               _gdbm              _lzma
    _sqlite3           _ssl ...
    read more

    There are comments.

  7. PythonでWebAppの開発に必要なN個のこと

    元ネタ

    あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずPythonについて知っていることを書いた。

    パッケージマネージャ

    まずライブラリの管理。モジュールをインストールし、可能であればバージョンを固定し、適切にロードする機能が必要だ。

    Pythonの場合は pip というPyPIクライアントでライブラリをインストールする。ライブラリパスの設定は virtualenv で行う。

    アプリケーションサーバー

    Webサーバへのインターフェイスとしては、WSGIという仕様がある。WSGIに準拠したツールキットとしてWebObやWerkzuegなどがあり、サーバーには標準ライブラリのwsgirefやwaitress、gunicornなどがある。 本番環境ではgunicornが人気だ。

    リクエストパラメーターの処理

    cgi.FieldStorage が標準ライブラリにあるが、WebObやWerkzeugのRequestクラスを使うべきである。

    ルーティング

    サーバにきたリクエストを適切なコントローラに振り分ける機能だ。 Werkzeugにも含まれているし、ルーティング単体のライブラリWebDispatchもある。

    データベース

    標準ライブラリのsqliteをはじめ、DB API2.0がドライバの標準インターフェイスとなっている。 ORMを使うのであれば、SQLAlchemy以外の選択肢は思いつかない。

    ビューのレンダリング

    HTMLテンプレートエンジンは数え切れないほどあるので、主義思想なりパフォーマンスなりで選択しよう。

    • Jinja2
    • Mako
    • Chameleon
    • Kajiki

    JSONの取扱いは標準モジュールのjsonがあるが、バグフィックスなどが行われているsimplejsonをインストールするべきだ ...

    read more

    There are comments.

  8. SQLAlchemy

    つーことで、PyCon APAC2013のCFP没ネタの2つ目。

    インストール

    特にめんどうなことなくpipでインストールできます。

    $ pip install sqlalchemy
    

    モデル定義

    テーブル定義とクラス定義をして、それらをマッピングするのが、データマッパーの本来の方法ですが、sqlalchemy.ext.declarative を使うのが圧倒的に楽です。 これを使うとテーブル定義をクラス内で行い、自動でマッピングまで行ってくれます。 declarative_baseでベースクラスを定義して、それを継承してモデルを定義します。:

    from sqlalchemy import (
        Column,
        Integer,
        ForeignKey,
    )
    from sqlalchemy.orm import (
        relationship,
        scoped_session,
        sessionmaker,
    )
    
    from sqlalchemy.ext.declarative import declarative_base
    
    Base = declarative_base()
    DBSession = scoped_session(sessionmaker())
    
    class BankAccount(Base):
        __tablename__ = 'bankaccount'
        query ...
    read more

    There are comments.

  9. Pyramid Testing

    さて、もう間近にせまった PyCon Apac 2013 ですが、 わたくし パッケージングの今と未来 にて登壇します。

    ところで、これ以外にもCFPを提出していまして、没ネタが2つほどあります。

    • sqlalchemyの錬金術
    • testing pyramid

    (´・ω・`)実際のとこ、pyramidの話したかったんですけどねぇ....

    Pyramidでのテスト

    まずはpylonsprojectのドキュメント Unit Testing Guidelines があります。 これはテストのテクニックではなく作法ですが、テスト内容を明確にするというのが重要な点かなと思います。

    Pyramidなところはそんなとこかもしれません。 どこぞのガラパゴスな進化をしたフレームワークと違い、モダンなテストツールをそのまま使えます。(Pythonのフレームワークなのだから当たり前ですけども)

    テストケース

    pytestやnoseなどはディスカバリー機能を持ってるので、 test_* といった名前の関数でよいですが、伝統的な unittest フレームワークでは、 TestCase クラスを継承します。 フィクスチャとしてよく用いられるダミークラスは pyramid.testing に用意されています。 たとえば、ビュー関数のテストをする場合は pyramid.testing.DummyRequestrequest ...

    read more

    There are comments.

« Page 2 / 2

blogroll

social