注意到在 Python 中分发命名空间包的时候有两种目录结构。
例如,django 中有这样的分发包django-localflavor
,这种结构是扁平的;而 plone 中则有这样的分发包plone.scale
,这种结构则是有层次的,文件夹是plone/scale
。
那么这两种分发命名空间包的目录结构和命名方式有什么区别?它们各有什么优劣?该如何选择呢?
在这个文档上有提到使用-
的分发方式,即mynamespace-subpackage-a
,但后者好像没有提到。
脚注:如果你好像见过这个问题,那么这个感觉是没错的,之前那个类似的话题过分强调名称了,结果很多回答都导向了错误的地方。
1
ipwx 2021-09-18 15:24:45 +08:00
flask 一度从 flask.ext.XXX 命名空间改成了 flask_XXX
|
2
AndyAO OP `plone`和`django`都是很大的项目,所以开发者选择将项目的不同部分独立分发,这样开发起来会更方便,例如,依赖的管理会更简单。
在没有命名空间包机制的时候,往往会采用前缀来表明分发包属于某个项目,`django`就是典型的例子,这种方式虽然能用,但是需要很多手动的工作;`plone`则使用了命名空间包的机制,将不同的分发包进行组合是完全自动化的。 特别提示:PyPI 项目的名称往往和包名是对应的,但是`django`的分发包,为了导入更方便,其包名相比项目名来说是去掉前缀的。 |