当前位置: 首页 > 知识库问答 >
问题:

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

孙项禹
2023-03-14

在本教程中,我将尝试从外部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/\uuuu init\uuu。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管理。py运行,输出为:

  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导入的配置。我试图解决这与chdir可见在manage.py.

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

FLASK_APP="myserver:create_app()"

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

from myserver.config.config import Config

通过

from .config.config import Config

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

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

共有2个答案

仉成益
2023-03-14

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

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

慕健
2023-03-14

布兰登评论道,这个回答让我找到了一个解决方案

管理派克

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更改它。我现在能够使用我的服务器init文件

 类似资料:
  • 问题内容: 我正在编写一个使用node.js访问本地文件系统的桌面Web应用程序。我目前可以使用node.js打开文件并将其复制到硬盘驱动器上的不同位置。我还想做的是允许用户使用与文件类型关联的应用程序打开特定文件。换句话说,如果用户在Windows环境中选择“ myfile.doc”,它将使用该文件启动MSWord。 我一定是术语的受害者,因为除了与node.js进行通信的子进程的生成之外,我什

  • 问题内容: 当前,我有一个Java Standalone Swing应用程序。 现在,当用户单击Swing应用程序中的按钮时,我想启动另一个Java应用程序(说:Calculator.jar) 我可以知道什么是便携式方法吗?这样它就可以在多个OS中工作吗? 问题答案: 使用或只是将其放在类路径中并调用其。

  • 看到这章的内容也许你会有疑惑,启动应用?不是很简单吗?我直接使用 python app.py 不就将应用跑起来了吗,而且我还能看到访问的日志呢。是的,没错,直接运行代码是可以将我们编写的 Web 应用跑起来,而且还能很好得查看运行信息,但是,假设你想更换配置呢?例如,你有 development1.py 和 development2.py 两个配置文件,一开始你使用 development1.py

  • 注意:test.class文件也使用了example.jar文件中的类文件,有自己的包结构。 我知道我可以将它们放在一个jar文件中,不幸的是我需要将test.class文件分开。

  • 问题内容: 我正在寻找一种从Matlab中启动应用程序的方法。问题是,我的Matlab脚本将一些结果保存到文件中,然后应在关联的应用程序中打开(在这种情况下为Blender)。 我熟悉类似的命令 要么 以及其他一些方法,但实际上,该应用程序是从Matlab PATH启动的,因此它在Matlab目录中查找所需的各种库。例如: 是否有某种方法可以启动使用全局(系统)PATH的应用程序? 不久前,我以为

  • 问题内容: 我的目标是让我的Flask应用程序启动后运行任意代码。这是我所拥有的: 理想情况下,我将能够做到这一点: 但是代码不会继续过去,因此永远不会运行。 我目前正在解决的解决方案是在与分开的线程中运行,创建一个设置此功能的函数: 然后获取)来向应用发出基本请求,以便运行“先请求之前”代码。这相当复杂,难以记录。我宁愿使用Flask中已经提供的参数,也可以使用装饰器,但据我所知,这两个都不存在