У меня есть приложение Python flask, которое мне нужно скомпилировать с помощью cython. Следуя этому руководству, я могу скомпилировать простое приложение python, но когда я делаю то же самое для простого флеш-приложения:
#!/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()
Использует ли колбу некоторые функции, которые невозможно скомпилировать? Или я делаю это неправильно?
Вы не определили функцию main()
в app.py
, поэтому from app import main
ошибки from app import main
да.
Вы можете просто импортировать объект Flask app
и вызвать метод run()
:
from app import app
app.run(host='0.0.0.0', port=8000)
Не то, чтобы вы использовали это в производственных развертываниях. Вместо этого вы должны подготовить готовый WSGI сервер для использования объекта app
модуле app
в качестве app
WSGI. См. Документацию по развертыванию Flask.