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

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

参照:



- ソース

Source: https://habr.com/ru/post/J96252/


All Articles