Flask 应用程序在与 cx_freeze 捆绑后根据请求挂起

Flask app hangs on request after bundling with cx_freeze

我在 Python 中制作了一个 Flask 应用程序,我想将其转换为一个 exe 文件以供分发,为此我正在尝试使用 cx_freeze.

当我 运行 来自 Python 或 Pycharm 的应用程序时,它运行完美,但在我将其捆绑后,每个请求都挂起(在 chrome 中旋转).我尝试调试它并最终创建了一个只有一个路由且没有其他依赖项的新烧瓶应用程序,同样的事情发生了。

这是我制作的测试应用 (testapp/app.py):

from flask import Flask

# Create flask app
webapp = Flask(__name__)

@webapp.route('/')
def home():
    print "home"
    return 'hello there'

setup.py为之:

from setuptools import find_packages
from cx_Freeze import setup, Executable

setup(
    name='testapp',
    description='Test Flask App',
    packages=find_packages(),
    include_package_data=True,
    zip_safe=False,
    install_requires=[
        'Flask',
        'waitress',
    ],
    options={
        "build_exe": {
            "packages": [
                "flask",
                "waitress",
                "threading",
                "os",
            ],
            'include_msvcr': True,
        }
    },
    executables=[
        Executable(
            "run.py",
            icon="icon.ico",
        )
    ]
)

以及作为我的入口点的 run.py

from testapp.app import webapp
import sys
import waitress

if __name__ == "__main__":
    PORT = sys.argv[1] if len(sys.argv) > 1 else 8080
    waitress.serve(webapp, port=PORT)

我已经阅读了其他一些问题,但它似乎总是以模板问题告终,但这个应用程序没有使用模板,我的真实应用程序也没有。

当我 运行 它通常会得到下面的输出并且页面对我说 "hello"

Serving on http://Desktop-PC:8080
home

当我 运行 它作为 exe 时,我得到相同的控制台输出,但页面只是挂起。

我正在使用 flask==0.12cx-Freeze==5.0.1

关于如何调试这个的任何想法?

编辑:

我注意到在构建期间,我收到很多关于缺少包的警告,但是如果我尝试将这些包添加到我的 setup.py,cx_freeze 会抛出关于无法添加的错误导入它们。但是,如果我无法导入它们,而我的应用显然需要它们,它不应该无法正常 运行 吗?

列表有点长,所以它在 gist

这最终成为 cx_Freeze 5.0.1 中的 bug,现在已在 cx_Freeze 5.0.2.

中进行了修补