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

Python setuptools的find_namespace_packages的exclude参数排除子包不生效问题

解决方案

步骤1:修正exclude匹配规则

find_namespace_packages的单条规则xxx.b.internal_b仅会排除该包本身,不会匹配它的所有子级子包/模块,需要补充通配符规则覆盖子级内容:

from setuptools import setup, find_namespace_packages

# 可选:调试打印确认最终打包的包列表
packages = find_namespace_packages(
    where="pysrc",
    include=["xxx.*"],
    exclude=["xxx.b.internal_b", "xxx.b.internal_b.*"]
)
print("待打包包列表:", packages)

setup(
    name="xxx",
    package_dir={"": "pysrc"},
    packages=packages,
    setup_requires=["setuptools", "setuptools-git", "wheel"]
)

步骤2:清理本地构建缓存再打包

本地残留的build、dist、*.egg-info目录会导致新配置不生效,打包前先执行清理命令:

rm -rf build dist *.egg-info
python setup.py bdist_wheel

兜底方案:手动过滤包列表

如果上述规则仍不生效,可以直接对返回的包列表做前缀过滤,确保完全匹配排除规则:

from setuptools import setup, find_namespace_packages

all_packages = find_namespace_packages(where="pysrc", include=["xxx.*"])
# 过滤所有以xxx.b.internal_b开头的包
filtered_packages = [pkg for pkg in all_packages if not pkg.startswith("xxx.b.internal_b")]

setup(
    name="xxx",
    package_dir={"": "pysrc"},
    packages=filtered_packages,
    setup_requires=["setuptools", "setuptools-git", "wheel"]
)

额外说明

如果需要排除xxx.b.internal_b下的非py资源文件,可在setup参数中补充exclude_package_data配置:

setup(
    # 其余配置保持不变
    exclude_package_data={
        "xxx.b": ["internal_b/*", "internal_b/**/*"]
    }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:15:04