在与cx_freeze捆绑后,Flask app会根据请求挂起

时间:2017-05-20 03:35:33

标签: python python-2.7 flask 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)

我已经阅读了其他几个问题,但它似乎总是最终成为一个模板问题,但这个应用程序不使用模板,也不是我真正的应用程序。

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

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

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

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

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

编辑:

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

列表有点长,所以它位于gist

1 个答案:

答案 0 :(得分:0)

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