V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
AndyAO
V2EX  ›  问与答

难题:在 Python 中分发命名空间包的两种目录结构有什么区别?

  •  1
     
  •   AndyAO · 2021-09-18 14:27:29 +08:00 · 505 次点击
    这是一个创建于 949 天前的主题,其中的信息可能已经有所发展或是发生改变。

    注意到在 Python 中分发命名空间包的时候有两种目录结构。

    例如,django 中有这样的分发包django-localflavor,这种结构是扁平的;而 plone 中则有这样的分发包plone.scale,这种结构则是有层次的,文件夹是plone/scale

    那么这两种分发命名空间包的目录结构和命名方式有什么区别?它们各有什么优劣?该如何选择呢?

    在这个文档上有提到使用-的分发方式,即mynamespace-subpackage-a,但后者好像没有提到。


    脚注:如果你好像见过这个问题,那么这个感觉是没错的,之前那个类似的话题过分强调名称了,结果很多回答都导向了错误的地方。

    2 条回复    2021-09-19 11:47:32 +08:00
    ipwx
        1
    ipwx  
       2021-09-18 15:24:45 +08:00
    flask 一度从 flask.ext.XXX 命名空间改成了 flask_XXX
    AndyAO
        2
    AndyAO  
    OP
       2021-09-19 11:47:32 +08:00
    `plone`和`django`都是很大的项目,所以开发者选择将项目的不同部分独立分发,这样开发起来会更方便,例如,依赖的管理会更简单。

    在没有命名空间包机制的时候,往往会采用前缀来表明分发包属于某个项目,`django`就是典型的例子,这种方式虽然能用,但是需要很多手动的工作;`plone`则使用了命名空间包的机制,将不同的分发包进行组合是完全自动化的。

    特别提示:PyPI 项目的名称往往和包名是对应的,但是`django`的分发包,为了导入更方便,其包名相比项目名来说是去掉前缀的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1542 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 17:12 · PVG 01:12 · LAX 10:12 · JFK 13:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.