python项目之直接运行报错ModuleNotFoundError: No module named 'common'
参考:https://blog.csdn.net/xccxxy/article/details/116238747(一触即发)
@
反省
好吧,下午浪费了快三个小时去解决这么个bug,也不能说是个bug其实就是个只是盲区,不断尝试不断增长见识总算搞出来了。
背景和解决过程
我有写一个flask项目,然后写是写好了,并且也通过测试了,现在想部署到服务器,因为之前一直是用的Pycharm点直接运行这样子走的,没啥问题,现在上服务器了,意识到不像本地开发那么简单了,稍微了解了一下可以用Gunicorn部署,但是我想到好像本地需要先把flask启动起来吧,总结在【flask核心】,然后我的这个其实是个定时任务,不是写接口跟flask无关,就是想要定时执行我写的一个方法,然后总结在【定时任务】,最后自己通过命令调用我这个python文件嘛,但是一直报错 No module named 'common'
,为此我花了100点积分去问chatgpt,各种形容我遇到的问题,最后还没有给我解决掉,最后还是看这个老哥的blog才有所感悟,最终解决的,总结在【最终解决】
flask核心
自己尝试了下发现核心就是
app = Flask(__name__)
app.run(host="0.0.0.0", port=8989, debug=True)
这个调整好了,你基本就可以访问你的这个文件上写的接口了
定时任务
from apscheduler.schedulers.background import BackgroundScheduler
if __name__ == '__main__':
# 创建后台执行的 schedulers
scheduler = BackgroundScheduler()
# 添加调度任务
# 调度方法为 timedTask,触发器选择 interval(间隔性),间隔时长为 2 秒(seconds,hours)
scheduler.add_job(newestMovieWork, 'interval', seconds=10)
# 启动调度任务
scheduler.start()
while True:
print(time.time())
time.sleep(5)
最终解决
跟GPT对讲了好多轮,甚至还列了我整个项目架构给他,给我的咨询如下
common_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
sys.path.append(common_dir)
以上的都不行,说是把上上级的common加入到python解释路径中,最后尝试了把我的脚本拎到最外面,自己再写死路径到sys中,如sys.path.append("D:\work\py\work-flask\script\test.py")
执行,哎!可以了,
最终修改成
common_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
sys.path.append(common_dir) // 这边是 D:\work\py\work-flask
from common.mysql_operate import db
小结
为啥from common.mysql_operate import db
这样子不行,因为我之前都是将到common文件夹加到解释器的路径中,那再从common中找到肯定不行啊。
还有就是如果GPT感觉问不出来了就可以试试bing看看,说不定有新思路呢。