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

时间:2016-03-01 11:07:37

标签: python-3.x flask uwsgi flask-restful

我有一个基本的烧瓶安息应用程序,其结构与烧瓶网站上的建议类似。

/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在正确的位置,还是应该在内部应用程序目录中?

1 个答案:

答案 0 :(得分:1)

Python 3.x放弃了对infra-package相对导入的支持。您需要使用绝对导入:

from application import config 

new spelling of relative imports

from . import config

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

from __future__ import absolute_import