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

Django项目执行python setup.py sdist打包丢失manage.py等文件如何解决

核心问题原因

  1. 为什么sdist没包含manage.py、静态文件
    sdist默认仅会包含setup.py中packages参数声明的Python子包下的.py文件,以及README、LICENSE这类标准项目文档。根目录下的manage.py不属于任何子包,templates、static目录下的非Python文件也不在默认打包列表里,所以会全部丢失。
  2. 之前配置失效的原因
    include_package_data=True参数开启后,setuptools会完全读取MANIFEST.in的规则打包额外文件,同时会自动忽略data_files配置,你同时用了两个冲突的配置,导致自定义规则都没有生效。

正确配置方案

推荐使用MANIFEST.in的方案,规则更灵活不易出错:

  1. 保留setup.py中的include_package_data=True配置,删除冲突的data_files配置
  2. 在项目根目录(和setup.py同级)新建MANIFEST.in文件,根据你的项目路径写入对应规则:
# 包含根目录manage.py
include manage.py
# 递归包含所有模板文件(如果templates在my_app子目录下,改为 recursive-include my_app/templates *.html)
recursive-include templates *.html
# 递归包含所有静态资源文件(如果static在my_app子目录下,改为 recursive-include my_app/static *.css *.js *.png)
recursive-include static *.css *.js *.jpg *.png

配置完成后重新执行python setup.py sdist即可打包所有预期文件,执行tar --list -f .\dist\my_project_name-1.0.tar.gz验证即可看到所有文件。


sdist和bdist_wheel的区别

  • sdist生成的是源码包,包含所有项目源码和配置的额外文件,用户安装时需要先解压再执行编译安装流程,速度较慢
  • bdist_wheel生成的是预构建的wheel包,纯Python项目的wheel包无需编译,用户可以直接解压安装,速度更快
    你之前两次执行结果一致,是因为两个命令共用同一套打包规则,配置错误的情况下缺省的文件都会缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:54:03