【问题标题】:Flask can't find the config module in parent directoryFlask 在父目录中找不到配置模块
【发布时间】:2016-08-25 08:49:06
【问题描述】:

我基于我在 github 上找到的一个网络应用程序的结构,here

我的项目结构如下:

~/Learning/flask-celery $ tree
.
├── config
│   ├── __init__.py
│   └── settings.py
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
└── web
    ├── app.py
    ├── __init__.py
    ├── static
    └── templates
        └── index.html

我希望 web/app.py 中的 Flask 应用程序加载 config 模块中的设置,正如我在上面链接的 githug 项目中看到的那样。

这是我在web/app.py 中实例化 Flask 应用程序的方式:

from flask import Flask, request, render_template, session, flash, redirect, url_for, jsonify

[...]

app = Flask(__name__, instance_relative_config=True)

app.config.from_object('config.settings')
app.config.from_pyfile('settings.py')

[...]

我遇到的问题是:

root@0e221733b3d1:/usr/src/app# python3 web/app.py 
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/site-packages/werkzeug/utils.py", line 427, in import_string
    module = __import__(module_name, None, None, [obj_name])
ImportError: No module named 'config'
[...]

显然,Flask 在父目录中找不到 config 模块,这对我来说很有意义,但我不明白我所基于的链接项目是如何成功加载模块的树形结构和 Flask 配置代码。

在这种情况下,如何让 Flask 加载 config 模块?

【问题讨论】:

    标签: python web-applications flask


    【解决方案1】:

    如果不将配置目录添加到您的路径,您的 Python 包将无法看到它。

    您的代码只能通过外观访问web 中的内容。

    您可以像这样将配置目录添加到包中:

    import os
    import sys
    import inspect
    
    currentdir = os.path.dirname(
        os.path.abspath(inspect.getfile(inspect.currentframe())))
    parentdir = os.path.dirname(currentdir)
    sys.path.insert(0, parentdir)
    

    那么你应该可以导入配置了。

    【讨论】:

    • 感谢您的回答。我会试一试,它看起来应该可以工作,但我很好奇链接的 github 项目是如何让它工作的?我认为instance_relative_config=True 意味着它会在我的根目录中查找。
    • flask.pocoo.org/docs/0.11/config/#instance-folders 不知道为什么你的即时工作可能与它的运行方式有关。
    猜你喜欢
    • 2019-01-04
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多