与 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.12
和cx-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 打包后反复重启