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

含Robot与Python子包的setup.cfg配置问题:安装后包为空

问题分析与解决方案

你的setup.cfg配置存在三个核心问题,导致安装后包内容为空:

  1. Tests目录的排除路径错误:[options.packages.find]中的exclude是相对于where=src的路径,而你的Tests目录实际在src/mainpkg/Tests,而非src/Tests,所以原配置无法匹配到要排除的目录。
  2. 缺少Python包标识文件:setuptools默认需要__init__.py来识别目录为Python包(PEP 420的命名空间包虽无需此文件,但显式添加更兼容稳定),你的子目录没有该文件,导致setuptools无法识别这些子包。
  3. 非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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:15:59