ここまで。
Twistedは、アプリケーションを「twistd」スターターに統合できる便利なプラグインシステムを克服します。
唯一の問題は、このプロセスに関するまともな文書の完全な欠如です。
以下に、簡単なアプリケーションをツイストパッケージにアセンブルする方法について簡単に説明します。 実際、有名なチュートリアル -Twisted fingerにステップ番号12を追加します:「twistedのTwistedアプリケーションとしてfingerのパッケージを作成する方法」(別名「Skipped step」)。
ステップ12:fingerサービスを、twistdのインストール可能なTwistedアプリケーションプラグインとしてパッケージ化する方法
以下に示すディレクトリ構造を作成します
finger
finger/__init__.py
finger/finger.py
MANIFEST.in
setup.py
twisted
twisted/plugins
twisted/plugins/finger_plugin.py
finger / finger.pyはここからのfingerアプリケーションです 。
twisted / plugins-ディレクトリ構造。ファイルfinger_plugin.pyが含まれます。これについては以下で説明します。 注意してください-twistedおよびtwisted / pluginsディレクトリに__init__.pyファイルはありません-これは重要です!
finger_plugin.pyは、IServiceMakerおよびIPluginインターフェースを実装します。
#====ツイスト/プラグイン/ finger_plugin.py ==== #-Zopeモジュール- zope.interface import implementsから #-ツイストモジュール- twisted.pythonインポート使用から twisted.application.service import IServiceMakerから twisted.pluginからIPluginをインポート #-フィンガーモジュール- 指インポート指から クラスオプション(usage.Options): 概要= "[オプション]" longdesc = "フィンガーサーバーを作成します。" optParameters = [ ['file'、 'f'、 '/ etc / users']、 ['templates'、 't'、 '/ usr / share / finger / templates']、 ['ircnick'、 'n'、 'fingerbot']、 ['ircserver'、なし、 'irc.freenode.net']、 ['pbport'、 'p'、8889]、 ] optFlags = [['' ssl '、' s ']] クラスMyServiceMaker(オブジェクト): 実装(IServiceMaker、IPlugin) tapname = "finger" 説明=「フィンガーサーバー」。 options =オプション def makeService(self、config): return finger.makeService(config) serviceMaker = MyServiceMaker()
setup.pyは標準のインストーラーファイルです。 setup()関数の引数「packages」と「package_data」と、setup()の完了後に呼び出されるrefresh_plugin_cache()関数に注意してください。 後者は、Twistedプラグインキャッシュ(twisted / plugins / dropin.cache)を手動でフラッシュします。
#====ツイスト/プラグイン/ finger_plugin.py ==== '' '指のsetup.py。 これは、Twisted fingerチュートリアルの拡張であり、どのように Twistedアプリケーションをインストール可能なPythonパッケージとしてパッケージ化し、 twistdプラグイン(必要に応じて「ステップ12」を検討してください)。 twisted.python.dist.setup()を使用して、このパッケージを次のようにインストール可能にします。 ツイストアプリケーションプラグイン。 インストール後、アプリケーションはツイストとして管理できるはずです コマンド。 たとえば、フォアグラウンドで開始するには、次のように入力します。 $ツイスト-n指 指のオプションを表示するには、次を入力します。 $ツイストフィンガー-ヘルプ '' ' __author__ = 'Chris Miles' インポートシステム 試してください: ねじれたインポート ImportErrorを除く: SystemExitを発生させます(「ねじれが見つかりません。必ず確認してください」 「Twistedコアパッケージをインストールしました。」) distutils.coreインポートセットアップから def refresh_plugin_cache(): twisted.pluginからIPlugin、getPluginsをインポート リスト(getPlugins(IPlugin)) __name__ == '__main__'の場合: sys.version_info [:2]> =(2、4)の場合: extraMeta = dict( 分類子= [ 「開発ステータス:: 4-ベータ」、 「環境::入力/出力なし(デーモン)」、 「プログラミング言語:: Python」、 ]) その他: extraMeta = {} セットアップ( name = "finger"、 バージョン= '0.1'、 description = "フィンガーサーバー。"、 author = __ author__、 author_email = "you@email.address"、 url = "http://twistedmatrix.com/projects/core/documentation/howto/tutorial/index.html"、 パッケージ= [ 指 「twisted.plugins」、 ]、 package_data = { 'twisted':['plugins / finger_plugin.py']、 }、 ** extraMeta) refresh_plugin_cache()
MANIFEST.inには1行が含まれており、distutilsに既存のTwistedパッケージを変更する(twisted / plugin / finger_plugin.pyをインストールする)ように指示していると思います。
graft twisted
これですべて、通常の方法でパッケージのインストールを開始できます。
$ python setup.py install
その後、twistdを実行する必要があります-アプリケーションが正常にインストールされ、アクセス可能であることを確認します。 ねじれたオプションを見てください:
$ twistd --help
Usage: twistd [options]
...
Commands:
athena-widget Create a service which starts a NevowSite with a single
page with a single widget.
ftp An FTP server.
telnet A simple, telnet-based remote debugging service.
socks A SOCKSv4 proxy service.
manhole-old An interactive remote debugger service.
portforward A simple port-forwarder.
web A general-purpose web server which can serve from a
filesystem or application resource.
inetd An inetd(8) replacement.
vencoderd Locayta Media Farm vencoderd video encoding server.
news A news server.
words A modern words server
toc An AIM TOC service.
finger Finger server.
dns A domain name server.
mail An email service
manhole An interactive remote debugger service accessible via
telnet and ssh and providing syntax coloring and basic
line editing functionality.
conch A Conch SSH service.
プラグインでfingerサーバーのオプションを見てみましょう:
$ twistd finger --help
Usage: twistd [options] finger [options]
Options:
-s, --ssl
-f, --file= [default: /etc/users]
-t, --templates= [default: /usr/share/finger/templates]
-n, --ircnick= [default: fingerbot]
--ircserver= [default: irc.freenode.net]
-p, --pbport= [default: 8889]
--version
--help Display this help and exit.
Make a finger server.
コンソールでフィンガーサーバーを起動します。
$ sudo twistd -n finger --file=users
2007/12/23 22:12 +1100 [-] Log opened.
2007/12/23 22:12 +1100 [-] twistd 2.5.0 (/Library/Frameworks/Python.framework/
Versions/2.5/Resources/Python.app/Contents/MacOS/Python 2.5.0) starting up
2007/12/23 22:12 +1100 [-] reactor class: <class 'twisted.internet.selectreactor.SelectReactor'>
2007/12/23 22:12 +1100 [-] finger.finger.FingerFactoryFromService starting on 79
2007/12/23 22:12 +1100 [-] Starting factory <finger.finger.FingerFactoryFromService instance at 0x1d0a4e0>
2007/12/23 22:12 +1100 [-] twisted.web.server.Site starting on 8000
2007/12/23 22:12 +1100 [-] Starting factory <twisted.web.server.Site instance at 0x1d0a558>
2007/12/23 22:12 +1100 [-] twisted.spread.pb.PBServerFactory starting on 8889
2007/12/23 22:12 +1100 [-] Starting factory <twisted.spread.pb.PBServerFactory instance at 0x1d0a670>
2007/12/23 22:12 +1100 [-] Starting factory <finger.finger.IRCClientFactoryFromService instance at 0x1d0a5f8>
twistdは、デーモンの起動、ログおよびpidファイルの場所の指定など、多くの便利な機能を提供します。
残念ながら、Twistedとsetuptoolsは相互にうまく相互作用しないため、Twistedアプリケーションをeggとしてパッケージ化できず、setuptools依存関係解決システムをいじる、またはeasy_installを使用してインストールする必要がありました。
参照:
- twistedmatrix.com/projects/core/documentation/howto/plugin.html
- twistedmatrix.com/projects/core/documentation/howto/tap.html
- twistedmatrix.com/projects/core/documentation/howto/tutorial/index.html
- ソース