我试图在CherryPy服务器上部署我的Flask应用程序。我喜欢它简单而简约的本性。
所以我PIP和CherryPy一样,如下所示
pip install CherryPy-15.0.0-py2.py3-none-any.whl
并编写如下脚本 - 许多来源提出的非常常见的
from cherrypy import wsgiserver
from hello import app
d = wsgiserver.WSGIPathInfoDispatcher({'/': app})
server = wsgiserver.CherryPyWSGIServer(('0.0.0.0', 80), d)
if __name__ == '__main__':
try:
server.start()
except KeyboardInterrupt:
server.stop()
令我惊讶的是,我有导入错误。经过几次谷歌搜索后,我了解到我必须将我的导入线更改为cheroot才能使其正常工作。
from cheroot.wsgi import Server
from cheroot.wsgi import PathInfoDispatcher
现在,我的代码工作正常。
但是,如果这是使用CherryPy WSGI服务器的正确方法,或者如果我使用错误版本的CherryPy,我会感到有点困惑。我很困惑,因为Cheroot似乎已经超过一年了(日期一直追溯到2014年),但我在CherryPy WSGI服务器上的Flask周围发现的所有信息都使用from cherrypy import wsgiserver
,而不是from cheroot.wsgi import Server
,甚至最新帖子。
这让我不确定我是否正在做正确的事。
有人可以解释这种混乱吗?
答案 0 :(得分:3)
Cheroot(src)是低级HTTP和WSGI服务器,曾经曾经是CherryPy(src)的一部分,但是已经被分解一会儿再进入一个单独的仓库。因此以前的cherrypy.wsgiserver
已移至cheroot.wsgi
模块。
它是完全可替换的,旨在允许开发人员在仅使用WSGI服务器而不需要CherryPy其他部分的情况下直接依赖Cheroot。
因此,您可以按照与版本无关的方式使用它:
try:
from cheroot.wsgi import Server as WSGIServer, PathInfoDispatcher
except ImportError:
from cherrypy.wsgiserver import CherryPyWSGIServer as WSGIServer, WSGIPathInfoDispatcher as PathInfoDispatcher
from hello import app
d = PathInfoDispatcher({'/': app})
server = WSGIServer(('0.0.0.0', 80), d)
if __name__ == '__main__':
try:
server.start()
except KeyboardInterrupt:
server.stop()