私の仕事は、
Twistedでさまざまなアプリケーションを作成して、多数のWebサービスと連携することです。
easy_installを使用して(setuptools経由で)
eggとして配布する
TurboGearsプロジェクトとは異なり、Twistedでプロジェクトを「ロールアウト」する便利な方法はありませんでした。
ここまで。
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を使用してインストールする必要がありました。
参照:
-
ソース