【发布时间】:2019-01-10 07:23:20
【问题描述】:
目前,我正在玩 Cython,并试图弄清楚如何在 heroku 上托管 Cython Flask 应用程序(例如)。
假设我的项目看起来像这样(在 cython 编译之后):
_/cythonheroku
|-- requirements.txt
|-- run.py
|-- Procfile
|__/app
|-- __init__.py
|-- app.c
|-- app.cpython-36m-darwin.so
|-- app.pyx
现在,app.pyx 中有一个标准的 Flask 应用,其中包含一些 cython 调整,如下所示:
#cython: infer_types=True
from flask import Flask
app = Flask(__name__)
@app.route('/', methods=['GET'])
def index():
cdef long x = 10000000
cdef long long y = 0
cdef int i
for i in range(x):
y += i
return str(y)
然后,使用命令 cythonize -i app/app.pyx 编译我的 app.pyx 代码。
在run.py 文件中我有:
from app.app import app
app.run()
当我看到来自for 循环的返回值时,从我的命令行python run.py 启动它会在本地主机上启动一个服务器。
问题: 将其推送到 heroku 后,我在 run.py 的第一行得到错误:
no module named app
据我所知——heroku 只是看不到我编译的应用程序文件。
UPD:Procfile 中的命令:
web: gunicorn run:app --log-file=-
UPD2:
经过一些测试,我发现 Heroku 无法将 app.cpython-36m-darwin.so 识别为模块。这就是我收到该错误的原因。
现在的问题是 – 如何让 heroku 将 .so 文件识别为 python 模块?
【问题讨论】:
标签: python heroku flask cython