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

自定义Python包安装问题:含OCR用位图资源无法正常引入

解决Python自定义包中位图资源未被正确包含的问题

我之前也碰到过类似的情况——明明在MANIFEST.in里加了资源文件,安装后却找不到。结合你的目录结构和配置,问题主要出在setup.py的包数据配置上,以下是具体的解决步骤:

1. 完善setup.py的包数据配置

find_packages()默认只会识别.py文件,要让安装程序把位图这类资源也打包进去,需要在setup()函数里明确配置package_data,同时开启include_package_data=True:

from setuptools import setup, find_packages

setup(
    # 你的其他配置项(比如name、version、author等)
    packages=find_packages(exclude=["*.tests", "*.tests.*", "tests.*"]),
    # 指定要包含的包资源
    package_data={
        "mypackage": ["media/*.bmp"]  # 匹配mypackage/media下所有bmp文件
    },
    # 让setuptools自动处理MANIFEST.in和package_data的配置
    include_package_data=True,
)

这里的package_data是一个字典,键是你的包名(mypackage),值是该包下需要包含的文件路径模式,用通配符可以更灵活地匹配同类型文件。

2. 确认MANIFEST.in的正确性

你的MANIFEST.in内容是include mypackage/media/template.bmp,这个路径是对的(相对于setup.py所在的根目录),如果想匹配该目录下所有位图,也可以改成:

include mypackage/media/*.bmp

不过要注意,只有在setup.py里设置了include_package_data=True时,MANIFEST.in里的配置才会被安装程序采纳,否则即使写了也不会生效。

3. 用正确的方式读取包内资源

就算资源文件被正确安装了,如果在module1.py里用相对路径读取(比如./media/template.bmp),在包被安装到site-packages后大概率会找不到文件。推荐用Python标准库的importlib.resources(Python 3.7+)来安全读取资源:

# 在module1.py中读取template.bmp
from importlib.resources import read_binary, files

# 如果需要二进制内容
template_bytes = read_binary("mypackage.media", "template.bmp")

# 如果需要文件路径
template_file_path = files("mypackage.media").joinpath("template.bmp")

如果你需要兼容Python 3.6及以下版本,可以用pkg_resources:

import pkg_resources

template_path = pkg_resources.resource_filename("mypackage", "media/template.bmp")

4. 验证安装结果

安装包后,可以去Python的site-packages目录下找到mypackage,检查media文件夹里是否存在template.bmp;或者用pip show mypackage查看安装路径,再手动确认文件是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:30:25