Flask蓝图打包为Setuptools包后静态文件缺失问题求助
问题解决方法
问题根源
find_packages(where='src')仅识别包含__init__.py的Python包,你的templates目录无该文件,无法被当作包的一部分纳入安装。package_data的配置键必须是Python包名称(如updater.SWupdater),而非文件系统路径,你之前的路径格式完全错误。- 启用
include_package_data=True时,必须配合MANIFEST.in文件指定要包含的非Python文件,否则从GitHub源码直接安装时,setuptools不会自动捕获这些静态/模板文件。
具体解决步骤
1. 添加MANIFEST.in文件(核心)
在仓库根目录创建MANIFEST.in文件,明确指定要包含的模板和静态文件:
recursive-include src/updater/templates *.html recursive-include src/updater/templates/static *.css *.js *.jpg
这个文件会告诉setuptools在源码安装阶段,强制将这些路径下的指定文件打包进安装包。
2. 可选:调整目录结构适配Flask规范(更稳妥)
将模板和静态文件移至蓝图对应的SWupdater包内,符合Flask蓝图的常规资源存放结构:
src updater SWupdater __init__.py # 已有Python包标识文件 templates SWupdater *.html static js *.js css external_css *.css *.css images *.jpg
此时修改setup.py的package_data配置为:
setuptools.setup( packages=setuptools.find_packages(where='src', exclude=["*.tests", "*.tests.*"]), package_dir={"updater": "src/updater"}, zip_safe=False, include_package_data=True, package_data={ "updater.SWupdater": [ "templates/SWupdater/*.html", "static/css/*.css", "static/css/external_css/*.css", "static/js/*.js", "static/images/*.jpg" ] }, install_requires=[], classifiers=[], python_requires='>=3.7' )
3. 重新安装验证
将修改后的代码推送到GitHub,在虚拟环境中执行更新安装:
pip install --upgrade git+https://github.com/你的用户名/你的仓库名.git
安装完成后,可前往虚拟环境的site-packages/updater目录下,确认templates和static文件夹是否已被包含。
额外:Flask蓝图路径适配
如果调整了目录结构,初始化蓝图时需指定正确的资源路径:
from flask import Blueprint bp = Blueprint( 'swupdater', __name__, template_folder='templates', static_folder='static', static_url_path='/swupdater/static' )
内容的提问来源于stack exchange,提问作者rafaelHTML
相关产品推荐
相关产品推荐

