在 python 存储库名称和包名称中使用 hyphen/dash
Using hyphen/dash in python repository name and package name
我正在尝试使我的 git 存储库可 pip 安装。为此,我正在重组回购协议以遵循正确的约定。通过查看其他存储库,我的理解是我应该将所有源代码放在一个与存储库名称相同的包中。例如。如果我的存储库名为 myrepo
,那么源代码将全部放入一个也称为 myrepo
.
的包中
为了便于阅读,我的存储库中有一个连字符:例如my-repo
。所以如果我想为它制作一个同名的包,它也会有一个连字符。 In this tutorial 它说 "don't use hyphens" 用于 python 包名称。但是,我已经看到一些成熟的软件包,例如 scikit-learn
,它们的名称中包含连字符。不过我注意到的一件事是,在 scikit-learn
存储库中,包名称与存储库名称不同,而是称为 sklearn
.
我认为我上面的讨论归结为以下问题:
- 打包repo时,repo的名字和package的名字是什么关系?名字不匹配有什么要注意的吗?
- 包名中可以有连字符吗?在存储库名称中呢?
- 如果
scikit-learn
的软件包名称是 sklearn
,那么为什么我安装它时会使用 pip install scikit-learn
而不是 pip install sklearn
?
为了回答您的第一个问题,让我换一个问题 。
最大的误解来源是“包”这个词被重载了。游戏中有 4 个不同的名称——存储库名称、用于开发的目录名称(包含 setup.py
的目录名称)、包含 __init__.py
的目录名称和其他可导入的名称modules,PyPI 的分发名称。通常这 4 个相同或相似,但这不是必需的。
repository和development directory的名称可以是任意的,它们的名字没有任何作用。当然,正确命名它们很方便,但这只是方便。
包含Python 个文件的目录名称是要导入的包的名称。一旦为导入包命名,名称通常会卡住并且无法更改。
发行版的名称给出了 PyPI 上的一页和发行版文件的名称(源发行版、eggs、wheels)。这是在 setup(name='distribution')
电话中输入的名字。
让我展示详细的实例。我一直在维护一个名为 CheetahTemplate. I develop it in the development directory called cheetah3/
. The distribution at PyPI is called Cheetah3; this is the name I put into setup(name='Cheetah3')
. The top-level module is Cheetah
的模板库,因此有人使用 import Cheetah.Template
或 from Cheetah import Template
;这意味着我有一个目录 cheetah3/Cheetah/
.
2 的答案是:您可以在存储库名称和 PyPI 分发名称中使用破折号,但不能在包(包含 __init__.py
个文件的目录)名称和模块(.py
个文件)名称中使用破折号,因为您不能写成Python import xy-zzy
,那就是减法和SyntaxError
.
第 3 点:站点和存储库名称是 scikit-learn
,以及 distribution name, but the importable package (the top-level directory with __init__.py
) is sklearn。
PEP 8 与问题无关,因为它不讨论分发,只讨论可导入的包和模块。
我正在尝试使我的 git 存储库可 pip 安装。为此,我正在重组回购协议以遵循正确的约定。通过查看其他存储库,我的理解是我应该将所有源代码放在一个与存储库名称相同的包中。例如。如果我的存储库名为 myrepo
,那么源代码将全部放入一个也称为 myrepo
.
为了便于阅读,我的存储库中有一个连字符:例如my-repo
。所以如果我想为它制作一个同名的包,它也会有一个连字符。 In this tutorial 它说 "don't use hyphens" 用于 python 包名称。但是,我已经看到一些成熟的软件包,例如 scikit-learn
,它们的名称中包含连字符。不过我注意到的一件事是,在 scikit-learn
存储库中,包名称与存储库名称不同,而是称为 sklearn
.
我认为我上面的讨论归结为以下问题:
- 打包repo时,repo的名字和package的名字是什么关系?名字不匹配有什么要注意的吗?
- 包名中可以有连字符吗?在存储库名称中呢?
- 如果
scikit-learn
的软件包名称是sklearn
,那么为什么我安装它时会使用pip install scikit-learn
而不是pip install sklearn
?
为了回答您的第一个问题,让我换一个问题
最大的误解来源是“包”这个词被重载了。游戏中有 4 个不同的名称——存储库名称、用于开发的目录名称(包含 setup.py
的目录名称)、包含 __init__.py
的目录名称和其他可导入的名称modules,PyPI 的分发名称。通常这 4 个相同或相似,但这不是必需的。
repository和development directory的名称可以是任意的,它们的名字没有任何作用。当然,正确命名它们很方便,但这只是方便。
包含Python 个文件的目录名称是要导入的包的名称。一旦为导入包命名,名称通常会卡住并且无法更改。
发行版的名称给出了 PyPI 上的一页和发行版文件的名称(源发行版、eggs、wheels)。这是在 setup(name='distribution')
电话中输入的名字。
让我展示详细的实例。我一直在维护一个名为 CheetahTemplate. I develop it in the development directory called cheetah3/
. The distribution at PyPI is called Cheetah3; this is the name I put into setup(name='Cheetah3')
. The top-level module is Cheetah
的模板库,因此有人使用 import Cheetah.Template
或 from Cheetah import Template
;这意味着我有一个目录 cheetah3/Cheetah/
.
2 的答案是:您可以在存储库名称和 PyPI 分发名称中使用破折号,但不能在包(包含 __init__.py
个文件的目录)名称和模块(.py
个文件)名称中使用破折号,因为您不能写成Python import xy-zzy
,那就是减法和SyntaxError
.
第 3 点:站点和存储库名称是 scikit-learn
,以及 distribution name, but the importable package (the top-level directory with __init__.py
) is sklearn。
PEP 8 与问题无关,因为它不讨论分发,只讨论可导入的包和模块。