我有一个需要使用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是否使用某些无法编译的功能?还是我做错了?
答案 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。