【问题标题】:Python File Structure on GitHubGitHub 上的 Python 文件结构
【发布时间】:2013-02-21 18:24:54
【问题描述】:

我一直在查看一些关于 Python 的开源项目,并且看到了很多我不熟悉的文件和模式。

首先,很多项目只有一个名为setup.py的文件,它通常包含一个函数:

setup(blah, blah, blah)

其次,很多文件都包含一个简单称为__init__.py 的文件,并且几乎不包含任何信息。

第三,一些.py文件包含类似这样的语句:

if __name__ == "__main__"

最后,我想知道在 git 存储库中划分 Python 文件是否有任何“最佳实践”。在 Java 中,由于类结构,文件分割的想法很自然地出现。使用 Python,许多脚本根本没有类,有时程序会有 OOP 方面,但逐类划分并没有多大意义。它只是“使代码最易读的任何东西”,还是在某处有一些关于此的指导方针?

【问题讨论】:

    标签: python


    【解决方案1】:

    setup.py 是 Python 模块分发的一部分,使用 distrubution utilities。它允许 Python 模块的easy installation,并且在您想将项目作为一个完整的 Python 模块分发时很有用。

    __init__.py 用于 Python 的 package system。一个空文件通常足以让 Python 将其所在目录识别为一个包,但您也可以在其中定义不同的内容。

    最后,__name__ == '__main__' 检查是为了确保当前脚本直接运行(例如从命令行),而不是仅仅导入到其他脚本中。在 Python 脚本执行期间,只有单个模块的 __name__ 属性将等于 __main__。另请参阅 my answer here 或有关该主题的更多 general question

    【讨论】:

      【解决方案2】:

      setup.pydistutils 设置过程的一部分。如果您要分发一个模块,而不仅仅是一个基本脚本,那么您将需要其中一个(即使这样,拥有一个这样您以后可以轻松扩展为一个模块也是一个好主意)。

      pythonmodule import process__init__.py部分:

      名为 init.py 的文件用于将磁盘上的目录标记为 Python 包目录。如果你有文件

      mydir/spam/init.py mydir/spam/module.py 和 mydir 在你的路径上, 您可以将 module.py 中的代码导入为:

      导入 spam.module 或

      从垃圾邮件导入模块如果删除 init.py 文件,Python 将不再在该目录中查找子模块,因此尝试 导入模块会失败。

      if __name == "__main__" 是一种指示在文件直接运行而不是导入时将执行的代码的方法。

      要回答如何布局代码,distfiles 文档有一个 good guide on this

      【讨论】:

      • 对不起,先生,但我认为您在if __name == "__main__" 中犯了一个错误,您忘记了名称后面的__。当你看到这个时给我打电话,我会删除评论。
      【解决方案3】:

      除了@poke 的回答,请参阅this related question 了解python 项目的目录结构应该是什么。 Here 是另一个关于如何使您的项目易于运行的有用教程。

      【讨论】:

        猜你喜欢
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 2021-09-10
        • 2013-02-13
        • 2021-01-11
        • 1970-01-01
        • 2012-05-03
        • 1970-01-01
        相关资源
        最近更新 更多