从外部文件启动Flask应用程序工厂(使用create_app())

2024-04-26 01:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在这个tutorial之后,为了将一个Flask堆栈对接,我正在尝试从一个外部manage.py文件启动一个现有的应用程序

我的应用程序结构如下:

└── services
    └── web
        ├── manage.py
        └── myapp
            └── requirements.txt
            └── myserver
                └──__init__.py
                └──config
                   └──config.py

manage.py文件:

import os
os.chdir('myapp')
from flask.cli import FlaskGroup
from myapp.myserver import create_app

app = create_app()

cli = FlaskGroup(app)


if __name__ == "__main__":
    cli()

最后是myapp/myserver/__init__.py文件(简化):

from myserver.config.config import Config # this file exists and imports work when i launch from pycharm 

def create_app():
    app = Flask(__name__)
    ...other stuff here
    return app

因此,当我尝试运行:python3 manage.py run时,输出是:

  File "manage.py", line 4, in <module>
    from myapp.myserver import create_app
  File "/var/www/html/flask-docker/services/web/myapp/myserver/__init__.py", line 12, in <module>
    from myserver.config.config import Config

无法解析从__init__.py导入的配置。我试图用manage.py中可见的chdir来解决这个问题

我的环境变量是我从工作设置中获得的:

FLASK_APP="myserver:create_app()"

我通过替换以下内容成功通过了导入指令:

from myserver.config.config import Config

from .config.config import Config

但是整个项目包含从myserver开始的导入

所以最后一个问题是:为什么myserver中的init文件不能识别myserver文件夹/模块?当我通过PyCharm启动它时,这个设置工作得很好


Tags: 文件frompyimportconfigapp应用程序flask
2条回答

它找不到模块,因为它不知道要搜索哪个目录才能找到文件manage.py

尝试将manage.py信息添加到初始化文件。 从web导入管理

布兰登发表了评论,并this answer引导我找到了一个解决方案

管理.py

import sys
#this is the fix
sys.path.append(os.path.join(os.path.dirname(__file__),'myapp'))
from flask.cli import FlaskGroup
from myapp.myserver import create_app

app = create_app()

cli = FlaskGroup(app)
## Heading ##
if __name__ == "__main__":
    cli()

我没有使用os.chdir更改工作目录,而是使用sys.path更改它。我现在可以使用我的服务器初始化文件了

相关问题 更多 >