5

我不确定这是否是特定于烧瓶的问题,或者我只是缺乏对 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。我该怎么做呢?

4

2 回答 2

1

如果要导入位于父目录中的模块,一种可能的方法是在导入之前将父目录添加到 sys.path:

cmd_folder = os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe() ))[0])
sys.path.append(cmd_folder+'/../')
于 2012-06-25T04:05:11.280 回答
0

Python 相对导入是相对于__main__.

如果我正确地假设你run.py__main__. 在这种情况下,您应该能够:

from myapp import app
于 2012-06-25T00:28:40.067 回答