setup.py配置package_data无法打包dll文件如何解决
问题原因及解决方法
你配置失败的核心原因有三个:
- 路径分隔符不符合要求:setuptools的路径匹配统一使用正斜杠
/,你使用的Windows系统反斜杠\会导致规则匹配失效 package_data键名规则错误:该参数的键需要是Python包的导入名,而非文件系统路径,例如1_0目录下的sub_dir包的导入名为key.1_0.sub_dir,不是带反斜杠的文件路径- 配置项冲突:当你设置
include_package_data=True时,setuptools会优先读取MANIFEST.in文件的规则包含非py文件,你写的package_data规则会被覆盖不生效
以下是两种无需改动现有目录结构的解决方案:
方案一:修改setup.py配置(无需新增文件)
直接删除include_package_data=True配置,调整package_data的路径和键名即可:
setuptools.setup( name='my_project', packages=setuptools.find_packages(), # 删除原有的include_package_data=True行 package_data={ "key.1_0.sub_dir": ["_required.dll"], "key.1_1.sub_dir": ["_required.dll"], "key.1_2.sub_dir": ["_required.dll"] }, # 其他原有配置保持不变 ... )
如果想要更简洁的通配符写法,也可以统一写成:
package_data={ "key": ["*/sub_dir/_required.dll"] }
方案二:新增MANIFEST.in文件(无需修改原有setup.py逻辑)
如果你需要保留include_package_data=True配置,只需要在项目根目录(和setup.py同级)新建名为MANIFEST.in的文件,写入以下内容即可:
recursive-include key *.dll
该规则会自动包含key目录下所有后缀为dll的文件到打包产物中。
修改完成后重新执行python setup.py sdist --format=zip,生成的压缩包内就会包含对应的dll文件。
内容的提问来源于stack exchange,提问作者Francois
相关产品推荐
相关产品推荐

