在windows上使用终端窗口cmd启动python+flask程序会包导入的错误,这是由于个人项目架构搭建的问题,这里把create_app函数放在了src目录的init.py文件下了,从而导致找不到src这个模块,在pycharm是可以直接运行的,但在此处不行,一般正常来说是可以的,在linux上使用虚拟环境运行是没有问题的。
init.py
import os
from flask import Flask
from flask_cors import CORS
def create_app():
app = Flask(__name__) # 创建1个Flask实例
PIC_FOLDER = os.path.join(app.root_path, 'static')
CORS(app, resources=r'/*')
# 3. register bluePrint
from com.callElevator import callElevator_blu
app.register_blueprint(callElevator_blu)
return app
main.py
from src import create_app
# 创建应用
app = create_app()
if __name__ == '__main__':
""" server host/port"""
connectHost = config.LOCAL_SERVER_HOST
connectPort = config.LOCAL_SERVER_PORT
""" start flask """
app.run(host=connectHost, port=connectPort, debug=True)
以上这样的导入方式在windows上是不行的
解决方法:直接在main.py文件中创建create_app这个函数,直接用即可。
main.py
def create_app():
app = Flask(__name__) # 创建1个Flask实例
PIC_FOLDER = os.path.join(app.root_path, 'static')
CORS(app, resources=r'/*')
# 3. register bluePrint
from com.callElevator import callElevator_blu
app.register_blueprint(callElevator_blu)
return app
logger = MyLogger(prepareLogging("smartHomeService", consts.LOG_DIR))
# 创建应用
app = create_app()
if __name__ == '__main__':
# conMQttClientThread = threading.Thread(target=connectMQttClient)
# conMQttClientThread.start()
connectMQttClient(logger)
""" server host/port"""
connectHost = config.LOCAL_SERVER_HOST
connectPort = config.LOCAL_SERVER_PORT
""" start flask """
app.run(host=connectHost, port=connectPort, debug=True)
可以都看到,项目使用.bat文件直接启动成功!
附上.bat脚本文件代码
title=smartHomeService-V1.0
color 0F
rem @echo off
cd %~dp0
set cd=%~dp0
set PY_HOME=D:\Install\Python3.5.3
set PYTHONPATH=D:\Install\Env\ElevDispatching\Lib\site-packages;
set PATH=%PATH%;%PY_HOME%;%PY_HOME%/Scripts;%cd%/Scripts
@echo on
cd src
python main.py