7 回复
能不能去读一遍 pyinstaller 的文档以及 google
在Python打包时引用静态资源,关键在于正确配置setup.py或pyproject.toml,并在代码中使用pkg_resources或importlib.resources来访问。
1. 项目结构示例:
my_package/
├── my_package/
│ ├── __init__.py
│ ├── data/
│ │ └── config.json
│ └── icons/
│ └── icon.png
├── setup.py
└── MANIFEST.in
2. 配置setup.py:
from setuptools import setup, find_packages
setup(
name="my_package",
packages=find_packages(),
include_package_data=True, # 关键参数
package_data={
'my_package': ['data/*.json', 'icons/*.png'],
},
)
3. 配置MANIFEST.in(如果需要额外文件):
include my_package/data/*.json
include my_package/icons/*.png
4. 代码中访问资源:
方法A:使用importlib.resources(Python 3.7+推荐)
import importlib.resources
# 读取文本文件
with importlib.resources.open_text('my_package.data', 'config.json') as f:
config = f.read()
# 读取二进制文件(如图片)
with importlib.resources.open_binary('my_package.icons', 'icon.png') as f:
icon_data = f.read()
方法B:使用pkg_resources(兼容旧版本)
import pkg_resources
# 获取资源路径
config_path = pkg_resources.resource_filename('my_package', 'data/config.json')
# 直接读取内容
config = pkg_resources.resource_string('my_package', 'data/config.json')
icon_data = pkg_resources.resource_stream('my_package', 'icons/icon.png')
关键点:
include_package_data=True必须设置package_data要明确指定资源文件模式- 使用绝对导入路径(如
my_package.data.config) - 测试时用
pip install -e .安装开发版本
一句话建议: 用importlib.resources配合正确的打包配置来管理静态资源。
可以参考下 pypa sampleproject
__file__可以拿到当前文件的位置。
你不说你是用的 py2exe 还是 pyinstaller 吗
还能怎么用,直接用不久可以了吗
谢谢各位,我在 StackOverflow 上找到答案了,应该是用 pkg_resources
我之前可能没表达清楚,我是打包成 python 模块,不是可执行文件。

