可以使用`python`而不是`uwsgi`运行Flask应用程序?

时间:2017-06-15 18:59:55

标签: python flask uwsgi

我正在尝试设置uWSGI来运行一个简单的Flask应用程序。我跟着this tutorial一起工作,这很好,但是当我在项目中实现相同的概念时,它没有用。

这是我的目录结构:

.form-horizontal .control-label {
  text-align: right;
  margin-bottom: 0;
  padding-top: 7px;
}

当我在/project --/bin ----server.py ----wsgi.py 目录中时,python命令/project正常工作。但是,uwsgi命令python bin/wsgi.py没有。这是uwsgi --socket 0.0.0.0:8000 --protocol=http --wsgi-file bin/wsgi.py

server.py

这是from flask import Flask, jsonify, request app = Flask(__name__) # all my routes below...

wsgi.py

这是我得到的错误:

import os
from server import app as application

if __name__ == "__main__":
    port = int(os.environ.get('PORT', 5000))
    application.run(debug=True)

谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 为什么python bin/mod.py有效?

    因为Python将sys.path设置为包含您的bin目录,所以基于目录mod.py(命令行参数)位于:

      

    在程序启动时初始化时,此列表的第一项path[0]是包含用于调用Python解释器的脚本的目录。

    您可以将import sysprint(sys.path)添加到wsgi.py来查看。第一个元素是您的bin目录(完整的绝对路径)。

  2. 为什么uwsgi --wsgi-file bin/wsgi.py没有效果?

    因为口译员不知道在哪里找server.py。 uWSGI没有采用bin/wsgi.py的路径,并未将其添加到嵌入式解释器的sys.path(通过Py_SetProgramName内部API调用,{{1}或者其他) - 它刚刚初始化了解释器并加载了文件。

    基本上,uWSGI不是Python解释器,只是托管它,嵌入式。

      

    如果脚本目录不可用(例如,如果以交互方式调用解释器或者从标准输入读取脚本),则路径[0]为空字符串,指示Python首先搜索当前目录中的模块。

  3. 为什么PySys_SetPath解决了问题?

    因为您告诉Python解释器在哪里查找导入的模块。 : - )