Drkcore

11 06 2010 Python Tweet

egg entry pointsを使ってプラグインっぽいことをしてみた

Eggがよくわからんと少し調べてたら、Python plugins egg cooking mini-howto ってのがわかりやすかったので、デコレーターっぽいことをしてみた。

まず環境汚すのがいやだったのでvirtualenvでテスト環境をつくる。pylonsだとスクリプトでよろしくやってくれるのだけど、自分で作る場合にはvirtualenvwrapperを使うとよいらしい。

というか使ってみると便利すぎ。これは手放せん。

続いて実際に書いてみる。ディレクトリ構造はこんな感じ

$ ls -R deco
minus/     mydeco.py  plus/

deco/minus:
minus_plugin/ setup.py

deco/minus/minus_plugin:
minus.py

deco/plus:
plus_plugin/ setup.py

deco/plus/plus_plugin:
plus.py

ポイントはsetup.pyのentry_pointsってとこで、呼び出す方は entry_pointsに選んだ名前をpkg_resources.iter_entry_points("xxxx")に指定して呼べばいい。

アーカイブはここに置いといた

mydeco.py

#!/usr/bin/env python
# -*- encoding:utf-8 -*-

import pkg_resources

for entrypoint in pkg_resources.iter_entry_points("my.plugins"):
    plugin_class = entrypoint.load()
    decorater = plugin_class()
    print decorater.display("hello world!")

実行結果

$ python mydeco.py 
++++++++++++++++
+ hello world! +
++++++++++++++++

----------------
| hello world! |
----------------

エキスパートPythonプログラミングの4,6章あたりでも触れられており、これも参考になった。

ProductName エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス / ¥ 3,780 ()
在庫あり。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021