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

Joh*_*ohn 5 python cython flask

我有一个 Python Flask 应用程序,需要使用 cython 进行编译。按照本指南,我可以编译一个简单的 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)
Run Code Online (Sandbox Code Playgroud)

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

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

当我尝试运行 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
)
Run Code Online (Sandbox Code Playgroud)

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

#!/usr/bin/env python2

from app import main
main()
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 4

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

您可以导入appFlask 对象,然后调用run()该对象的方法:

from app import app

app.run(host='0.0.0.0', port=8000)
Run Code Online (Sandbox Code Playgroud)

并不是说您应该在生产部署中使用它。相反,您可以指示生产就绪的 WSGI 服务器使用模块app中的对象app作为 WSGI 应用程序。请参阅Flask 部署文档