PyPI打包Django应用时未包含templates目录的问题求助
解决Django应用打包PyPI时templates目录缺失的问题
核心问题排查
你遇到的templates目录未被打包的问题,大概率是MANIFEST.in路径配置错误或者setup.py未正确声明需要包含的非Python文件导致的,以下是具体修复步骤:
1. 修正MANIFEST.in的路径匹配
你的MANIFEST.in写的是recursive-include templates *.html schema.js,但如果templates是属于包内的子目录(比如在rlocker_expiry_addon/下面),路径需要指定完整的包前缀,否则build工具找不到对应目录。修改后的MANIFEST.in内容应为:
recursive-include rlocker_expiry_addon/templates *.html schema.js
确保MANIFEST.in文件和你的setup.py放在同一项目根目录下。
2. 在setup.py中明确配置资源文件
仅靠MANIFEST.in有时候不够,需要在setup.py里显式声明要包含的非代码文件,有两种方式:
方式一:启用自动包含(推荐)
在setup()函数中添加include_package_data=True,让setuptools自动读取MANIFEST.in的配置来包含文件:
from setuptools import setup, find_packages setup( name="rlocker-expiryaddon", version="0.1.0", packages=find_packages(), include_package_data=True, # 关键配置 # 其他配置项... )
方式二:手动指定package_data
如果自动包含不生效,可以直接在setup()里指定具体的文件路径:
setup( # 其他配置项... package_data={ # 键是你的包名,值是要包含的文件模式 'rlocker_expiry_addon': [ 'templates/**/*.html', 'templates/**/schema.js', ], }, # 确保packages用find_packages()正确识别所有子包 packages=find_packages(), )
3. 清理旧构建文件,重新打包
先删除之前的构建产物,避免缓存影响:
rm -rf dist/ build/ *.egg-info/
然后重新执行构建:
python -m build
构建完成后,解压生成的.whl或.tar.gz文件,检查templates目录是否已经被包含在内。
额外验证
安装本地构建的包测试:
pip install dist/rlocker_expiryaddon-0.1.0-py3-none-any.whl
然后在Python环境里检查包的安装路径,确认templates目录存在。
内容的提问来源于stack exchange,提问作者JimShapedCoding
相关产品推荐
相关产品推荐

