【发布时间】:2019-04-20 03:35:03
【问题描述】:
我已经看到 PyPI 发行版名称以及带有数字的 python 包名称。例如flake8 就是一个示例,您还可以使用import flake8 导入。
根据 PyPI 和 PEP 标准,可以在包名称中包含数字吗?我知道出于语法原因,您不能以数字开头,但从标准的角度来看,中间或结尾是否可以?
【问题讨论】:
标签: python pip setuptools pypi
我已经看到 PyPI 发行版名称以及带有数字的 python 包名称。例如flake8 就是一个示例,您还可以使用import flake8 导入。
根据 PyPI 和 PEP 标准,可以在包名称中包含数字吗?我知道出于语法原因,您不能以数字开头,但从标准的角度来看,中间或结尾是否可以?
【问题讨论】:
标签: python pip setuptools pypi
首先,注意PyPI项目名和模块名是完全独立的;没有什么可以阻止您创建一个安装模块 bar 的包 foo,并且这两个名称遵循不同的政策来确定什么是有效的。
模块名称受 Python 语法限制为有效 identifiers。 In Python 2,这意味着它们必须由一个 ASCII 字母或下划线后跟零个或多个 ASCII 字母、数字和/或下划线组成。在 Python 3 中,添加了 Unicode,事情变得更加复杂,但我相信全 ASCII 模块名称仍然遵循相同的限制。
PyPI 上的项目名称(在PEP 508 等中指定)必须完全由 ASCII 字母、数字、.、- 和/或_ 组成,并且它们必须开始和结束用字母或数字。还有 a normalization policy 强制不区分大小写并将 .、- 和 _ 的运行视为相等,因此 foo-bar 和 FOO.BAR 被视为同一个项目。
另外,PEP 8 has a section on package and module names;它说:
模块应该有简短的全小写名称。如果提高可读性,可以在模块名称中使用下划线。 Python 包也应该有简短的全小写名称,但不鼓励使用下划线。
当用 C 或 C++ 编写的扩展模块附带提供更高级别(例如更面向对象)接口的 Python 模块时,C/C++ 模块具有前导下划线(例如
_socket)。
所以,是的,项目名称和模块名称中都可以有一个数字,项目名称甚至可以以一个开头!
【讨论】: