CMD/SHELL命令执行python程序报错无法找到自定义项目名模块ModuleNotFoundError: No module named 'XXX' 解决方法

在Kubernetes中部署PythonWeb项目时,因路径配置不当导致的ModuleNotFoundError问题及解决方案。文章详细介绍了如何在Dockerfile中正确设置PYTHONPATH环境变量,以确保容器内的Python能够识别到项目模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说下背景,python web项目,在本地 IDE执行正常,然后CI/CD编译打镜像,在K8S中想要把项目docker容器拉起来,报错:

[root@SY613596 ~]# kubectl -n easyreport logs -f wasp-api-674fd9d84b-g7f2q
Traceback (most recent call last):
File "/app/wasp/main.py", line 3, in <module>
from wasp.logger import logger
ModuleNotFoundError: No module named 'wasp'

这个wasp是我的app名字,即项目名称,找不到,首先我想到的就是路径问题,因为这个问题之前遇到过类似的,见我另外一篇文章:命令行执行.py文件通过flask-script初始化数据库提示ModuleNotFoundError: No module named ‘XXX’ 解决方法

那次是自己主动在CMD中去执行一个单独的py文件,与主程序基本独立的,原因就在于在ide中执行python程序,都已经在默认的项目路径中,所以直接执行是没有问题的。但是在cmd中执行程序,所在路径是python的搜索路径,如果涉及到import引用就会报类似ImportError: No module named xxx这样的错误,解决方法:
在报错的模块中添加:
import sys
import os
curPath = os.path.abspath(os.path.dirname(file))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)

当时,这样就可以解决了。

这次的问题是在主程序main.py中居然就找不到,那我配置的路径去哪里了?!一脸懵逼
在k8s中的目录设置肯定是在dockerfile中声明的吖,赶紧去dockerfile中找设置目录的命令去,一查不要紧,原来声明语句在我一次清理dockerfile中的环境变量的时候被我不小心一并删除了,mlgb的心里狠狠的骂了自己一下!赶紧补上:

# /bin/dockerfile
ENV PYTHONPATH=/app

本质上这个坑和上次坑的原理是一致的,就是CMD下的路径需要主动去配置,而IDE中默认它已经帮你配好了(当然有些情况也还是要主动去配置下)

一个坑,摔了两次,囧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值