読者です 読者をやめる 読者になる 読者になる

WindowsでCherryPyが動かないときは

Python

Windows DefenderやKasperskyのような高度なセキュリティ対策環境にあると、CherryPyTurboGearsのWebサーバ)は起動に失敗します。

通常、サーバにポートが開いていなければ、クライアントからの接続は失敗します。CherryPyはサーバポートが使用可能であるかどうかを、「いちどクライアントとして接続してみて失敗する」ことで確認しています。CherryPyソースコードの_cpserver.py、もしくはprocess/servers.pyにある、wait_for_free_port関数を見てみるとわかります。

ところで、Windowsの一部のセキュリティ対策ソフトは、「どのポートに接続しても即時失敗はしない」ようにし、攻撃者の行動を観察したり、ポートスキャンを困難にしたりしているようです。これではCherryPyの方法で空きポートの確認ができません。

というわけで、Windowsでこの問題が発生したときは、アプリケーションの一番最初にこんなハックコードを入れてかわしましょう。

import sys, cherrypy

if sys.platform.startswith('win'):
    cherrypy.process.servers.wait_for_free_port = lambda host, port: None #for cp3
    cherrypy._servers.wait_for_free_port = lambda host, port: None #for cp2

未確認だけど、理屈ではこれでノーチェックになるはず。