2016-03-01 83 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

相關問題