Python跨目录导包报错:ModuleNotFoundError: No module named 'config'
问题:Python跨目录模块导入失败(不使用PYTHONPATH或sys模块)
项目结构(含空__init__.py):
├── Dockerfile ├── app │ ├── __init__.py │ └── fct.py └── config ├── __init__.py └── settings.py
app/fct.py中的导入代码:
from config.settings import sum_fct
Dockerfile内容:
FROM python:3.8 WORKDIR /application COPY . . CMD ["python", "app/fct.py"]
运行容器时报错:
Traceback (most recent call last): File "app/fct.py", line 1, in <module> from config.settings import sum_fct ModuleNotFoundError: No module named 'config'
解决方案
问题出在脚本的运行方式:直接执行python app/fct.py时,Python会将app/目录(脚本所在目录)添加到sys.path中,而非项目根目录/application/,因此无法识别同级的config包。
无需修改PYTHONPATH或sys模块,只需调整Dockerfile的运行命令,采用模块方式启动:
修改Dockerfile的CMD指令为:
CMD ["python", "-m", "app.fct"]
使用-m参数时,Python会将当前工作目录(项目根目录/application)加入sys.path,此时config作为根目录下的包可被正常识别,导入语句能正常执行。
内容的提问来源于stack exchange,提问作者aizen
相关产品推荐
相关产品推荐

