2016-12-21 31 views
4

我有以下代碼瓶,文件__init__.py工作:config.from_object不瓶與Python 3

from flask import Flask 
from sqlalchemy import create_engine 
from sqlalchemy.orm import sessionmaker 
from flask_sqlalchemy_session import flask_scoped_session 

from . import configmodule 

app = Flask(__name__) 

engine = create_engine(configmodule.DevelopmentConfig.SQLALCHEMY_DATABASE_URI) # <--- THIS WORKS 

session_factory = sessionmaker(bind=engine) 
session = flask_scoped_session(session_factory, app) 

app.config.from_object('configmodule.DevelopmentConfig') # <--- THIS FAILS IN Python 3 

           ... 

文件configmodule.py是在同一目錄__init__.py以上。

我運行使用Python 3.5.2之後,我得到:

werkzeug.utils.ImportStringError: import_string() failed for 'configmodule.DevelopmentConfig'. Possible reasons are: 

- missing __init__.py in a package; 
- package or module path not included in sys.path; 
- duplicated package or module name taking precedence in sys.path; 
- missing module, class, function or variable; 

Debugged import: 

- 'configmodule' not found. 

此錯誤是在代碼段的最後一行:

app.config.from_object('configmodule.DevelopmentConfig') # <--- THIS FAILS IN Python 3 

我與運行沒有問題Python 2.任何想法如何使它與Python 3一起工作?謝謝。

回答

4

Python 3放棄了對隱式相對導入的支持。你需要使用絕對進口

app.config.from_object('packagename.configmodule.DevelopmentConfig') 

明確的相對進口不會出現由from_object支持。

這在the imports section of PEP 8中被觸及。

編輯:刪除了顯式的導入示例。

+0

謝謝,我曾試過這兩個,它沒有工作。 – jazzblue

+0

絕對進口作品。它可能無法正常工作,這取決於您的目錄結構是什麼樣子。 – dirn

+0

我收回它: .configmodule.DevelopmentConfig的作品。謝謝! – jazzblue