首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件目录结构规范

软件目录结构规范

作者头像
超蛋lhy
发布2018-08-31 16:26:20
1.4K0
发布2018-08-31 16:26:20
举报
文章被收录于专栏:PythonistaPythonista
'''
foo/
    bin/        #存放项目的一些可执行文件,当然你可以起名script/之类也可
        foo
    foo/        #存放项目源代码    1,源代码中所有模块、包都应该放在此目录。不要置于顶层目录
        tests/  #   2,其子目录tests/ 存放单元测试代码   3,程序入口最好命名为main.py
            __init__.py
            test_main.py
        __init__.py
        main.py         #  程序入口
    docs/     #存放一些文档
    conf.py
    abc.rst

    setup.py    #安装,部署,打包的脚本
    requirements.txt    #存放依赖的外部python包列表
    readme      #项目说明文件

关于目录的理解
readme  必有文件,目的是能简要描述该项目的信息,让读者快速了解这个项目。
它需要说明以下几个事项:
1、软件定位,软件的基本功能
2、运行代码的方法:安装环境,启动命令等
3、简要的使用说明
4、代码目录结构说明,更详细点可以说明软件的基本原理。
5、常见问题说明

我觉得有以上几点是比较好的一个readme。在软件开发初期,由于开发过程中以上内容可能不明确或者发生变化,
并不是一定要在一开始就将所有信息都不全。但是在项目完结的时候,是需要撰写这样的一个文档的

关于requirements.txt 和setup.py
setup.py
一般来说,用setup.py来管理代码的打包,安装,部署问题。业界标准的写法是用python流行的打包工具setuptools来管理这些。
这种方式普遍应用于开源项目中。不过这里的核心思想不是用标准化的工具来解决这些问题,而是说,一个项目一定要有一个安装部署工具
能快速便捷的在一台新机器上将环境装好、代码部署好和将程序运行起来。

老师开始接触python写项目的时候,安装环境,部署代码,运行程序这个过程全是手动完成,遇到如下问题
1,安装环境时经常忘了最近又添加了一个新的python包,结果一到线上运行,程序就出错了
2、python包的版本依赖问题,有时候我们程序中使用的是一个版本的python包,但是官方的已经是最新的包了,通过手动安装就可能装错
3、如果依赖的包很多的话,一个一个安装这些依赖很费时的事
4、新同学开始写项目的时候,将程序跑起来非常麻烦,因为可能经常忘了要怎么安装各种依赖

setup.py可以将这些事情自动化起来,提高效率,减少出错的概率。复杂的东西自动化,能自动化的东西一定要自动化。这是个好习惯
setuptools的文档比较庞大,刚接触的话,可能不太好找到切入点。学习技术的方式就是看他人是怎么用的,可以参考一下python的
一个web框架,flask是如何写的

requirements.txt
这个文件存在的目的是:
1、方便开发者维护软件的包依赖。将开发过程中新增的包添加进这个列表中,避免在setup.py安装依赖时漏掉软件包。
2、方便读者明确项目使用了哪些python包

这个文件的格式是每一行包含一个包依赖的说明,通常是flask>=0.10这种格式,要求是这个格式能被pip识别
这样就可以简单的通过pip install -r requirements.txt 把所有python包依赖都装好

关于配置文件的使用方法
注意,在上面的目录结构中,没有将conf.py放在源码目录下,而是放在docs/目录下
很多项目对配置文件的使用做法是:
#################
1、配置文件写在一个或多个python文件中,比如此处的conf.py
2、项目中哪个模块用到这个配置文件就直接通过 import conf 这种形式在代码中使用配置
################
这种做法1,让单元测试变得困难(因为模块内部依赖了外部配置)
        2,另一方面配置文件作为用户控制程序的接口,应当可以由用户自由指定该文件的路径。
        3,程序组建可复用性太差,因为这种贯穿所有模块的代码硬编码方式,使得大部分模块都依赖conf.py
[[[[[[[[[[[[[[]]]]]]]]]
所以正确的方式是:1、模块的配置都是可以灵活配置的,不受外部配置文件的影响
                2、程序的配置也可以是灵活控制的
能够佐证这个思想的是,用过nginx和mysql的同学都知道,nginx、mysql这些程序都是可以自由的指定用户配置

所以,不应当在代码中直接import conf来使用配置文件。上面目录结构中的conf.py 是给出的一个配置样例,
不是写死在程序中直接引用的配置文件。可以通过给main.py启动参数指定配置路径的方式来让程序读取配置内容。
当然,这里的conf.py 你可以换个类似的名字,比如setting,py 或者你也可以使用其他格式的内容来编写配置文件,
比如settings.yaml 之类
'''
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档