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

Python项目为何采用父目录含-、子目录换为_的命名结构?

关于Python包目录结构的疑问解答

核心结论

仓库的父目录(比如abc-def)和子包目录(abc_def)没有强制要求必须对应(仅把-替换为_),这只是社区里常见的命名惯例,而非硬性规则。

具体解释

  1. Python包目录的硬性要求
    子包目录的名称必须是Python合法标识符——也就是不能包含-、空格这类字符,只能用字母、数字、下划线_,否则会像你遇到的那样,执行import abc-def直接触发语法错误。所以包目录必须用abc_def这种合法名称。

  2. 仓库父目录与setup.py的name参数

    • 仓库的父目录名称完全是自由的,你可以随便命名,比如叫abc_package_repo或者其他名字都没问题,它不影响包的安装和导入。
    • setup.py里的name参数是这个包在PyPI上的显示名称,PyPI允许用-分隔(比如很多知名包scikit-learn、beautifulsoup4都是如此),所以很多项目会把仓库名和PyPI包名保持一致(用-),同时把包目录换成_格式的合法标识符,这只是为了让用户能直观关联起仓库和实际导入的包,属于约定俗成的做法,不是强制要求。
  3. 灵活的命名示例
    你完全可以这样设置:

    my-abc-package-repo
    |-abc_def
    |-setup.py
    

    setup.py里:

    setup(
        name="abc-def-package",
    )
    

    只要包目录abc_def是合法的导入名称,用户安装后依然可以正常import abc_def,完全不受仓库目录和PyPI包名的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:02:41