我在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