《Python高手之路(第3版)》——1.2 项目布局

1.2 项目布局

项目结构应该保持简单,审慎地使用包和层次结构:过深的层次结构在目录导航时将如同梦魇,但过平的层次结构则会让项目变得臃肿。

一个常犯的错误是将单元测试放在包目录的外面。这些测试实际上应该被包含在软件的子包中,以便:

不会偶尔被setuptools(或者其他打包库)作为tests顶层模块自动安装;

能够被安装,且被其他包用于构建自己的单元测试。

图1-1展示了一个项目的标准文件层次结构。

setup.py是Python安装脚本的标准名称。在安装时,它会通过Python分发工具(distutils)进行包的安装。也可以通过README.rst(或者README.txt或其他合适的名字)为用户提供重要信息。requirements.txt应该包含Python包所需要的依赖包,也就是说,所有这些包都会预先通过pip这样的工具进行安装,以保证你的包能正常工作。还可以包含test-requirements.txt,它只列出运行测试套件所需要的依赖包。最后,docs文件夹应该包括reStructuredText格式的文档,以便能够被Sphinx处理(参见5.1节)。

包中还经常需要包含一些额外的数据,如图片、shell脚本等。不过,关于这类文件如何保存并没有一个统一的标准。因此放到任何觉得合适的地方都可以。

下面这些顶层目录也经常出现。

etc用来存放配置文件的样例。

tools用来存放与工具有关的shell脚本。

bin用来存放将被setup.py安装的二进制脚本。

data用来存放其他类型的文件,如媒体文件。

一个常见的设计问题是根据将要存储的代码的类型来创建文件或模块。使用functions.py或者exceptions.py这样的文件是很糟糕的方式。这种方式对代码的组织毫无帮助,只能让读代码的人在多个文件之间毫无理由地来回切换。

此外,应该避免创建那种只有一个__init__.py文件的目录,例如,如果hooks.py够用的话就不要创建hooks/__init__.py。如果创建目录,那么其中就应该包含属于这一分类/模块的多个Python文件。

时间: 2024-12-06 21:06:08

《Python高手之路(第3版)》——1.2 项目布局的相关文章

《Python高手之路(第3版)》——导读

前 言 Python高手之路(第3版) 如果你正在读这本书,你肯定已经使用Python有一阵子了.你可能是通过一些文档学习的,钻研了一些已有的项目或者从头开发,但不管是哪种情况,你都已经在以自己的方式学习它了.直到3年前我加入OpenStack项目组之前,这其实也正是我个人熟悉Python的方法. 在此之前,我只是开发过一些"车库项目 ①"级别的Python库或应用程序,而一旦你参与开发涉及数百名开发人员并有着上万个用户的软件或库时,情况就会有所不同.OpenStack平台有超过200

《Python高手之路(第3版)》——2.3 外部库

2.3 外部库 你是否有过这样的经历,收到一件不错的生日礼物或圣诞礼物,但是打开后却发现送你的人忘了买电池?Python的"内置电池"哲学让作为程序员的你不会遇到这类问题,只要安装了Python,就拥有了完成任何功能所需的一切条件. 然而,Python标准库的开发者并不能预测你要实现的"任何"功能到底是什么.即使可以,大多数人也不想去处理一个几个GB的文件下载,即使可能只是需要写一个重命名文件的脚本.关键在于,即使拥有所有的扩展功能,仍然有许多功能是Python标准

《Python高手之路(第3版)》——2.5 Doug Hellmann访谈

2.5 Doug Hellmann访谈 我曾经有幸和Doug Hellmann一起工作过数月.他在DreamHost是一位非常资深的软件开发工程师,同时他也是OpenStack项目的贡献者.他发起过关于Python的网站Python Module of the Week(http://pymotw.com/) ,也出版过一本很有名的Pyhton书The Python Standard Library By Example(http://doughellmann.com/python-standa

《Python高手之路(第3版)》——1.3 版本编号

1.3 版本编号 可能你已经有所了解,Python生态系统正在对包的元数据进行标准化.其中一项元数据就是版本号. PEP 440(http://www.python.org/dev/peps/pep-0440/) 针对所有的Python包引入了一种版本格式,并且在理论上所有的应用程序都应该使用这种格式.这样,其他的应用程序或包就能简单而可靠地识别它们需要哪一个版本的包. PEP440中定义版本号应该遵从以下正则表达式的格式: N[.N]+[{a|b|c|rc}N][.postN][.devN]

《Python高手之路(第3版)》——1.5 Joshua Harlow访谈

1.5 Joshua Harlow访谈 Joshua Harlow是一名Python开发人员,自2012年起任雅虎OpenStack团队的技术主管之一,他还曾作为CTO小组的成员之一负责调研IaaS解决方案.自那时起他陆续开发了若干Python库,如Taskflow(https://git.openstack.org/cgit/openstack/taskflow/). automaton(https://github.com/harlowja/automaton) 和Zake(https://

《Python高手之路(第3版)》——2.2 标准库

2.2 标准库 Python本身内置的巨大标准库提供了丰富的工具和功能,可以满足你能想到的任何需求.很多Python的初学者习惯于自己写代码实现一些基本的功能,然后会惊奇地发现很多功能已经内置了,直接就可以使用. 任何时候想要自己写函数处理一些简单的工作时,请停下来先看看标准库.我的建议是至少大概浏览一遍标准库,这样下次再需要一个函数时就能知道是否可以利用标准库中已有的函数了. 后续章节会讨论其中的一些模块,如functools和itertools,下面是一些必须了解的标准库模块. atexit

《Python高手之路(第3版)》——第2章 模块和库 2.1 导入系统

第2章 模块和库 2.1 导入系统 要使用模块和库,需要先导入. >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Spar

《Python高手之路(第3版)》——第1章 项目开始 1.1 Python版本

第1章 项目开始 1.1 Python版本 你可能会问的第一个问题就是:"我的软件应该支持Python的哪些版本?"这是一个好问题,因为Python的每个新版本都会在引入新功能的同时弃用一些旧功能.而且,Python 2.x和Python 3.x之间有着巨大的差别,这两个分支之间的变化如此巨大,以至于很难让代码同时兼容二者.本书后面的章节会详细讨论,而且在刚开始一个新项目的时候很难说哪个版本更合适. 下面是一些简短的回答. 2.5版本及更老的版本目前实际上已经废弃了,所以不需要再去支持

《Python高手之路(第3版)》——1.4 编码风格与自动检查

1.4 编码风格与自动检查 没错,编码风格是一个不太讨巧的话题,不过这里仍然要聊一下. Python具有其他语言少有的绝佳质量:使用缩进来定义代码块.乍一看,似乎它解决了一个由来已久的"往哪里放大括号?"的问题,然而,它又带来了"如何缩进?"这个新问题. 而Python社区则利用他们的无穷智慧,提出了编写Python代码的PEP 8(http://www. python.org/dev/peps/pep-0008/)标准.这些规范可以归纳成下面的内容. 每个缩进层级