在这个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启动它时,这个设置工作得很好
它找不到模块,因为它不知道要搜索哪个目录才能找到文件manage.py
尝试将manage.py信息添加到初始化文件。 从web导入管理
布兰登发表了评论,并this answer引导我找到了一个解决方案
管理.py
我没有使用
os.chdir
更改工作目录,而是使用sys.path
更改它。我现在可以使用我的服务器初始化文件了相关问题 更多 >
编程相关推荐