DataPlug开发日记 01
开发思想
- MVP,最小化可运行功能,快速迭代。每次迭代都是可运行版本。
- 使用AI进行vibe coding。
系统功能
应用可以根据config文件中数据,对txt\md\word等待替换文件中变量进行批量替换。变量规则符合jinja2语法。 如config.ini文件中有变量定义: company = Moomboss 在txt\md\word等文件中使用变量,则替换为Moomboss。
应用命令
暂定包括如下命令:
dataplug -h显示帮助信息dataplug -v显示版本信息dataplug about显示关于信息dataplug create <project_name>创建项目dataplug check [project_name]检查项目(默认为当前目录)dataplug fresh [project_name]替换项目中待替换文件(默认为当前目录)dataplug fresh [project_name] --config使用指定配置文件替换文件中变量dataplug log [project_name]查看日志(默认为当前目录)dataplug notification更新通知
技术栈选择
想使用基于Python开发桌面应用的技术方案,网上可以搜索到的技术方案都太旧了。 以下是我尝试的桌面应用技术方案。 在最开始使用UI框架时,我考虑的是在UI内完成项目的创建、选择、配置文件编辑、文本预览等功能。但是在使用过程中,发现UI框架要实现本地文件的展示都很困难,比WinForm的开发麻烦了不止一点半点。
CustomTkinter
- CustomTkinter是一个基于Tkintern的GUI开发框架。 但是当我看到连原生menu菜单都没有(需要tk的menu),我对这个UI框架深感疑虑。或许以后在cli版本完善后,可以考虑使用。
DearpyGui
(DearPyGui)[https://dearpygui.readthedocs.io/en/latest/index.html] 可以实现使用python开发桌面应用和web应用。 上来就给我当头一棒,当我用AI生成应用后,发现中文是乱码,按照网上搜索的方案进行本地字体的加载,发现字体模糊不清,影响体验。无情的抛弃之。
pywebview
(pywebview)[https://pywebview.flowrl.com/] 框架包含浏览器,可以使用python和javascript双向调用方式实现桌面应用。 但是我一直没想好UI怎样安排,调试了几个版本后黯然放弃。 现在先把cli做好,然后再考虑UI方案。
Cli方案
AI给我推荐了如下方案,最终我选择了Typer方案。先给程序员用,实际上写配置文件和基于jinja2语法编写变量,本身就是有门槛的事情。
- argparse (Python 标准库)
import argparse
parser = argparse.ArgumentParser(description='示例CLI工具')
parser.add_argument('--input', '-i', required=True, help='输入文件')
parser.add_argument('--output', '-o', help='输出文件')
parser.add_argument('--verbose', '-v', action='store_true', help='详细模式')
args = parser.parse_args()
print(f"处理文件: {args.input}")- Click (最流行)
import click
@click.command()
@click.option('--input', '-i', required=True, help='输入文件')
@click.option('--output', '-o', help='输出文件')
@click.option('--verbose', '-v', is_flag=True, help='详细模式')
def cli(input, output, verbose):
"""示例CLI工具"""
if verbose:
click.echo(f"处理文件: {input}")
click.echo("操作完成")
if __name__ == '__main__':
cli()- Typer(基于类型提示,现代)
import typer
app = typer.Typer()
@app.command()
def process(input: str, output: str = None, verbose: bool = False):
"""处理文件的CLI工具"""
if verbose:
typer.echo(f"处理文件: {input}")
typer.echo("操作完成")
if __name__ == "__main__":
app()V0.1
2025-09-18 使用AI完成项目框架结构,实现对txt、md等文本型文件的替换功能。经过pyinstall打包,运行良好😄。