PyPI 谜题:-(连字符)和 . (点)分别在啥情况下使用?
Posted
技术标签:
【中文标题】PyPI 谜题:-(连字符)和 . (点)分别在啥情况下使用?【英文标题】:PyPI puzzle: -(Hyphen) and . (Dot) are used in what cases respectively?PyPI 谜题:-(连字符)和 . (点)分别在什么情况下使用? 【发布时间】:2021-11-12 19:03:23 【问题描述】:您可以在 PyPI 上看到名称为 django-pipeline
或 django-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】:
plone
和django
都是非常大的项目,所以开发者选择独立分发项目的不同部分,这样开发更容易,比如依赖关系的管理会更简单。
在没有命名空间包机制的情况下,通常会使用前缀表示分发包属于某个项目[^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#里类型初始化器和构造方法有啥区别 他们分别在啥情况下用?