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

将JSON文件加入MANIFEST.in后安装Python包报错求助

解决Python包sdist构建后pip安装报错的问题

我来帮你排查这个问题——这种情况我也碰到过几次,大概率是MANIFEST.in只指定了JSON文件,但没处理包内其他必要文件的包含逻辑,或者是setup.py里的配置没和MANIFEST.in配合好。下面是几个常见的解决方向:

1. 确保setup.py的配置正确关联包数据

如果你的JSON文件是在包目录下(而非项目根目录),只靠MANIFEST.in可能不够,需要在setup.py里明确配置包数据的关联:

from setuptools import setup, find_packages

setup(
    name="your_package_name",
    version="0.1.0",
    packages=find_packages(),  # 自动发现你的包目录
    package_data={
        # 指定你的包需要包含的JSON文件
        "your_package_name": ["file.json"],
    },
    include_package_data=True,  # 启用这个参数,让setuptools读取MANIFEST.in的内容
    # 其他配置(比如author、description等)...
)

这里的关键是include_package_data=True,它会让setuptools结合MANIFEST.in和package_data的配置,确保所有需要的文件都被打包。

2. 修正MANIFEST.in的内容,不要只包含单个文件

如果你的MANIFEST.in现在只有include file.json,很可能遗漏了其他必要文件(比如包的源码、README、LICENSE等),这会导致安装时因为缺少依赖文件报错。建议改成更完整的配置:

# 包含根目录的JSON文件(如果你的JSON在根目录)
include file.json
# 包含项目说明和许可证文件
include README.md LICENSE
# 递归包含包目录下的所有Python文件和JSON文件
recursive-include your_package_name *.py *.json

如果你的JSON文件是在包目录内部,要把路径写准确:include your_package_name/file.json。

3. 清理旧构建缓存,重新生成包

有时候旧的构建缓存会残留错误的文件配置,导致新生成的包有问题。执行以下命令彻底清理后重新构建:

# 删除旧的构建产物和缓存
rm -rf dist/ build/ *.egg-info
# 重新生成sdist包
python setup.py sdist
# 强制安装新生成的包
pip install dist/your_package-*.tar.gz --force-reinstall

4. 根据具体报错信息精准定位

如果上面的方法都没解决问题,一定要看pip安装时的具体错误日志:

  • 如果是ModuleNotFoundError:大概率是setup.py里的packages参数没正确指定你的包名,或者包目录结构不符合规范(比如缺少__init__.py)。
  • 如果是FileNotFoundError:检查MANIFEST.in里的文件路径是否和实际路径一致,或者setup.py的package_data配置是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:14:16