Flask uWSGI 应用程序结构和 python3 导入

Flask uWSGI application structure and python3 imports

我有一个基本的 flask-restful 应用程序,其结构类似于 flask 网站上推荐的结构。

/application
    /application
        /config.py
        /__init__.py
    /wsgi.ini

有点不相关,但是config.py是由我们的CD服务器生成的。

wsgi.ini 看起来像这样

[uwsgi]
module = application:app

master = true
processes =5

socket = /tmp/application.sock
chmod-socket = 660
vacuum = true

die-on-term = true

__init__.py看起来像这样

import config

from flask import Flask, request, g
from flask_restful import Resource, Api, abort


app = Flask(__name__)
api = Api(app)

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

现在,当我尝试使用 uwsgi --ini wsgi.ini 启动应用程序时,出现此错误:

File "./application/__init__.py", line 2, in <module>
    import config

最初 __init__.py 被调用 main.py 并且我执行了它来调试,这就是导入现在错误的原因。我想我需要将导入更改为 from .config import *

我的问题有两个:

  1. 我可以完全避免导入问题吗?即 python3 中是否有一种方法可以导入对两种方法都有效的同级模块
  2. 我的wsgi.ini在正确的地方吗,还是应该在内部应用程序目录中?

Python 3.x 放弃了对包内相关导入的支持。您需要使用绝对导入:

from application import config 

new spelling of relative imports:

from . import config

如果您还需要支持 Python 的旧版本,您可以通过以下方式启用此行为:

from __future__ import absolute_import