【问题标题】:Flask uWSGI application structure and python3 importsFlask uWSGI 应用结构和 python3 导入
【发布时间】:2016-03-01 11:07:37
【问题描述】:

我有一个基本的 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 flask uwsgi flask-restful


    【解决方案1】:

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

    from application import config 
    

    new spelling of relative imports:

    from . import config
    

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

    from __future__ import absolute_import
    

    【讨论】:

    • 感谢您的回答,但它并没有真正解决问题。如果我的 wsgi.ini 位于内部应用程序文件夹之外,这种导入方法将起作用,我不确定这是正确的位置。有没有一种方法可以进行导入,无论 wsgi 是否在我们的内部应用程序文件夹之外?
    • wsgi.ini 的位置无关紧要。你如何运行 uWSGI?您可能需要在wsgi.ini 中设置chdir 和/或pythonpath
    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多