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

Python中如何使用相对路径加载图标 适配可共享包场景

问题原因

你使用的相对路径是相对于Python进程的运行工作目录,而非qtprogram.py文件所在的目录,因此当你在其他目录运行主脚本时,路径定位就会失效。

解决方案

方案1:基于__file__变量拼接路径(兼容性最好)

该方案兼容所有Python版本,直接通过当前脚本文件的绝对路径定位同包内的资源:

import os
from PyQt5 import QtGui # 根据你的PyQt版本调整导入

# 获取当前qtprogram.py文件所在的绝对目录
current_script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接icon的绝对路径,自动适配不同操作系统的路径分隔符
icon_full_path = os.path.join(current_script_dir, "resource", "icon.png")
# 加载图标
icon = QtGui.QIcon(icon_full_path)

方案2:使用importlib.resources(Python 3.9+,更符合包分发规范)

该方案是Python官方推荐的包内资源访问方式,就算包被打包为压缩格式也能正常读取资源,避免路径拼接错误:

from importlib.resources import files
from PyQt5 import QtGui

# 定位mypackage.resource包下的icon.png
icon_path = files("mypackage.resource").joinpath("icon.png")
icon = QtGui.QIcon(str(icon_path))

分发注意事项

打包你的包时需要确保resource目录被包含在发布文件中,可通过如下配置实现:

  • 如果使用pyproject.toml,添加配置项include-package-data = true
  • 如果使用setup.py,添加参数include_package_data=True
  • 新增MANIFEST.in文件,写入recursive-include mypackage/resource *.png,明确指定要打包的资源文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:03