2016-12-21 1 views
4

나는 다음과 플라스크 코드가 파일 __init__.py 플라스크에서 작동하지 않습니다config.from_object 파이썬 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와 같은 디렉토리에 있습니다. 나는 그것이 파이썬 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

암시 적 상대 가져 오기에 대한 지원이 중단되었습니다. 당신은 from_object에서 지원되지 않는 것 같습니다 절대 가져 오기

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

명시 상대적으로 수입을 사용해야합니다.

이 내용은 the imports section of PEP 8으로 변경되었습니다.

편집 : 명시 적 가져 오기 예제가 제거되었습니다.

+0

감사합니다. 나는이 두 가지를 시도했지만 작동하지 않았습니다. – jazzblue

+0

절대 가져 오기가 작동합니다. 디렉토리 구조가 어떻게 생겼는지에 따라 필자가 작성한대로 작동하지 않을 수 있습니다. – dirn

+0

나는 그것을 되돌려받습니다 : .configmodule.DevelopmentConfig가 작동합니다. 감사! – jazzblue