Python的软件开发目录规范

Posted 思江

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:\\pycharm\\oldboy_29\\day021\\ATM\\core\')
# import src
# src.run()


# 考虑问题:我们目前把路径写死了
# import sys
# sys.path.append(r\'D:\\pycharm\\oldboy_29\\day021\\ATM\\core\')
# sys.path.append(r\'D:\\pycharm\\oldboy_29\\day021\\ATM\\lib\')
# sys.path.append(r\'D:\\pycharm\\oldboy_29\\day021\\ATM\\db\')
# sys.path.append(r\'D:\\pycharm\\oldboy_29\\day021\\ATM\\conf\')
#
# import src
# src.run()

# 查看路径都是重复的,我们进行优化:把环境的顶级目录加入到环境变量
# import sys
# sys.path.append(r\'D:\\pycharm\\oldboy_29\\day021\\ATM\')

# 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:\\pycharm\\oldboy_29\\day021\\ATM\')

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:\\pycharm\\oldboy_29\\day021\\ATM\')

# 优化二
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\\n\'%(time.strftime(\'%Y-%m-%d %H:%M:%S\'),msg))

# 日志路径不能写死,你要给用户选择自定义的保存位置,去settings里面设置
# settings.py文件

from core import src

# 这里的路径写死了,我们优化一下
# LOG_PATH = r\'D:\\pycharm\\oldboy_29\\day021\\ATM\\log\\user.log\'

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
LOG_PATH = r\'%s/log/user.log\' %BASE_DIR

 

以上是关于Python的软件开发目录规范的主要内容,如果未能解决你的问题,请参考以下文章

python软件目录结构规范

Python学习之路:软件目录开发规范

Python 软件开发规范

python学习_软件开发的目录规范以及示例代码(解决软件移植的路径问题)

python之路--day15---软件开发目录规范

python 软件目录结构规范 与 模块导入