上传Python包至PyPi时console_scripts配置报错及资源文件打包问题
PyPI打包问题修复方案
1. 修复语法与入口配置报错
- 首先修正
setup.py中readme函数的缩进错误,同时指定文件编码避免跨系统读取乱码:
def readme(): with open('README.md', encoding='utf-8') as f: return f.read()
- 其次修复
console_scripts配置错误:console_scripts的入口规则为「命令名=包名.模块名:入口可调用对象」,你当前用.分隔模块和入口函数,会被错误识别为子包路径。如果orig/happy.py中的入口执行函数名为world,将配置行修改为:
'blah=orig.happy:world'
- 额外确认:
orig目录下需要存在空的__init__.py文件,否则setuptools无法将其识别为Python包,会触发打包失败。
2. 配置world.h5资源打包与加载
2.1 打包规则配置
你已经在setup中添加了include_package_data=True参数,接下来在项目根目录(与setup.py同级)新建MANIFEST.in文件,写入以下内容:
include orig/world.h5
该配置会将orig目录下的world.h5文件纳入发布包的打包列表。
2.2 资源加载逻辑修正
不要使用相对路径(如./world.h5)直接读取资源,包安装后的运行路径会发生变化,相对路径会找不到文件。请使用Python标准库importlib.resources读取包内资源,示例代码如下(适用于Python 3.7+):
from importlib import resources import h5py # 读取orig包下的world.h5资源 with resources.path("orig", "world.h5") as h5_file_path: with h5py.File(h5_file_path, "r") as f: # 此处编写你的文件读取逻辑 ...
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

