2016-03-01 84 views
0

我有一个基本的烧瓶安静的应用程序,其结构看上去像烧瓶网站上推荐的那样。烧瓶uWSGI应用程序结构和python3导入

/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

Python 3.x不再支持软件包相对导入。你需要使用绝对导入:

from application import config 

new spelling of relative imports

from . import config 

如果需要还支持Python的旧版本,您可以启用这种行为:

from __future__ import absolute_import 
+0

谢谢对于答案,但它并没有真正解决这个问题。如果我的wsgi.ini位于内部应用程序文件夹之外,这种导入方法将工作,我不确定是否是正确的位置。有没有一种方法可以执行导入,无论wsgi是否位于内部应用程序文件夹外? – Leon

+0

'wsgi.ini'的位置是不相关的。你如何运行uWSGI?您可能需要在'wsgi.ini'中设置'chdir'和/或'pythonpath'。 – dirn

相关问题