ツイストのアプリケーション配布

画像 私の仕事は、 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を使用してインストールする必要がありました。



参照:





- ソース



All Articles