Docker容器运行报错:无法找到自定义Python函数模块functions
解决Docker容器中FastAPI项目模块导入错误
问题原因
本地Mac环境运行时,Python默认将执行脚本所在的目录添加到sys.path中,所以main.py能直接找到同目录的functions.py;但在Docker容器中,若运行脚本时的工作目录或PYTHONPATH未包含/code/app,Python无法定位到该模块,就会抛出ModuleNotFoundError。
解决方案
方案1:使用相对导入修改代码
将main.py中的导入语句改为相对导入形式:
from .functions import functionname
注意:此时需以模块方式运行main.py,在Dockerfile中对应的启动命令应为:
WORKDIR /code CMD ["python", "-m", "app.main"]
方案2:手动添加模块路径到sys.path
在main.py的最开头添加以下代码,强制将脚本所在目录加入Python的模块搜索路径:
import sys from pathlib import Path # 将当前文件所在目录添加到sys.path sys.path.append(str(Path(__file__).parent))
修改后无需调整Docker命令,保持原有的导入语句即可正常运行。
方案3:通过Dockerfile配置PYTHONPATH
在Dockerfile中添加环境变量,指定Python的模块搜索路径包含/code/app:
ENV PYTHONPATH=/code/app
这样Python会自动搜索/code/app下的模块,原导入语句from functions import functionname无需修改。
内容的提问来源于stack exchange,提问作者Daniel C
相关产品推荐
相关产品推荐

