含Robot与Python子包的setup.cfg配置问题:安装后包为空
问题分析与解决方案
你的setup.cfg配置存在三个核心问题,导致安装后包内容为空:
- Tests目录的排除路径错误:
[options.packages.find]中的exclude是相对于where=src的路径,而你的Tests目录实际在src/mainpkg/Tests,而非src/Tests,所以原配置无法匹配到要排除的目录。 - 缺少Python包标识文件:setuptools默认需要
__init__.py来识别目录为Python包(PEP 420的命名空间包虽无需此文件,但显式添加更兼容稳定),你的子目录没有该文件,导致setuptools无法识别这些子包。 - 非Python文件未被纳入打包:
include_package_data=True需要配合MANIFEST.in文件指定要包含的非Python文件(如.robot),否则这类文件不会被打包分发。
具体修改步骤
1. 修正setup.cfg的排除规则
将[options.packages.find]中的exclude改为匹配所有子目录下的Tests文件夹:
[options] package_dir = = src packages = find: include_package_data = True [options.packages.find] where = src exclude = */Tests
*/Tests会匹配src下任意层级的Tests目录,确保后续新增子包中的Tests也会被自动排除。
2. 添加__init__.py文件
在所有需要被识别为Python包的目录下创建空的__init__.py文件,目录结构变为:
root ├── setup.cfg └── src ├── mainpkg │ ├── __init__.py │ ├── common_package │ | ├── __init__.py │ | └──Robot │ | ├── __init__.py │ | └── common.robot │ ├── databases_package │ | ├── __init__.py │ | ├──Python │ | | ├── __init__.py │ | | └── databases.py │ | └──Robot │ | ├── __init__.py │ | └── databases.robot │ └── Tests │ ├── commonTests.robot │ └── databaseTests.robot
这些空文件仅用于告知setuptools该目录是Python包的一部分,无需写入任何代码。
3. 创建MANIFEST.in文件
在项目根目录创建MANIFEST.in文件,指定要包含的非Python文件:
include src/mainpkg/**/*.robot include src/mainpkg/**/*.py
该规则会递归包含src/mainpkg下所有.robot和.py文件,确保新增的子包文件也能自动被纳入打包。
完成以上修改后,重新执行打包或安装命令,你的库内容就会被正确包含,且Tests目录会被排除在外。
内容的提问来源于stack exchange,提问作者Wonko the Sane
相关产品推荐
相关产品推荐

