我不确定这是否是特定于烧瓶的问题,或者我是否只是缺乏对python导入机制的理解,但我遇到了烧瓶Web应用程序的一些问题。这是我的应用程序的布局:
/myapp
/INSTALL
/TODO
/run.py
/instance
/application.cfg
/myapp
/static
/templates
/__init__.py
/config.py
/service.py
config.py文件存储默认应用程序配置,application.cfg存储实例配置。它们看起来都像这样:
DEBUG = False
TESTING = False
SECRET_KEY = "please_replace_me"
这是我在 init .py:
中设置应用程序的方法import flask
app = Flask(__name__, instance_relative_config=True)
app.config.from_object("myapp.config")
app.config.from_pyfyle("application.cfg", silent=True)
现在我想要的是从service.py访问app.config对象,该对象不包含在 init .py或Web应用程序中的任何其他模块中。即这就是我想要的service.py文件:
from somewhere.somehow import app
def run():
do_stuff(app.config["CONFIG_OPTION"])
问题是service.py文件必须在包内,所以我无法将其移动到一个文件夹,只需导入myapp。我该怎么做?
答案 0 :(得分:0)
Python相对导入与__main__
相关。
如果我认为你的run.py
是__main__
正确的话。在这种情况下,您应该能够:
from myapp import app
答案 1 :(得分:0)
如果要导入位于父目录中的模块,一种可能的方法是在导入之前将父目录添加到sys.path:
cmd_folder = os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe() ))[0])
sys.path.append(cmd_folder+'/../')