Github上的python文件结构

Python File Structure on GitHub

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

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

1
setup(blah, blah, blah)

第二,很多包含一个简单称为__init__.py的文件,几乎不包含任何信息。

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

1
if __name__ =="__main__"

最后,我想知道是否有任何"最佳实践"来划分Git存储库中的python文件。在Java中,由于类的结构,文件分割的概念非常自然。在Python中,许多脚本根本没有类,有时程序会有OOP方面,但是逐类划分并没有那么多意义。它仅仅是"使代码最可读的东西",还是有一些关于这方面的指导方针?


setup.py是使用disrubution实用程序的python模块分发的一部分。它允许简单地安装python模块,并且在您希望将项目作为整个python模块分发时非常有用。

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

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


除了@poke的答案外,还可以看到有关python项目的目录结构应该是什么的这个相关问题。下面是另一个关于如何使项目易于运行的有用教程。


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

python模块导入过程中的__init__.py部分:

Files named init.py are used to mark directories on disk as a
Python package directories. If you have the files

mydir/spam/init.py mydir/spam/module.py and mydir is on your path,
you can import the code in module.py as:

import spam.module or

from spam import module If you remove the init.py file, Python
will no longer look for submodules inside that directory, so attempts
to import the module will fail.

if __name =="__main__"是一种表示如果直接运行文件而不是导入文件,将执行的代码的方法。

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