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

PyGame游戏引擎PyPI打包后图片加载失败及资源配置求助

解决PyGame引擎打包后资源文件加载问题

一、确认图片是否随包下载

首先检查你的打包配置文件(setup.py 或 pyproject.toml),必须确保data目录下的图片被包含进安装包:

1. 若使用setup.py

添加package_data配置,指定要包含的资源文件:

from setuptools import setup, find_packages

setup(
    name="pyEngine2D",
    version="0.1.0",
    packages=find_packages(),
    # 配置包资源
    package_data={
        "pyEngine2D": ["data/*.png"]  # 匹配data目录下所有png文件
    },
    include_package_data=True,
    # 其他依赖配置
    install_requires=[
        "pygame>=2.0.0"
    ]
)

2. 若使用pyproject.toml

添加如下配置:

[tool.setuptools.package-data]
pyEngine2D = ["data/*.png"]

[tool.setuptools]
include-package-data = true

配置完成后重新打包上传TestPyPI,安装后可前往Python的site-packages目录找到pyEngine2D/data,检查是否存在null.png,确认资源是否被正确打包。

二、修改图片加载代码

不能直接使用相对路径("pyEngine2D/data/null.png"),因为安装后包的位置不在当前工作目录,需要通过包的实际安装路径获取资源:

方法1:使用importlib.resources(Python 3.9+推荐)

修改ScreenInit类中的图标加载代码:

import importlib.resources
import pygame

class ScreenInit:
    def __init__(self, width, height, fps, scale, icon_path, title):
        self.icon = icon_path
        self.title = title
        # 其他初始化代码...
        
        if self.icon:
            # 通过包名和资源路径获取绝对路径
            with importlib.resources.path("pyEngine2D", self.icon) as abs_icon_path:
                pygame_icon = pygame.image.load(str(abs_icon_path))
                pygame.display.set_icon(pygame_icon)

调用时只需传资源相对于包的路径:

screen = ScreenInit(360, 480, 60, 100, "data/null.png", "MyGame")

方法2:使用pkg_resources(兼容旧Python版本)

确保已安装setuptools(一般默认已安装),然后修改代码:

import pkg_resources
import pygame

class ScreenInit:
    def __init__(self, width, height, fps, scale, icon_path, title):
        self.icon = icon_path
        self.title = title
        # 其他初始化代码...
        
        if self.icon:
            # 拼接包名和资源路径获取绝对路径
            abs_icon_path = pkg_resources.resource_filename("pyEngine2D", self.icon)
            pygame_icon = pygame.image.load(abs_icon_path)
            pygame.display.set_icon(pygame_icon)

调用方式同样改为:

screen = ScreenInit(360, 480, 60, 100, "data/null.png", "MyGame")

三、额外检查

  • 确保data目录在pyEngine2D包的根目录下,目录结构正确:
    pyEngine2D/
    ├── __init__.py
    ├── data/
    │   └── null.png
    └── 其他模块文件...
    
  • 重新打包时先清理旧的构建文件(比如build/、dist/、*.egg-info目录),避免缓存影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:20:18