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

能否实现同一Python包下多子项目(如mycompany.parser)单独安装?

完全可以实现,用Python的可选依赖机制就行

你只需要把这些子模块(mycompany.parser、mycompany.database)放在同一个主包mycompany下,然后通过配置可选依赖组,让用户可以按需安装对应的功能。

1. 项目结构参考

先把代码组织成嵌套包的结构:

mycompany/
    __init__.py  # 可以是空文件,或者按需导出子模块内容
    parser/
        __init__.py
        # 你的parser相关代码文件
    database/
        __init__.py
        # 你的database相关代码文件
pyproject.toml  # 核心配置文件

2. 配置可选依赖

现在推荐用pyproject.toml来配置(替代旧的setup.py/setup.cfg),示例配置如下:

[project]
name = "mycompany"
version = "0.1.0"
# 自动发现所有子包
packages = ["mycompany", "mycompany.parser", "mycompany.database"]

# 定义可选依赖组
[project.optional-dependencies]
# 如果parser模块有额外依赖,写在这里;没有的话可以留空
parser = ["requests>=2.25.0"]
# database模块的额外依赖
database = ["sqlalchemy>=2.0.0"]
# 一键安装所有功能的组
all = ["mycompany[parser,database]"]

如果你的子模块不需要额外第三方依赖,可选依赖组可以写成空的:

[project.optional-dependencies]
parser = []
database = []
all = ["mycompany[parser,database]"]

3. 用户的安装方式

用户可以根据需求选择安装:

  • 仅安装mycompany.parser功能:
    pip install mycompany[parser]
    
  • 仅安装mycompany.database功能:
    pip install mycompany[database]
    
  • 安装全部功能:
    pip install mycompany[all]
    # 或者直接指定多个组
    pip install mycompany[parser,database]
    

额外说明

  • 主包mycompany本身会被默认安装,用户安装任意可选组后,都能直接导入对应的子模块(比如import mycompany.parser)。
  • 如果用旧的配置方式(setup.cfg),也可以通过options.extras_require字段来定义这些可选组,逻辑是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:01:35