美文网首页报告自动化生成
9. 多人协作和版本管理

9. 多人协作和版本管理

作者: 数据成长之路 | 来源:发表于2018-07-27 17:21 被阅读12次

知识基础

学习目标

  • 用Git进行自动化脚本的版本管理
  • 用Git保证团队报告自动化脚本的版本同步

1. 文档结构调整

在多人协作时,我们要尽保持模板的同步,同时每个人对模板的完善都能集合在一起,而具体工作的内容不应该产生干扰。所以对于变动频繁的文件,我们可以集合起来然后进行同步时忽略处理。
对于第8章的文档结构,会常发生变动的有:

  • report 自动化报告的工作目录
    • main.ipynb 文件的主执行和调试文件,每次执行都会变化
    • data
      • dynamic_data.csv
      • static_data.csv
    • image 存放生成的图片文件
    • report 存放生成的报告
    • configs.py 设置报告的参数,比如作者,日期,数据源等等,每次使用时可以仅仅修改设置便生成不同报告

而这些我们可以打包在一起放入report文件夹,把文档结构调整为:

  • report 自动化报告的工作目录
    • ... 其他文件不动
    • configs.py 在此需要添加设置报告的编号,且报告编号需要唯一
    • main.ipynb 文件的主执行和调试文件,不会执行,仅仅作为母版
    • data
      • static_data.csv
    • reports 存放生成的报告
      • report1 报告1
      • report2 报告2
        • main.ipynb 从上上级文件夹复制,每次执行时都会变化
        • configs.py 基于上上级文件夹中的configs.py文件生成,作为此报告设置的记录
        • data
          • dynamic_data.csv
        • image 存放生成的图片文件

注意:

在文档结构调整后,我们还需要添加辅助用的小脚本,用途为:

  1. 基于configs.pyreports文件夹生成制作报告用的文件夹,并生成如下的目录结构
    • report1 报告1
      • main.ipynb 从上上级文件夹复制,每次执行时都会变化
      • configs.py 基于上上级文件夹中的configs.py文件生成,作为此报告设置的记录
      • data
      • image 存放生成的图片文件
  2. 检查reports文件夹中的目录结构是否正确

检查目录的小例子:

更复杂和完善的请根据报告形式自行编写

import os
import logging
logging.info("当前目录 : {}".format(os.getcwd()))
def check_folder(folder_name):
    if os.path.exists(folder_name):
        logging.info("文件夹已创立:{}".format(folder_name))
    else:
        logging.warning("文件夹未创立:{}".format(folder_name))
        os.makedirs(folder_name)
        logging.info("文件夹创立完毕:{}".format(folder_name))
check_folder("./Example_2")
# 修改当前工作目录
os.chdir("./Example_2")
logging.info("当前目录 : {}".format(os.getcwd()))
import configs
check_folder(configs.report_name)
WARNING:root:文件夹未创立:Report1
# 创建文件夹
for folder in ['data', 'image']:
    check_folder(r"./reports/{}/{}".format(configs.report_name, folder))
# 复制文件
import shutil
for filename in ['main.ipynb', 'configs.py']:  
    if os.path.exists(r"./reports/{}/{}".format(configs.report_name, filename)):
        logging.warning("文件未添加:./reports/{}/{}".format(configs.report_name, filename))
    else:
        shutil.copy(filename, r"./reports/{}/{}".format(configs.report_name, filename))
        logging.info("已复制文件:{}".format(filename))
WARNING:root:文件未添加:./reports/Report1/main.ipynb
WARNING:root:文件未添加:./reports/Report1/configs.py

2. main.ipynb的拆分

这里分为两种情况:

  1. 报告尚未完全自动化,还需要人工干涉
    由于main.ipynb在每次执行时结果会不同,变动时无法保持同步,所以可以对其内容进行拆分,分为方法部分和人工设置部分,以实现方法部分通用,人工设置部分每篇报告都输入不同。
  2. 报告已经完全自动化
    这时候main.ipynb仅仅是作为一个调试工具,把其中的方法保存为main.py,之后直接执行main.py即可

TODO :
具体拆分方法和main.ipynb的组织方式会在之后补充。

3. 设置git添加时的忽略文件

所以对于生成报告所用的公用文件,我们用Git进行版本控制,而每次报告都会不同的设置或者数据,以及生成文件,我们需要让Git忽略掉它们,但是还要保证文件的组成结构没有变化。

比如对于调整前的文档结构,.gitignore的文件内容添加如下

\__pycache__
*.pyc
.ipynb_checkpoints
data/data.csv
image/*
report/*

分别忽略了:

  • python导入模块时的生成文件 \__pycache__、*.pyc
  • ipynb的历史记录文件 .ipynb_checkpoints
  • 每份报告都会

而对于调整后的文档结构,.gitignore的文件内容可改为添加如下

\__pycache__
*.pyc
.ipynb_checkpoints
report/*

进行修改后的结果请参照Example_3


相关文章

  • 9. 多人协作和版本管理

    知识基础 Git基础知识 代码可参照Example_3 学习目标 用Git进行自动化脚本的版本管理 用Git保证团...

  • Kotlin协程(4)✔️管理协程

    等待协程结束超时设置取消协程   协程的管理比线程的管理要简单的多。 等待协程结束   前面提到过 join 函数...

  • Kotlin---协程的使用

    第一个协程 在使用协程之前,需要保证Kotlin-Gradle-Plugin的版本高于1.3。目前最高的版本为1....

  • Git管理策略

    在多人开发的环境下,良好的管理机制是必须的。 分支管理策略 1. master 主分支-用于发布版本 发布版本时打...

  • 听说过python协程没?听说过 asyncio 库没?都在这一

    python 中协程概念是从 3.4 版本增加的,但 3.4 版本采用是生成器实现,为了将协程和生成器的使用场景进...

  • Kotlin 协程和 Android SQLite API 中的

    从 Room 2.1 版本之后,开发者们可以通过定义 suspend DAO 函数来使用 Kotlin 协程了。协...

  • 第十三章 版本管理

    版本管理指项目整体版本的演变过程管理。 版本控制指借助版本控制工具追踪代码的每个变更。 一、版本管理 版本管理关心...

  • swoole之websocket之协程版和回调版

    项目要用到消息提醒功能,因此借此机会学习websocket 回调版本websocket 协程版本websocket

  • MVCC

    1 什么是MVCC MVCC(Multiversion concurrency control),多版本并发控制协...

  • PC功能超齐全的微信管理助手

    最近发现一款超好用的微信管理助手,分享给大家! 可以在电脑上进行操作和管理 如下图所示 1月20号置顶最新版本 功...

网友评论

    本文标题:9. 多人协作和版本管理

    本文链接:https://www.haomeiwen.com/subject/pypgmftx.html