造成误解的最大原因是“包装”一词的重载。游戏中有4种不同的名称- 存储库名称,用于开发的目录名称(包含setup.py
的名称),包含的目录名称__init__.py
和其他可导入模块的名称,PyPI的发行版名称。通常这四个是相同或相似的,但这不是必需的。
存储库和开发目录的名称可以是任何名称,它们的名称不起作用。当然,正确命名它们很方便,但这仅是方便。
带有Python文件的目录名称为要导入的包命名。一旦为导入命名了软件包,该名称通常会卡住并且无法更改。
分发的名称在PyPI上提供了一页,并提供了分发文件的名称(源分发,鸡蛋,转盘)。这是人们setup(name='distribution')
呼唤的名字。
让我显示详细的实际示例。我一直在维护一个名为CheetahTemplate的模板库。我在名为的开发目录中进行开发cheetah3/
。PyPI的分布称为Cheetah3;这是我输入的名字setup(name='Cheetah3')
。因此,顶层模块是Cheetah
doimport Cheetah.Template
或from Cheetah import Template
; 那意味着我有一个目录cheetah3/Cheetah/
。
2的答案是:您可以在存储库名称和PyPI发行版名称中使用破折号,但在软件包(包含__init__.py
文件的目录)名称和模块(.py
文件)名称中不能包含破折号,因为您不能用Python编写import xy-zzy
,这将是减法和SyntaxError
。
第3点:站点名称和存储库名称scikit-learn
以及分发名称,但是可导入的软件包(带有的顶级目录__init__.py
)为sklearn。
PEP 8与该问题无关,因为它不讨论分发,仅涉及可导入的程序包和模块。