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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:36:04