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
相关产品推荐
相关产品推荐

