从外部文件启动 Flask 应用程序工厂(使用 create_app())
Launch Flask app factory (with create_app()) from external file
按照此 tutorial 对 Flask 堆栈进行 docker 化,我正在尝试从外部 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
导入的配置。我试图用 chdir 中可见的 manage.py.
来解决这个问题
我的环境变量是我从工作 Pycharm flask 设置中得到的:
FLASK_APP="myserver:create_app()"
我通过替换成功地通过了导入指令:
from myserver.config.config import Config
来自
from .config.config import Config
但整个项目包含以 from myserver
开头的导入
所以最后一个问题是:为什么myserver里面的初始化文件不能识别myserver folder/module?当我通过 PyCharm
laucnh 时,此设置工作正常
它找不到模块,因为它不知道要搜索什么目录才能找到文件manage.py。
尝试将 manage.py 信息添加到初始化文件。
从网络导入管理
Brandons 的评论和 让我找到了解决方案
manage.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
更改它。我现在可以使用我的服务器初始化文件
按照此 tutorial 对 Flask 堆栈进行 docker 化,我正在尝试从外部 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
导入的配置。我试图用 chdir 中可见的 manage.py.
我的环境变量是我从工作 Pycharm flask 设置中得到的:
FLASK_APP="myserver:create_app()"
我通过替换成功地通过了导入指令:
from myserver.config.config import Config
来自
from .config.config import Config
但整个项目包含以 from myserver
开头的导入所以最后一个问题是:为什么myserver里面的初始化文件不能识别myserver folder/module?当我通过 PyCharm
laucnh 时,此设置工作正常它找不到模块,因为它不知道要搜索什么目录才能找到文件manage.py。
尝试将 manage.py 信息添加到初始化文件。 从网络导入管理
Brandons 的评论和
manage.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
更改它。我现在可以使用我的服务器初始化文件