タグ

ブックマーク / atsuoishimoto.hatenablog.com (8)

  • Zipファイル一個で実行可能なPythonアプリケーションを作ってみる - 第2夜 - atsuoishimoto's diary

    さて、先日 http://d.hatena.ne.jp/atsuoishimoto/20120503/1336050988 を紹介したが、Flaskアプリケーションの Blueprint 機能を使うと正しく動作しないようだ。Blueprintでは独自にテンプレートや静的ファイルのディレクトリを指定できるようになっているため、こちらも対処する必要があるのだ。 ということで、 class ResourceMixin(object): PACKAGENAME = "demo_pkgrsrc" @helpers.locked_cached_property def jinja_loader(self): return loaders.PackageLoader(self.PACKAGENAME, self.template_folder) def send_static_file(self, fi

    Zipファイル一個で実行可能なPythonアプリケーションを作ってみる - 第2夜 - atsuoishimoto's diary
  • Zipファイル一個で実行可能なPythonアプリケーションを作ってみる - atsuoishimoto's diary

    アプリケーションを作成して配布するとき、配布するのは複数のファイルやディレクトリではなく、ファイル一つだけで済ませることができたらそれに越したことはないだろう。Pythonには cx_Freeze や py2exe のような、プラットフォーム固有な実行可能ファイルを開発するための環境も揃っているが、ここではもうちょっとライトに、Pythonの実行環境があれば実行できる zip ファイルの作り方を紹介したい。例として、flaskを使った簡単なWebアプリケーションを作ってみよう。 尚、ここで作成したファイルは https://github.com/atsuoishimoto/demo_pkgrsrc に置いてあるのでご参照いただきたい。 リソースファイルの使い方 普通、アプリケーションにはスクリプトファイル以外にいろんなファイルが含まれる。この例のようなWebアプリケーションではHTMLやC

    Zipファイル一個で実行可能なPythonアプリケーションを作ってみる - atsuoishimoto's diary
  • internのひみつ - atsuoishimoto's diary

    Pythonにはintern()という組み込み関数がある。結構特別扱いで重要な組み込み関数なのだが、使い道が今ひとつ分かりにくいのか知らない人も多いようだ。 intern <捕虜・危険人物などを>(一定の区域内に)拘禁する, 抑留する. [新英和(第7版)・和英(第5版)中辞典 株式会社研究社] なんだか物騒な関数だが、同じような機能を持つLisp族の関数から名前を拝借したのだろう。intern()をPythonスクリプトで書くと、だいたいこんな感じの処理になる。 _intern_map = {} def intern(s): if s in _intern_map: return _intern_map[s] else: _intern_map[s] = s s.interned = True return s 文字列sと同じ文字列が専用の辞書_intern_mapに登録済みなら登録済み

    internのひみつ - atsuoishimoto's diary
  • Pythonバージョンの選びかた - atsuoishimoto's diary

    Pythonはおよそ18ヶ月ごとに新しいメジャーバージョンをリリースする慣習になっていて、これまでにたくさんのバージョンがリリースされ、広く利用されてきた。Pythonの開発では後方互換性を保つことが非常に重視されていて、通常のアプリケーションであれば、Pythonのアップデートで動かなくなってしまうことはあまりない。アプリケーションが今後廃止される予定になっている機能を利用していると、DeprecationWarningという警告が出力されてしまう程度だ。 DeprecationWarningが出るようになってから実際に廃止されるまで少なくとも数年間はあるので、普通はその間にのんびり対処する事ができる。また、いったん廃止予定と決定されても、その機能が一部で使い続けられている場合には実際には削除されない、というケースも非常に多い。Pythonのドキュメントを見てみると、もう10年も前から廃

    Pythonバージョンの選びかた - atsuoishimoto's diary
  • Pythonで学ぶ「詳解 UNIXプログラミング」(その2) 第2章 UNIXの標準化と実装 - atsuoishimoto's diary

    2.1 sysconfとpathconfの定義値を出力する import os, sys for name in sorted(os.sysconf_names): try: value = os.sysconf(name) except OSError: value = "(not defined)" print name, value for name in sorted(os.pathconf_names): try: value = os.pathconf(".", name) except OSError: value = "(not defined)" print name, value プラットフォームで定義されている制限値の名称は、os.sysconf_namesとos.pathconf_nameに定義されている。 ちなみに、os.sysconf_namesとos.path

    Pythonで学ぶ「詳解 UNIXプログラミング」(その2) 第2章 UNIXの標準化と実装 - atsuoishimoto's diary
  • Pythonで学ぶ「詳解 UNIXプログラミング」(その0) - atsuoishimoto's diary

    お勧めのUNIXプログラミングの入門書は?と聞かれれば誰もが挙げるであろう名著 W.リチャード スティーヴンスの詳解 UNIXプログラミング(APUE)。必読書と言っても良いだろう。 "Pythonで学ぶ「詳解 UNIXプログラミング」"シリーズのエントリでは、私自身の復習もかねて、APUEで解説されているサンプルを、Pythonで実装してみたい。 以降の解説では、特に断り書きのない限り ピアソン・エデュケーション社出版の詳解 UNIXプログラミング 新装版をもとに、Ubuntu Linux 10.10上のPython2.7を対象に解説する。他のUNIX/Linuxや異なるバージョンのPythonであっても、ほとんどそのまま流用できるはずだ。 サンプルコードの背景などの解説は行わないので、かならず「詳解 UNIXプログラミング」とあわせて読んでいただきたい。 ところで、APUEの第2版が2

    Pythonで学ぶ「詳解 UNIXプログラミング」(その0) - atsuoishimoto's diary
  • Pythonの粗大ゴミ - atsuoishimoto's diary

    なんかgcネタが続いてしまうが、先日のPython Hack-a-thon で発表した中で、「ジェネレータオブジェクトが解放されない場合がある」というのは、あまり知られていないようだ。Python公式ドキュメントを確認してみると、どうやらこちらにも書かれていない。知らないとハマってしまう場合もあるので、もうちょっと詳しく解説しておこう。 ガベージコレクションで解放されないオブジェクト まず、ちょっと復習しておこう。Pythonのガベージコレクション機構では、__del__() メソッドを持ったオブジェクトで循環参照を作ってしまうと、そのオブジェクトは自動的には解放されなくなってしまう。 例えば、次のように __del__() メソッドを持つクラスを定義する。 class UnCollectable: "__del__()メソッド付きクラス" def __del__(self): print

    Pythonの粗大ゴミ - atsuoishimoto's diary
  • Pythonのガベージコレクタは「マーク&スイープ」? - atsuoishimoto's diary

    昨日公開した Pythonのガベージコレクション にこんな突っ込みをいただいた。 マークアンドスイープGCじゃないそうです PythonのGarbageCollection http://www.narihiro.info/translate/garbage_collection_for_python_jp.html 確かに、Pythonで使用しているのは教科書で言うマーク&スイープとは異なるアルゴリズムである。上記のページにあるように、いわゆるマーク&スイープは、ルートオブジェクトと呼ばれる生きていることが確実なオブジェクトを見つけ出し、そこから参照されているオブジェクトをどんどん探り出して、最終的に誰からも参照されていないオブジェクトをあぶり出すというものだ。Pythonではルートからオブジェクトを探すというアプローチを取っておらず、私も会場の説明では「マークアンドスイープの一種」のよ

    Pythonのガベージコレクタは「マーク&スイープ」? - atsuoishimoto's diary
  • 1