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

2023年Setuptools包命名:用连字符还是下划线?

构建Python包:连字符还是下划线?

首先得搞清楚两个核心概念,别搞混:

  • 模块/包名:就是你代码里import的那个名字,比如import abc_def里的abc_def。
  • 分发版名称:就是PyPI上显示的名字、生成的whl包名,比如abc-def-0.1.0-py310.whl里的abc-def。

2023年的明确规范和实践

  1. 模块名必须用下划线
    Python的标识符规则不允许用连字符,连字符会被当成减号,所以你的代码目录、包文件夹名必须用下划线(比如abc_def),不然根本没法正常导入。Setuptools警告的就是这个——别把连字符用在模块/包的实际目录和导入名里。

  2. 分发版名称推荐用连字符
    PyPI的命名规范里,连字符是标准的分隔符,用户搜索和安装时更习惯这种写法。而且pip和setuptools会自动处理下划线和连字符的等价转换:你用pip install abc-def和pip install abc_def效果完全一样,工具会自动把这俩当成同一个包。

你遇到的情况是正常的

你把模块名改成下划线后,执行pip install -e .时工具自动把下划线转成连字符生成whl包,这是工具的正常兼容行为,完全符合规范,不用慌。

总结实践方案

  • 代码里的模块/包目录、导入名:统一用下划线(比如abc_def),保证语法合法。
  • pyproject.toml里的name字段:写连字符(比如abc-def)就行,要是你写了下划线,工具也会自动转成连字符生成包,两种写法都没问题。
  • 不用纠结转换的问题,这是工具为了兼顾Python语法和PyPI命名习惯做的兼容,属于正常操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:28:13