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

如何配置pyproject.toml使共享Django应用支持pip安装?

解决Django共享应用pip安装的多顶级包错误

问题原因

你的仓库采用扁平结构,根目录下存在多个被识别为顶级Python包的目录(如templatetags、tests,甚至可能包含migrations、management),同时根目录自身也是一个包(存在__init__.py)。setuptools的扁平布局模式不允许同时存在多个顶级包,因此触发安装错误。

另外,当前结构也不符合Django应用的标准规范(Django应用的templatetags、static、templates应作为应用包的子目录),会导致Django无法正确加载资源。

解决方案

方案1:重构目录结构(推荐,符合Django规范)

将所有应用代码迁移到一个单独的子包目录中,调整后结构如下:

|- .gitignore
|- pyproject.toml
|- README.md
|- shared_django_app/
    |- __init__.py
    |- models.py
    |- views.py
    |- static/
        |- shared-django-app/
            |- # 静态文件
    |- templates/
        |- shared-django-app/
            |- # 模板文件
    |- templatetags/
        |- __init__.py
        |- # 自定义模板标签文件
    |- tests/
        |- __init__.py
        |- # 测试文件

然后更新pyproject.toml配置:

[build-system]
requires = ["setuptools"]

[project]
name = "django-shared-app"
version = "1.0.0"
# 指定依赖Django,确保安装时自动拉取兼容版本
dependencies = [
    "Django>=3.2"
]

[packages]
# 自动查找所有Python包(这里只会找到shared_django_app)
packages = [find_packages()]

# 配置要包含的非Python文件(静态资源、模板等)
[tool.setuptools.package-data]
shared_django_app = [
    "static/shared-django-app/**/*",
    "templates/shared-django-app/**/*",
    "templatetags/**/*"
]

# 排除测试目录(可选,避免将测试代码打包到发布版本)
[tool.setuptools.exclude-package-data]
shared_django_app = ["tests/**/*"]

方案2:不修改目录结构,强制指定包范围

如果暂时不想调整目录结构,可以修改pyproject.toml,明确只将根目录作为单个顶级包,并指定需要包含的资源文件:

[build-system]
requires = ["setuptools"]

[project]
name = "django-shared-app"
version = "1.0.0"
dependencies = [
    "Django>=3.2"
]

[packages]
# 只将根目录作为顶级包
packages = ["."]

# 配置包数据,包含静态资源、模板和模板标签
[tool.setuptools.package-data]
"." = [
    "static/shared-django-app/**/*",
    "templates/shared-django-app/**/*",
    "templatetags/**/*",
    "models.py",
    "views.py"
]

# 排除测试目录和无关文件
[tool.setuptools.exclude-package-data]
"." = ["tests/**/*", ".gitignore", "README.md"]

验证安装

修改配置后,重新执行安装命令:

pip install git+ssh://git@bitbucket.org:<org>/shared-django-app.git@dev

安装完成后,在Django项目的INSTALLED_APPS中添加shared_django_app(方案1)或django-shared-app(方案2,注意包名对应),即可正常使用该共享应用的功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:16:39