9

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

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

setup(blah, blah, blah)

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

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

if __name__ == "__main__"

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

4

3 回答 3

7

setup.py是 Python 模块分发的一部分,使用分发实用程序。它允许轻松安装Python 模块,并且在您想要将项目作为整个 Python 模块分发时很有用。

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

最后,__name__ == '__main__'检查是确保当前脚本直接运行(例如从命令行),而不是仅仅导入到其他脚本中。在 Python 脚本执行期间,只有一个模块的__name__属性将等于__main__. 另请参阅我在此处的回答或关于该主题的更一般的问题

于 2013-03-06T19:34:35.577 回答
2

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

__init__.pypython模块导入过程的一部分:

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

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

导入 spam.module 或

from spam import module 如果您删除了init .py 文件,Python 将不再在该目录中查找子模块,因此导入模块的尝试将失败。

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

要回答如何布局代码,distfiles文档对此有很好的指导

于 2013-03-06T19:37:33.760 回答
2

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

于 2013-03-06T19:37:54.617 回答