如何使用cython编译flask应用程序?

时间:2018-06-19 15:59:01

标签: python flask cython

我有一个需要使用cython进行编译的Python flask应用程序。 在this guide之后,我可以编译一个简单的python应用程序,但是当我对一个简单的flask应用程序执行相同的操作时:

#!/usr/bin/env python2

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "hello"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8000)

似乎可以很好地编译,但是当我尝试运行它时,我得到了:

Traceback (most recent call last):
  File "./run.py", line 3, in <module>
    from app import main
ImportError: cannot import name main

当我尝试运行main.py时。

我的compile.py看起来像这样:

#!/usr/bin/env python2

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [ 
    Extension("app",  ["app.py"]),
]
setup(
    name = 'My Test Website',
    cmdclass = {'build_ext': build_ext},
    ext_modules = ext_modules
)

我的main.py看起来像这样:

#!/usr/bin/env python2

from app import main
main()

flask是否使用某些无法编译的功能?还是我做错了?

1 个答案:

答案 0 :(得分:3)

您没有在main()中定义app.py函数,所以from app import main失败了,是的。

您可以只导入app Flask对象,并在其上调用run()方法:

from app import app

app.run(host='0.0.0.0', port=8000)

不是您应该在生产部署中使用它。相反,您将指示可用于生产环境的WSGI服务器将app模块中的app对象用作WSGI应用程序。参见Flask deployment documentation