oro*_*ome 13 python python-module package pypi
我给Python包中单个模块的名称是否与包的名称相匹配?
例如,如果我有一个带有结构的单个模块的包
super-duper/
super/
__init.py___
mycode.py
...
Run Code Online (Sandbox Code Playgroud)
我可以super-duper在PyPi上创建一个包,安装后会有两个site-packages名称不匹配的文件夹:
super/
super_duper-1.2.3.dist-info/
Run Code Online (Sandbox Code Playgroud)
这意味着要导入我使用的项目
import super
Run Code Online (Sandbox Code Playgroud)
而不是实际的包名(super_duper)
这似乎违反了常规做法(从我看到的每个其他包的文件夹判断site-packages)遵循该模式
same_name/
same_name-1.2.3.dist-info/
Run Code Online (Sandbox Code Playgroud)
用于PyPi包same-name.
我应该(总是)构建我的项目
super-duper/
super_duper/
__init.py___
mycode.py
...
Run Code Online (Sandbox Code Playgroud)
确保包名称和模块导入名称"匹配":
import super_duper
Run Code Online (Sandbox Code Playgroud)
我应该遵循相关的最佳做法或规则吗?
小智 11
对您的问题的简短回答是:是的,通常一个好的做法是让模块的名称与单个模块包(应该是大多数已发布的包)的包名相匹配.
稍微长一点的答案是命名约定总是政治性的.在Python中定义语言标准的普遍接受的方法是称为"Python增强提议"(PEP)的过程.PEP由一组PEP编辑管理,并公开编入索引以供审阅和评论.
目前,我所知道的只有一个"活跃"(接受并实施)的PEP涵盖了模块命名约定,即PEP 8:
模块应具有简短的全小写名称.如果提高可读性,则可以在模块名称中使用下划线.Python包也应该有简短的全小写名称,但不鼓励使用下划线.
但是,在起草过程中还有另一个名为PEP 423的提案,它建议你在帖子中说明的内容:
每个项目仅分发一个包(或仅一个模块),并使用包(或模块)名称作为项目名称.
它避免了项目名称与分布式软件包或模块名称之间可能出现的混淆.
它使名称一致.
它是明确的:当人们看到项目名称时,他会猜测包/模块名称,反之亦然.
它还限制了包/模块名称之间的隐式冲突.通过使用单个名称,当您将项目名称注册到PyPI时,还可以执行基本的程序包/模块名称可用性验证.
重要的是要注意,此PEP仍处于"延迟"状态,这意味着它尚未被PEP编辑批准,并被另一个提议阻止(特别是在PEP 440中实现模块元数据语法的更新) .然而,自423的原始提案以来,没有起草任何竞争标准,而且大部分内容似乎都相当无争议,所以我希望将来可以接受它而不会有太多重大变化.
我不知道需要您的项目名称与已安装的软件包或模块匹配的准则.有一个延迟草案PEP-423命名约定和包装相关的配方,但这实际上已被放弃(从未应用挂起的更新).
你说你看了,但你可能错过了一些现有的例子,其中包含的项目名称和包不匹配:
该BeautifulSoup项目使用beautifulsoup4的PyPI上的项目名称,其安装包bs4.
在dateutilPython包可PyPI上的作为python-dateutil.前缀PyPI项目名称python-相当普遍,我今天在PyPI上计算了1512这样的包.
该Viivakoodi项目是pyBarcode的一个分支.他们的viivakoodiPyPI项目安装了一个barcode包site-packages.另一个这样的fork项目是Pillow,它是Python Image Library的一个分支.它在PyPI上以该名称提供,但包安装PIL包.
也就是说,我个人更喜欢它的PyPI项目名称和包含的包匹配; 它减少了混乱.最值得注意的例外是项目分支,其目的是维护旧的软件包名称以便于迁移.
| 归档时间: |
|
| 查看次数: |
2276 次 |
| 最近记录: |