在 python 存储库名称和包名称中使用连字符/破折号
Posted
技术标签:
【中文标题】在 python 存储库名称和包名称中使用连字符/破折号【英文标题】:Using hyphen/dash in python repository name and package name 【发布时间】:2019-07-02 23:29:49 【问题描述】:我正在尝试使我的 git 存储库 pip 可安装。为此,我正在重组 repo 以遵循正确的约定。通过查看其他存储库,我的理解是,我应该将所有源代码放在与存储库名称同名的包中。例如。如果我的存储库名为myrepo
,那么源代码将全部放入一个也称为myrepo
的包中。
为了便于阅读,我的存储库中有一个连字符:例如my-repo
。所以如果我想为它创建一个同名的包,它也会有一个连字符。 In this tutorial 它对 python 包名称说“不要使用连字符”。但是,我见过一些成熟的软件包,例如 scikit-learn
,它们的名称中有连字符。我注意到的一件事是,在scikit-learn
repo 中,包名称与 repo 名称不同,而是称为sklearn
。
我认为我上面的讨论归结为以下问题:
-
打包repo时,repository名和包名有什么关系?名字不匹配时有什么要注意的吗?
可以在包名称中使用连字符吗?存储库名称呢?
如果
scikit-learn
的包名是sklearn
,那我安装的时候怎么会用pip install scikit-learn
而不是pip install sklearn
呢?
【问题讨论】:
不使用连字符是python的风格规则,就是PEP 8 是的,似乎在scikit-learn
中他们使用sklearn
作为包名。我不明白为什么在 pypi 中它被称为 scikit-learn
虽然:pypi.org/project/scikit-learn
不知道为什么允许它,但在 pypi.org 上的名称中,连字符并不重要
【参考方案1】:
为了回答您的第 1 点,让我将 my answer 改写为另一个问题。
误解的最大来源是“包装”这个词严重超载。游戏中有 4 个不同的名称——存储库名称、用于开发的目录名称(包含 setup.py
的目录名称、包含 __init__.py
和其他可导入模块的目录名称、名称在 PyPI 的分布。这 4 个通常相同或相似,但这不是必需的。
存储库和开发目录的名称可以是任何名称,它们的名称不起任何作用。当然,正确命名它们很方便,但这只是方便。
包含 Python 文件的目录的名称是要导入的包的名称。一旦包被命名为导入,名称通常会卡住并且无法更改。
发行版的名称给出了 PyPI 的一个页面和发行版文件的名称(源发行版、鸡蛋、***)。这是在setup(name='distribution')
电话中输入的名称。
让我展示详细的真实示例。我一直在维护一个名为CheetahTemplate 的模板库。我在名为cheetah3/
的开发目录中开发它。 PyPI 的分布称为Cheetah3;这是我输入setup(name='Cheetah3')
的名称。***模块是Cheetah
,因此一个是import Cheetah.Template
或from Cheetah import Template
;这意味着我有一个目录cheetah3/Cheetah/
。
2 的答案是:您可以在存储库名称和 PyPI 分发名称中使用破折号,但不能在包(带有 __init__.py
文件的目录)名称和模块(.py
文件)名称中使用破折号,因为您不能用 Python @987654339 编写@,那就是减法和SyntaxError
。
第 3 点:站点和存储库名称是 scikit-learn
,以及 distribution name,但可导入的包(带有 __init__.py
的***目录)是 sklearn。
PEP 8 与该问题无关,因为它不讨论分发,只讨论可导入的包和模块。
【讨论】:
谢谢,这非常有帮助!以上是关于在 python 存储库名称和包名称中使用连字符/破折号的主要内容,如果未能解决你的问题,请参考以下文章