【Pythonでネットワークプログラミング】Twistedのインストール

【Pythonでネットワークプログラミング】Twistedのインストール プログラミング

「Pythonでsocket通信を行いたい」
「PythonでSSH接続を行いたい」
「Pythonでネットワークプログラミングを行いたい」

このような場合には、Twistedがオススメです。
この記事では、Twistedについて解説しています。

本記事の内容

  • Twistedとは?
  • Twistedのシステム要件
  • Twistedのインストール
  • Twistedの動作確認

それでは、上記に沿って解説していきます。

Twistedとは?

Twistedとは、Pythonで書かれた非同期ネットワーキング・フレームワークです。
Twistedには、以下の機能が用意されています。

  • twisted.web: HTTP clients and servers, HTML templating, and a WSGI server
  • twisted.conch: SSHv2 and Telnet clients and servers and terminal emulators
  • twisted.words: Clients and servers for IRC, XMPP, and other IM protocols
  • twisted.mail: IMAPv4, POP3, SMTP clients and servers
  • twisted.positioning: Tools for communicating with NMEA-compatible GPS receivers
  • twisted.names: DNS client and tools for making your own DNS servers
  • twisted.trial: A unit testing framework that integrates well with Twisted-based code.

ネットワーク通信は、Twistedにお任せということです。
凝ったネットワーク通信を実現したい場合、Twistedがその効果を発揮するでしょう。

Twistedのドキュメントは、結構充実しています。

Twisted公式ドキュメント
https://docs.twisted.org/en/stable/core/index.html

Pythonでネットワークプログラミングを行いたい場合、上記ページが参考になります。
どちらかと言うと、Twistedは上級者向けのライブラリです。

以上、Twistedについて説明しました。
次は、Twistedのシステム要件を説明しました。

Twistedのシステム要件

現時点(2022年8月)でのTwistedの最新バージョンは、22.4.0となります。
この最新バージョンは、2022年4月11日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10

Python 3.6だけが、以下のPython公式開発サイクルとは異なります。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

Python 3.6のサポートは、2021年で終了していることに注意しましょう。

他には、システム要件はありません。
基本的には、Pythonが動けばOKと言えます。

以上、Twistedのシステム要件を説明しました。
次は、Twistedのインストールを説明します。

Twistedのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.2.2
setuptools 65.0.1
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、Twistedのインストールです。
Twistedのインストールは、以下のコマンドとなります。

pip install Twisted

Twistedのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package           Version
----------------- -------
attrs             22.1.0
Automat           20.2.0
constantly        15.1.0
hyperlink         21.0.0
idna              3.3
incremental       21.3.0
pip               22.2.2
setuptools        65.0.1
six               1.16.0
Twisted           22.4.0
typing_extensions 4.3.0
wheel             0.36.2
zope.interface    5.4.0

Twistedが依存するパッケージは、そこそこ存在しています。
インストールにおけるトラブルを防ぎたいなら、Python仮想環境の利用をオススメします。

以上、Twistedのインストールを説明しました。
次は、Twistedの動作確認を説明します。

Twistedの動作確認

Twistedの動作確認を行います。
Twistedを用いて、TCP接続をサーバー・クライアントで実現します。

そのためには、それぞれのスクリプトを用意します。

simpleserv.py

# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.


from twisted.internet import protocol, reactor


class Echo(protocol.Protocol):
    """This is just about the simplest possible protocol"""

    def dataReceived(self, data):
        "As soon as any data is received, write it back."
        self.transport.write(data)


def main():
    """This runs the protocol on port 8000"""
    factory = protocol.ServerFactory()
    factory.protocol = Echo
    reactor.listenTCP(8000, factory)
    reactor.run()


# this only runs if the module was *not* imported
if __name__ == "__main__":
    main()

simpleclient.py

# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.


"""
An example client. Run simpleserv.py first before running this.
"""

from twisted.internet import protocol, reactor

# a client protocol


class EchoClient(protocol.Protocol):
    """Once connected, send a message, then print the result."""

    def connectionMade(self):
        self.transport.write(b"hello, world!")

    def dataReceived(self, data):
        "As soon as any data is received, write it back."
        print("Server said:", data)
        self.transport.loseConnection()

    def connectionLost(self, reason):
        print("connection lost")


class EchoFactory(protocol.ClientFactory):
    protocol = EchoClient

    def clientConnectionFailed(self, connector, reason):
        print("Connection failed - goodbye!")
        reactor.stop()

    def clientConnectionLost(self, connector, reason):
        print("Connection lost - goodbye!")
        reactor.stop()


# this connects the protocol to a server running on port 8000
def main():
    f = EchoFactory()
    reactor.connectTCP("localhost", 8000, f)
    reactor.run()


# this only runs if the module was *not* imported
if __name__ == "__main__":
    main()

まずは、サーバーであるsimpleserv.pyを起動します。

$ python simpleserv.py

上記のように実行すると、待ちの状態になります。
この状態でsimpleclient.pyを実行します。

Server said: b'hello, world!'
connection lost
Connection lost - goodbye!

実行した結果は、上記のように表示されます。
このように表示されれ、TCP接続は成功しています。

simpleserv.pyが起動していない場合は、TCP接続は失敗します。
その場合にsimpleclient.pyを実行した結果は、以下となります。

Connection failed - goodbye!

上記のサンプルコードは、以下のページより取得しています。
https://docs.twisted.org/en/stable/core/examples/index.html

上記ページでは、他にも多くのサンプルコードが公開されています。
それらを利用して、Twistedの動作をさらに確認することが可能です。

以上、Twistedの動作確認を説明しました。

タイトルとURLをコピーしました