• Python的软件开发目录规范


    软件开发的目录规范:

      为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要。软件的目录规范并无硬性标准,只要清晰可读即可,假设你的软件名为foo,笔者推荐目录结构如下

    Foo/
    |-- core/
    |   |-- core.py
    |
    |-- api/
    |   |-- api.py
    |
    |-- db/
    |   |-- db_handle.py
    |
    |-- lib/
    |   |-- common.py
    |
    |-- conf/
    |   |-- settings.py
    |
    |-- run.py
    |-- setup.py
    |-- requirements.txt
    |-- README

    解释一下:

    ​ • core/: 存放业务逻辑相关代码

    ​ • api/: 存放接口文件,接口主要用于为业务逻辑提供数据操作。

    ​ • db/: 存放操作数据库相关文件,主要用于与数据库交互

    ​ • lib/: 存放程序中常用的自定义模块

    ​ • conf/: 存放配置文件

    ​ • run.py: 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹作为sys.path的第一个路径,这样就省去了处理环境变量的步骤

    ​ • setup.py: 安装、部署、打包的脚本。

    ​ • requirements.txt: 存放软件依赖的外部Python包列表。

    ​ • README: 项目说明文件。

    除此之外,有一些方案给出了更加多的内容,比如LICENSE.txt,ChangeLog.txt文件等,主要是在项目需要开源时才会用到,请读者自行查阅。

    关于README的内容,这个应该是每个项目都应该有的一个文件,目的是能简要描述该项目的信息,让读者快速了解这个项目。它需要说明以下几个事项:

    1、软件定位,软件的基本功能;
    
    2、运行代码的方法: 安装环境、启动命令等;
    
    3、简要的使用说明;
    
    4、代码目录结构说明,更详细点可以说明软件的基本原理;
    
    5、常见问题说明。

    举例说明:数据准备如下

     

    # src.py存放源码
    
    # encoding=utf-8
    # auther:lsj
    
    def exit():
        print("退出功能")
    
    def login():
        print("登录功能")
    
    def register():
        print('注册功能')
    
    def witdraw():
        print('体现功能')
    
    def transfer():
        print("转账功能")
    
    func_dic={
        '0':['退出',exit],
        '1':['登录',login],
        '2':['注册',register],
        '3':['体现',witdraw],
        '4':['转账',transfer],
    }
    def run():
        while True:
            for k in func_dic:
                print(k,func_dic[k][0])
    
            choice = input("请输入指令编号:").strip()
            if choice in func_dic:
                func_dic[choice][1]()
            else:
                print("请重新输入")
    
    # run()
    # start.py存放执行程序
    
    # encoding=utf-8
    # auther:lsj
    
    # 使用相对导入:参照当前所在文件夹
    # from ..core.src import run
    # run()
    # ImportError: attempted relative import with no known parent package
    # 执行文件超出了查找范围。
    
    # 应该采用绝对导入-->sys.path-->执行文件
    # import sys
    # sys.path.append(r'D:pycharmoldboy_29day021ATMcore')
    # import src
    # src.run()
    
    
    # 考虑问题:我们目前把路径写死了
    # import sys
    # sys.path.append(r'D:pycharmoldboy_29day021ATMcore')
    # sys.path.append(r'D:pycharmoldboy_29day021ATMlib')
    # sys.path.append(r'D:pycharmoldboy_29day021ATMdb')
    # sys.path.append(r'D:pycharmoldboy_29day021ATMconf')
    #
    # import src
    # src.run()
    
    # 查看路径都是重复的,我们进行优化:把环境的顶级目录加入到环境变量
    # import sys
    # sys.path.append(r'D:pycharmoldboy_29day021ATM')
    
    # from conf import settings
    # from core import src
    # from db import db_handle
    # from lib import common
    
    # print(settings)
    # print(src)
    # <module 'conf.settings' from 'D:\pycharm\oldboy_29\day021\ATM\conf\settings.py'>
    # <module 'core.src' from 'D:\pycharm\oldboy_29\day021\ATM\core\src.py'>
    
    
    # from core import src
    # src.run()
    
    # 不加任何前缀直接运行run(),优化如下
    # from core.src import run
    # run()
    
    
    # 优化一
    # import sys
    # print(__file__)  # 获取当前文件的绝对路径:运行结果D:/pycharm/oldboy_29/day021/ATM/bin/start.py
    # # sys.path.append(r'D:pycharmoldboy_29day021ATM')
    
    import os
    # print(__file__)  # 获取当前文件的绝对路径,D:/pycharm/oldboy_29/day021/ATM/bin/start.py
    # print(os.path.dirname(__file__))  # 获取当前文件的绝对路径的上一个文件,D:/pycharm/oldboy_29/day021/ATM/bin
    # print(os.path.dirname(os.path.dirname(__file__)))  # D:/pycharm/oldboy_29/day021/ATM
    # # sys.path.append(r'D:pycharmoldboy_29day021ATM')
    
    # 优化二
    import os,sys
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR)
    
    from core import src
    
    src.run()
    
    """运行结果如下
    0 退出
    1 登录
    2 注册
    3 体现
    4 转账
    请输入指令编号:
    """
    # commonpy文件的代码
    import time
    from conf import settings
    def logger(msg):
        # 日志记录功能
        with open(settings.LOG_PATH,
                  mode='at',
                  encoding='utf-8'
                  ) as f:
            f.write('%s %s
    '%(time.strftime('%Y-%m-%d %H:%M:%S'),msg))
    
    # 日志路径不能写死,你要给用户选择自定义的保存位置,去settings里面设置
    # settings.py文件
    
    from core import src
    
    # 这里的路径写死了,我们优化一下
    # LOG_PATH = r'D:pycharmoldboy_29day021ATMloguser.log'
    
    import os
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    LOG_PATH = r'%s/log/user.log' %BASE_DIR
  • 相关阅读:
    MySQL 安装和配置
    其它 Google Chrome 已停止工作
    VUE 父组件和子组件相互传值 组件之间的数据传递
    SpringBlade 源码 个性化修改 添加字典时 自动填充字典值
    MyBatis-Plus SpringBlade 生成代码时 啥内容都没有 只有目录
    Oracle IIS部署报错
    pycharm连接sqlite后打开db文件不显示表的问题
    Hbase集群搭建以及启动(单点启动,群起)
    Flume的put和take事务
    稀疏数组学习
  • 原文地址:https://www.cnblogs.com/liunaixu/p/12699616.html
Copyright © 2020-2023  润新知