You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python导入子目录模块时无法访问其相对路径引用的图片如何解决

错误原因

代码中使用的./pictures/pic1.png属于相对当前工作目录的路径,Python启动脚本时的工作目录默认为启动文件(main.py)所在的项目根目录,因此运行时实际查找的路径为project/pictures/pic1.png,和资源实际存储的project/subfolder/pictures/pic1.png不符,因此抛出找不到文件的错误。

可用解决方案

方案1:基于当前模块路径动态拼接(最推荐)

利用Python模块自带的__file__属性获取当前mod1.py的真实存储路径,再拼接同目录下的资源路径,不受主程序启动位置影响,只要mod1.py和pictures文件夹的相对位置不变就可以正常访问:

os.path版本(兼容所有Python3版本)

import os
from PIL import Image

# 取得当前mod1.py所在的文件夹绝对路径
current_mod_path = os.path.dirname(os.path.abspath(__file__))
# 拼接得到图片完整路径
target_pic_path = os.path.join(current_mod_path, "pictures", "pic1.png")
image = Image.open(target_pic_path)

pathlib版本(Python3.4及以上版本支持,语法更简洁)

from pathlib import Path
from PIL import Image

# 取得当前mod1.py所在的文件夹绝对路径
current_mod_path = Path(__file__).resolve().parent
# 拼接得到图片完整路径
target_pic_path = current_mod_path / "pictures" / "pic1.png"
image = Image.open(target_pic_path)

方案2:基于项目根目录的相对路径拼接

如果要求必须使用从项目根目录开始的相对路径,可以按如下方式实现:

import os
from PIL import Image

# 从mod1.py的位置向上退一级,得到项目根目录路径
root_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 按根目录起始的相对路径拼接
target_pic_path = os.path.join(root_path, "subfolder", "pictures", "pic1.png")
image = Image.open(target_pic_path)

内容的提问来源于stack exchange,提问作者Lolman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:21:04