当前位置: 首页 > 面试题库 >

在python存储库名称和包名称中使用连字符/破折号

瞿兴朝
2023-03-14
问题内容

我试图使我的git仓库pip可安装。为此,我正在重组存储库以遵循正确的约定。通过查看其他存储库,我的理解是,我应该将所有源代码放在与存储库名称同名的程序包中。例如,如果调用了我的存储库myrepo,则源代码将全部放入一个也称为的包中myrepo

我的存储库中带有连字符以提高可读性:例如my- repo。因此,如果我想为其包装一个具有相同名称的包装,则其中也将带有连字符。在本教程中,它对python软件包名称说“不要使用连字符”。但是,我已经看到了完善的软件包,例如scikit- learn名称中带有连字符的软件包。我注意到的一件事是,在存储scikit- learn库中,程序包名称与存储库名称不同,而是将其称为sklearn

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

  1. 打包存储库时,存储库名称和包名称之间是什么关系?名称不匹配时要注意什么?
  2. 软件包名称中可以使用连字符吗?仓库名称呢?
  3. 如果的软件包名称scikit-learnsklearn,那么安装它pip install scikit-learn而不是我怎么办pip install sklearn

问题答案:

造成误解的最大原因是“包装”一词的重载。游戏中有4种不同的名称-
存储库名称,用于开发的目录名称(包含setup.py的名称),包含的目录名称__init__.py和其他可导入模块的名称,PyPI的发行版名称。通常这四个是相同或相似的,但这不是必需的。

存储库和开发目录的名称可以是任何名称,它们的名称不起作用。当然,正确命名它们很方便,但这仅是方便。

带有Python文件的目录名称为要导入的包命名。一旦为导入命名了软件包,该名称通常会卡住并且无法更改。

分发的名称在PyPI上提供了一页,并提供了分发文件的名称(源分发,鸡蛋,转盘)。这是人们setup(name='distribution')呼唤的名字。

让我显示详细的实际示例。我一直在维护一个名为CheetahTemplate的模板库。我在名为的开发目录中进行开发cheetah3/。PyPI的分布称为Cheetah3;这是我输入的名字setup(name='Cheetah3')。因此,顶层模块是Cheetahdoimport Cheetah.Templatefrom Cheetah import Template;
那意味着我有一个目录cheetah3/Cheetah/

2的答案是:您可以在存储库名称和PyPI发行版名称中使用破折号,但在软件包(包含__init__.py文件的目录)名称和模块(.py文件)名称中不能包含破折号,因为您不能用Python编写import xy-zzy,这将是减法和SyntaxError

第3点:站点名称和存储库名称scikit-learn以及分发名称,但是可导入的软件包(带有的顶级目录__init__.py)为sklearn。

PEP 8与该问题无关,因为它不讨论分发,仅涉及可导入的程序包和模块。



 类似资料:
  • 问题内容: 我有一个名称为dash的现有python模块foo-bar.py 我希望避免更改模块名称,因为该模块是共享的,我将不得不追踪所有使用该模块的位置,以便我的特殊情况能够起作用。 有没有办法加载名称包含通常被禁止的“-”的模块? (我确实知道这不是最佳实践。但是,在这种情况下,我宁愿不要重新设计和测试更多的应用程序。而且,我不认为我的公司老板会赞成我花时间实施这样的变化。) 问题答案: 您

  • 问题内容: 我有yaml文件的片段: 但我无法使用方法名称创建pojo 有什么方法可以解析此类Yaml文件? 问题答案: 您可以传递自定义PropertyUtils来处理此类情况

  • 问题内容: 我正在使用jq,但json标记中包含“-”使jq无法编译。我无法逃脱它使其工作。这里的命令 我已经在jq的github上阅读了这篇帖子https://github.com/stedolan/jq/issues/202,但我无法使其正常运行。 这是curl的输出 任何想法? 问题答案: 您需要用方括号和双引号引起来: 使用您给定的输入,它返回: 该JQ手册(开发) - >基本过滤器: 最

  • 问题内容: 我正在看http://docs.jquery.com/Plugins/Authoring#Defaults_and_Options为jQuery创建一个简单的插件。在有关选项和设置的部分之后,我执行了以下操作,该操作不起作用(脚本遇到设置后退出)。 一旦我从背景色中删除了破折号,一切就可以正常工作。 我是否缺少某些内容,或者jQuery文档是否错误? 问题答案: 没有。解析器会将其解释

  • 我在 Azure 表存储中有下表名称。表名是在我的应用程序中自动生成的,然后使用表创建。创建如果不存在(表名)。有些有效,有些则不然。当我深入研究错误时,扩展的错误信息告诉我资源名称包含无效字符 - 但是我无法弄清楚失败名称中无效的内容 - 任何人都可以发现这一点吗? -指定的资源名称包含无效字符 -指定的资源名称包含无效字符 –工程

  • 问题内容: 假设您正在为BarBaz Incorporated开发项目的核心模块。您的代码片段可能如下所示: 如果您的公司网站不是,而是惯例,那会是什么样的惯例? 问题答案: SUN时代的Java语言规范给出了建议的约定: 如果域名包含连字符或标识符中不允许的任何其他特殊字符(第3.8节),请将其转换为下划线。 但这只是一个建议…