PyPI 谜题:-(连字符)和 . (点)分别用于什么情况?

PyPI puzzle: -(Hyphen) and . (Dot) are used in what cases respectively?

您可以在 PyPI 上看到名称类似于 django-pipelinedjango-localflavor 的项目,但您也可以看到 plone.scale.

前者使用-(连字符),后者使用. (点)。

如果这些项目不为人所知,那么它们可能是随意使用的,没有经过深思熟虑,但这两个项目都是众所周知的,但是使用不同的符号来分隔 PyPI 项目名称。

搜索 'PyPi Project Hyphen Dot' 没有找到任何相关信息。

连字符或点,这两种用法有区别吗?如果有,区别是什么?分别在什么情况下使用?

特别说明:这里指的是发布包的名称,不是导入包的名称,不能使用-.

. 是一种访问包子模块的方法。所以,plone 是父包,scale 是子模块。你可以在这里阅读它:https://docs.python.org/3/tutorial/modules.html#packages

如果您曾经使用过 os 模块,您通常会做如下事情:

import os
path = os.path.join("parent", "child")

这是一回事:https://docs.python.org/3/library/os.path.html

连字符只是多词名称的一部分,不用于任何类型的 package/submodule 关系。

plonedjango都是非常大的项目,所以开发者选择将项目的不同部分独立分发,这使得开发更容易,例如依赖关系的管理会更简单。

当没有命名空间包机制时,常使用前缀来表示分发包属于某个项目[^1],django是一个典型的例子,这种方式可行但需要很多体力劳动; plone 使用命名空间包机制并完全自动组合不同的分发包。 短)。

特别说明:PyPI 项目名称通常与包名称相对应,但是 django 发行版为了导入,与项目名称相比 [^2].


[^1]:Packaging namespace packages — Python Packaging User Guide:一个简单的替代方法是在所有发行版上使用前缀,例如 import mynamespace_subpackage_a(您甚至可以使用 import mynamespace_subpackage_a as subpackage_a 保留导入对象

[^2]:PEP 423 -- Naming conventions and recipes related to packaging | Python.org:举个例子,pipeline [13], python-pipeline [14] 和django-pipeline [15] 都发布了一个名为“管道”。所以安装其中两个会导致错误。如果这些发行版使用单个名称,则不会发生此问题。