Django项目执行python setup.py sdist打包丢失manage.py等文件如何解决
核心问题原因
- 为什么sdist没包含manage.py、静态文件
sdist默认仅会包含setup.py中packages参数声明的Python子包下的.py文件,以及README、LICENSE这类标准项目文档。根目录下的manage.py不属于任何子包,templates、static目录下的非Python文件也不在默认打包列表里,所以会全部丢失。 - 之前配置失效的原因
include_package_data=True参数开启后,setuptools会完全读取MANIFEST.in的规则打包额外文件,同时会自动忽略data_files配置,你同时用了两个冲突的配置,导致自定义规则都没有生效。
正确配置方案
推荐使用MANIFEST.in的方案,规则更灵活不易出错:
- 保留
setup.py中的include_package_data=True配置,删除冲突的data_files配置 - 在项目根目录(和
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
相关产品推荐
相关产品推荐

