制作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
相关产品推荐
相关产品推荐

