A simple package manager and scaffold for python & some other languages.


Keywords
config, environment, variable, command, line, arguments, file, grpc-protobuf, project-management, python36
License
MIT
Install
pip install pmfp==4.1.11

Documentation

pmfp

Description

一个用于管理项目及相关开发的工具

keywords: tool,project_manager

特点

  • 可以独立使用功能模块
  • 根据模板快速构建项目
  • 简单的编译和打包指令
  • 快速测试
  • 文档维护,支持github page

注意

  • 要支持grpc或者protobuf需要安装相关依赖

    • 通用的编译工具:protoc
    • python: grpcio,grpcio-tools
    • node: @grpc/proto-loader,async,google-protobuf,grpc,lodash,minimist

Install

python -m pip install pmfp

使用

pmfp现在被设计为两个部分:

  1. 项目管理部分用于快速根据托管在git仓库上的模板仓库项目构造项目
  2. 调用功能部分用于为不同的项目提供特定功能

项目管理

项目管理使用的子命令为project,其整体设计思路是这样:

  1. 借助git仓库来保存组件模板.
  2. 每个组件模板使用jinja2作为模板引擎,允许使用其模板语法
  3. 用于保存组件模板的git仓库称为资源包(source pack)
  4. 资源包需要使用一个文件来声明其中注册的组件和默认行为,默认这个文件为资源包根目录下的.pmfp_template.json文件.其具体schema可以查看项目的protocol.py文件中的TEMPLATE_INFO_SCHEMA对象定义
  5. 如果资源包声明文件中template_type不为components则说明这是一个模板资源包,我们就可以根据其作为模板构造项目.
  6. 资源包中每个组件都有一个source字段,这个字段用于声明组件的位置,如果其中有//则说明它是引用的另一个资源项目的组件
  7. 根据模板包构造项目只要指定一个资源包路径即可,其形式为[[{host}::]{repo_namespace}::]{repo_name}[@{tag}]
  8. 如果是已有项目要添加组件,则可以使用[[{host}::]{repo_namespace}::]{repo_name}[@{tag}]//{component_path_str}
  9. 默认的host为github.com,默认的repo_namespace为Project-Manager-With-Git,默认的tag为latest,如果tag为latest它会拉取master分支的head.默认的资源仓库可以通过修改~/.pmfprc/config.json来修改,

另外我们还可以使用cache子命令管理资源包缓存

资源仓库类型

本项目将所有资源仓库类型分为如下几种:

  1. socket,专指基于网络的通讯程序,包括http服务,websocket客户端与服务,各种rpc客户端与服务,以及zeromq,webrtc等
  2. GUI,专指图形界面
  3. task专指主动执行的任务,比如一般脚本,定时任务
  4. watcher监听器,被动监听事件的任务,比如监听文件系统的任务,监听消息中间件的任务
  5. module模块,必须被其他程序调用的程序
  6. components组件集合,本身并不能执行
  7. doc文档型组件

资源仓库版本标签

资源仓库的分支和tag名都可以作为版本标签,但有两个特殊标签会进行更新操作,其他标签一旦下载到本地就不会更新了.因此构造资源仓库时建议使用git的tag维护稳定版本模板.

两个特殊标签为:

  • latest会拉取master或者main分支.这个标签应该保证为最新的可用版本
  • dev会拉取dev分支,这个标签意为开发版本,并不需要保证是可用版本

项目语言及对应的环境

本项目目前之前如下语言和执行环境组合:

  • language为py

    • env为venv,即python的标准库venv生成的c python虚拟环境
    • env为conda,即anaconda/miniconda生成的c python虚拟环境
    • env为pypy,即python的标准库venv生成的pypy虚拟环境
  • language为js

    • env为node,即以node为执行环境的javascript的babel标准环境
    • env为webpack,即以浏览器为执行环境,使用webpack编译项目的javascript的babel标准环境
  • language为cython

    • env为venv,即python的标准库venv生成的c python虚拟环境
    • env为conda,即anaconda/miniconda生成的c python虚拟环境
  • language为go

    • env为gomod,即golang的gomod模式管理项目
  • language为C

    • env为cmake,即使用cmake作为c语言的项目管理工具
  • language为CXX

    • env为cmake,即使用cmake作为c语言的项目管理工具
  • language为md

    • env为http,即使用markdown作为目标语言托管到http服务器上的纯文档环境

直接调用功能

支持直接调用功能的子命令包括:

  • build打包项目到可分发状态.
  • doc快速构造项目的文档
  • docker image快速构造docker镜像
  • docker compose快速构造docker部署配置
  • env快速构建项目的独立执行环境
  • grpc快速构造了grpc的客户端和服务端
  • http用于构造静态http服务和构造http请求和压测
  • proto用于快速构建和编译protobuf文件
  • schema用于校验jsonschema
  • test用于对项目进行测试
  • requires用于管理依赖

build打包项目到可分发状态

这条命令的含义为--打包项目到可以分发的状态.不同编程语言可以打包到的状态并不相同:

  • golang:

    • exec可执行文件
    • alib静态库
    • dlib动态库(linux专用)
    • zip源码压缩归档
  • python:

    • exec,可执行的.pyz文件
    • zip,wheel归档