与 cx_freeze 捆绑后,Flask 应用程序应请求挂起

Posted

技术标签:

【中文标题】与 cx_freeze 捆绑后,Flask 应用程序应请求挂起【英文标题】:Flask app hangs on request after bundling with cx_freeze 【发布时间】:2017-05-20 03:35:32 【问题描述】:

我用 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)

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

当我正常运行它时,我得到下面的输出,页面对我说“你好”

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

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

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

关于如何调试这个有什么想法吗?

编辑:

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

列表有点长,所以在gist中

【问题讨论】:

【参考方案1】:

这最终成为 cx_Freeze 5.0.1 中的 bug,现在在 cx_Freeze 5.0.2 中进行了修补。

【讨论】:

以上是关于与 cx_freeze 捆绑后,Flask 应用程序应请求挂起的主要内容,如果未能解决你的问题,请参考以下文章

cx_freeze include_msvcr 不捆绑 windows VC2015 运行时

cx_freeze multiprocessing 打包后反复重启

在烧瓶应用程序上使用 cx_freeze

与 Flask 捆绑在一起的服务器在生产中使用是不是安全?

删除应用扩展后仍然出现应用安装失败错误 - 此应用包含具有非法捆绑标识符的应用扩展

cx_Freeze 构建错误?