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

2021-09-18 14:27:29 +08:00
 AndyAO

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

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

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

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


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

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

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

特别提示:PyPI 项目的名称往往和包名是对应的,但是`django`的分发包,为了导入更方便,其包名相比项目名来说是去掉前缀的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802764

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX