单个python文件分发:模块还是包?


24

假设我有一个有用的python函数或类(或任何类)useful_thing,该函数或类存在于单个文件中。本质上有两种组织源树的方法。第一种方法使用单个模块:

- setup.py
- README.rst
- ...etc...
- foo.py

useful_thing中定义的位置foo.py。第二种策略是制作一个包装:

- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py

useful_thing中定义的位置module.py。在包装的情况下__init__.py看起来像这样

from foo.module import useful_thing

这样在两种情况下都可以from foo import useful_thing

问题:首选哪种方式,为什么?

编辑:由于用户说这个问题的格式不正确,因此我要补充一点,官方python打包教程似乎并未评论上述哪种方法是首选方法。我明确提供自己的利弊清单,因为我对是否存在社区首选方法感兴趣,而不是对利弊进行讨论:)


分享您的研究成果对每个人都有帮助。告诉我们您尝试过的内容以及为什么它不能满足您的需求。这表明您已花时间尝试自我帮助,这使我们免于重复显而易见的答案,并且最重要的是,它可以帮助您获得更具体和相关的答案。另请参见“ 如何问”
2014年

1
@gnat:感谢您提供有关如何提问的链接。我知道提出问题的做法很好,但是在这种情况下,我认为提供经验是不合适的,因为这很可能会将我作为明确的“ A或B”问题所提出的问题转化为征求意见。您如何建议在以意见为基础的情况下改进此问题?
DanielSank 2014年

@gnat:换句话说,如果我对这两种方法的利弊列表感兴趣,我会问“这两种方法的利弊是什么”,并会列出自己的部分清单。
DanielSank 2014年

Answers:


17

您做最适合您的事情。

对于一个功能模块,创建包绝对没有意义。软件包对于创建其他名称空间和/或在多个模块中组织代码很有用。

例如,出于代码组织目的,Python标准库中的jsonunittest模块实际上是软件包。但是,最好将当前仅驻留在一个python文件中的代码作为一个模块。

如果您需要示例:

有关真正充分利用软件包的项目的一个很好的例子,请查看:

没有“官方”建议;这两个选项都是完全有效的。


因此,没有正式的首选方法吗?
DanielSank 2014年

3
不,没有首选方法。
马丁·彼得
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.