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

制作Python Wheel包时如何排除子目录下指定子目录并拆分打包?

解决方案

首先要确保所有需要被识别为Python包的文件夹下都存在__init__.py(空文件即可),包括folder_2、folder_3、folder_4、folder_6(第一个包需要)和folder_5(第二个包需要)。


1. 制作包含folder_2(排除folder_5,保留folder_6)的Wheel包

修改setup.py如下,两种实现方式任选其一:

import setuptools

setuptools.setup(
    name="example-main",
    version="0.1.0",
    # 方式1:直接列出所有需要包含的包,精准控制范围
    packages=[
        "folder_2",
        "folder_2.folder_3",
        "folder_2.folder_4",
        "folder_2.folder_4.folder_6"
    ],
    # 方式2:用find_packages自动查找并排除目标路径
    # packages=setuptools.find_packages(exclude=["folder_2.folder_4.folder_5"]),
    package_dir={"": "."},  # 根目录指向setup.py所在路径
    include_package_data=True
)

如果需要包含非.py文件,需在同目录下创建MANIFEST.in文件,添加对应规则(示例:包含所有txt文件):

recursive-include folder_2 **/*.txt

执行打包命令生成Wheel:

python setup.py bdist_wheel
# 或使用pip命令
pip wheel .

2. 为folder_5单独制作Wheel包

创建独立的setup.py(可放在原目录),两种打包方式按需选择:

方式1:保留原包层级结构

包名仍为folder_2.folder_4.folder_5,适合需要保持原有导入路径的场景:

import setuptools

setuptools.setup(
    name="example-folder5",
    version="0.1.0",
    packages=["folder_2.folder_4.folder_5"],
    package_dir={"": "."},
    include_package_data=True
)

方式2:将folder_5作为独立包名

把folder_2/folder_4/folder_5下的内容打包为独立包(示例包名folder5),导入时直接用import folder5:

import setuptools

setuptools.setup(
    name="folder5",
    version="0.1.0",
    packages=["folder5"],
    package_dir={"folder5": "folder_2/folder_4/folder_5"},
    include_package_data=True
)

执行同样的打包命令即可生成对应Wheel包。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:35:41