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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:24:12