在 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.

我认为我上面的讨论归结为以下问题:

  1. 打包repo时,repo的名字和package的名字是什么关系?名字不匹配有什么要注意的吗?
  2. 包名中可以有连字符吗?在存储库名称中呢?
  3. 如果 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.Templatefrom 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 与问题无关,因为它不讨论分发,只讨论可导入的包和模块。