构造一个简单的CLI程序

typer

这个从去年就被各种营销号吹成Web框架的 第三方库, 与 FastAPI 同出一人之手,它不是Web框架,它是一个用来构建CLI程序的库,我们就简单搞个例子

# 更多用法,看文档
import typer # 实例一下
app = typer.Typer() # 加到命令组中 hello
@app.command()
def hello(name: str):
typer.echo(f"Hello {name}") # 加到命令组中 goodbye 接收 一个必要参数name, --formal 可修改默认值参数
@app.command()
def goodbye(name: str, formal: bool = False):
if formal:
typer.echo(f"Goodbye Ms. {name}. Have a good day.")
else:
typer.echo(f"Bye {name}!")

poetry

依赖环境和包管理器,个人觉得最大的亮点就是可以直接打包发布到PyPi上

pip install poetry 进行安装

# 常用命令
1. 在已有项目中初始化(图方便就一直回车): poetry init
2. 完全初始化一个项目: poetry new 项目名 # 上述内容 一路回车之后 得到一个pyproject.toml文件 3. 添加依赖库并安装: poetry add typer
... 其他命令 ... 各位自己翻文档吧

正片开始

  1. 新建一个目录 tclidemo

  2. poetry init 一路回车

  3. poetry add typer 安装typer

  4. 目录下新建一个同名的包(也可不同名)

  5. 里面新建一个main.py内容就是上面typer中的内容

  6. pyproject.toml添加[tool.poetry.scripts] 后如下

    [tool.poetry]
    # 这个name 必须和 我们要打包那个目录一个名称,且不能和pypi已有的包冲突
    name = "tclidemo"
    version = "0.1.4" # 包版本号 安装时 最好指定版本安装 pip install xx==0.1.2
    description = ""
    authors = ["zy7y <xxxxxxx@163.com>"] [tool.poetry.dependencies]
    python = "^3.9"
    typer = "^0.4.0" [tool.poetry.dev-dependencies] [build-system]
    requires = ["poetry-core>=1.0.0"]
    build-backend = "poetry.core.masonry.api" [tool.poetry.scripts]
    # 前面是命令 开头 , = 后面是 指定typer实例, 对应的就是 打包包名.模块名(main.py文件).typer对象名
    tdo = 'tclidemo.main:app'
  7. 打包&上传pypi

    PyPI · The Python Package Index

    # 执行后在当前目录下生成一个dist目录,poetry 和 npm 命令还差不多....
    poetry build (venv) E:\coding\tree-cli>poetry build
    Building tclidemo (0.1.4)
    - Building sdist
    - Built tclidemo-0.1.4.tar.gz
    - Building wheel
    - Built tclidemo-0.1.4-py3-none-any.whl # 上传
    poetry publish # 之后会要求输入 pypi 的账号密码(没有的先去注册 https://pypi.org/) (venv) E:\coding\tree-cli>poetry publish Username: zy7y
    Password:
    Publishing tclidemo (0.1.4) to PyPI
    - Uploading tclidemo-0.1.4-py3-none-any.whl 0%
    - Uploading tclidemo-0.1.4-py3-none-any.whl 100%
    - Uploading tclidemo-0.1.4-py3-none-any.whl 100%
    - Uploading tclidemo-0.1.4.tar.gz 0%
    - Uploading tclidemo-0.1.4.tar.gz 100%
    - Uploading tclidemo-0.1.4.tar.gz 100%

  8. 如果没报错,那就稳了,新起个虚拟环境 python -m venv venv

    # 安装上传的包 , 如果确实上传了装不上 最好等个一分钟哦
    pip install tclidemo==0.1.4 # 执行tdo --help
    tdo --help
    (venv) C:\Users\win10\Desktop\apiAutoTest>tdo --help
    Usage: tdo [OPTIONS] COMMAND [ARGS]... Options:
    --install-completion [bash|zsh|fish|powershell|pwsh]
    Install completion for the specified shell.
    --show-completion [bash|zsh|fish|powershell|pwsh]
    Show completion for the specified shell, to
    copy it or customize the installation. --help Show this message and exit. Commands:
    goodbye
    hello

最后

两个库官方文档如下,更多用法等你发掘。 可以试试 pip install tclidemo==0.1.4 哦

https://typer.tiangolo.com/		# typer
https://python-poetry.org/docs/ # poetry

参考文档:https://click-docs-zh-cn.readthedocs.io/zh/latest/setuptools.html

快速构建CLI程序并发布到PyPi的更多相关文章

  1. 使用SpringBoot快速构建应用程序

    1.Spring MVC和Spring Boot自带的web构建方式有所区别.Spring提供了spring-boot-starter-web自动配置模块. 2. 添加如下依赖 <depende ...

  2. 5分钟快速构建苹果IPA免费发布服务器

    在ios的开发中, 通过苹果的各种秘钥加密, 我们会生成一个.ipa文件,这就是我们的应用软件的安装包. 这个文件是能被安装到iphone/ipad上的.可是,如何才能让不在身边的人安装上这个应用呢? ...

  3. Apache Commons CLI官方文档翻译 —— 快速构建命令行启动模式

    昨天通过几个小程序以及Hangout源码学习了CLI的基本使用,今天就来尝试翻译一下CLI的官方使用手册. 下面将会通过几个部分简单的介绍CLI在应用中的使用场景. 昨天已经联系过几个基本的命令行参数 ...

  4. 快速构建Windows 8风格应用3-打包发布应用

    原文:快速构建Windows 8风格应用3-打包发布应用 本篇博文主要介绍如何打包应用程序,成功后如何部署应用程序,最后介绍如何发布应用程序到应用商店中. 如何打包Windows 8风格应用程序呢? ...

  5. 快速构建Windows 8风格应用36-商店应用发布流程

    原文:快速构建Windows 8风格应用36-商店应用发布流程 引言 在发布应用之前,我们需要注册开发者账号才能够发布应用.我们可以登录https://appdev.microsoft.com/Sto ...

  6. 快速构建Windows 8风格应用37-常见发布注意事项

    原文:快速构建Windows 8风格应用37-常见发布注意事项 引言 通常我们发布Windows Store应用失败后,会返回一些错误需要我们去修改.我之前在给学生做培训的时候发现大部分同学应用被打回 ...

  7. 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序

    http://blog.csdn.net/wingfourever/article/details/7726724 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX ...

  8. Java Swing快速构建窗体应用程序

    以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一 ...

  9. 两小时快速构建微信小程序

    小程序在2017年1月上线之初,被社会极力吹捧,刻意去将其制造为一个“风口”,透支其价值.但是在之后一个月里,石破天惊迅速归为沉寂.媒体又开始过度消费小程序,大谈其鸡肋之处. 个人认为小程序的一个分水 ...

随机推荐

  1. mysql 版本在springboot 中定义位置

  2. js学习笔记之this指向及形参实参

    var length = 10 function fn () { console.log(this.length) } var obj = { length: 5, method (fn) { fn( ...

  3. 『go成长之路』 defer 作用、典型用法以及多个defer调用顺序,附加defer避坑点,拿来吧你

    预习内容 defer 的作用有哪些? 多个 defer 的执行顺序是怎样的? defer,return,函数返回值 三者之间的执行顺序 defer的作用 go中的defer是延迟函数,一般是用于释放资 ...

  4. 控制流程之if判断与while、for循环

    一.if判断 1.什么是if判断? 接收用户输入的名字 接受用户输入的密码 如果用户输入的名字=正确的名字 并且 用户输入的密码=正确的密码 告诉用户登录成功 否则, 告诉用户登录失败 2.为何要有i ...

  5. 学习vue过程中遇到的问题

    1.vue-quill-editor动态禁用 项目中把vue-quill-editor单独封装成了一个组件,通过props传递readOnly参数来设置是否禁用editor.开发中发现可以实现禁用效果 ...

  6. OOP面向对象程序设计原则

    OOP面向对象程序设计原则 开闭原则(Open Close Principle) 对扩展开放,对修改关闭 里氏代换原则(Liskov Substitution Principle) 继承必须确保超累所 ...

  7. Visio操作【未完】

    Visio 1.如何操作文档 新建基本框图和空白框图 单击基本框图打开后有模具 空白框图打开之后并没有形状 左下角发现有 更改纸张方向大小 自动调整大小: 如果我们选择形状进入到我们的页面,如果放到边 ...

  8. git 强制放弃本地修改(新增、删除文件)

    本地修改了一些文件,其中包含修改.新增.删除的. 不需要了,想要丢弃,于是做了git check -- .操作,但是只放弃了修改的文件,新增和删除的仍然没有恢复. 于是百度了下,使用如下命令: git ...

  9. 计算机网络:基于iptalbes的SANT和DNAT|docker的服务器发布项目--超详细一看就会

     项目说明: 模拟企业让内网服务器可以上网,同时发布内网的服务器 1.实验环 我们需要准备三台linux系统,一台作为路由器机route,其它为客户机client-1.client-2 主机改名 ho ...

  10. CNVD-2021-14536 锐捷 RG-UAC 统一上网行为管理审计系统信息泄露漏洞

    漏洞简介 锐捷 RG-UAC 统一上网行为管理审计系统存在信息泄露,攻击者通过网页源代码可间接获取管理用户账号密码,登录管理后台. 漏洞复现 fofa搜索以下关键字 title="RG-UA ...