PyPI 谜题:-(连字符)和 . (点)分别在啥情况下使用?

Posted

技术标签:

【中文标题】PyPI 谜题:-(连字符)和 . (点)分别在啥情况下使用?【英文标题】:PyPI puzzle: -(Hyphen) and . (Dot) are used in what cases respectively?PyPI 谜题:-(连字符)和 . (点)分别在什么情况下使用? 【发布时间】:2021-11-12 19:03:23 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

绝对没有区别。这只是名称中的另一个字母。 【参考方案1】:

. 是一种访问包子模块的方法。所以,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

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

【讨论】:

感谢您的回答,但我觉得这里可能有一些误解:我已经明确表示它是指PyPI项目的名称,而不是模块和导入包。 我认为两者兼而有之。 PyPI 项目是其父包为plone 的模块的名称。就像path 模块是os 的子模块一样。 例如:python.org/dev/peps/pep-0423/…【参考方案2】:

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]都分发了一个名为“pipeline”的包或模块。因此安装其中两个会导致错误。如果这些发行版使用单一名称,则不会发生此问题。

【讨论】:

以上是关于PyPI 谜题:-(连字符)和 . (点)分别在啥情况下使用?的主要内容,如果未能解决你的问题,请参考以下文章

日志采集系统flume和kafka有啥区别及联系,它们分别在啥时候

PyTorch 深度剖析:并行训练的 DP 和 DDP 分别在啥情况下使用及实例

C#里类型初始化器和构造方法有啥区别 他们分别在啥情况下用?

<fstream> 与 <fstream.h> 分别在啥情况下使用?

dns可以使用tcp与udp两种协议,分别在啥情况下使用

谜题16:行打印程序