这篇文章是将自己在浏览源码的时候见到的一些库收集起来备忘。
Python 常用库
inspect 检查现场对象
inspect 模块也被称为 检查现场对象。这里的重点在于 “现场” 二字,也就是当前运行的状态。
inspect 模块提供了一些函数来了解现场对象,包括 模块、类、实例、函数和方法。
inspect 函数主要用于以下四个方面:
- 对是否是模块、框架、函数进行类型检查
- 获取源码
- 获取类或者函数的参数信息
- 解析堆栈
eviron-config 设置和获取变量
>>> import environ
>>> # Extracts secrets from Vault-via-envconsul: 'secret/your-app':
>>> vault = environ.secrets.VaultEnvSecrets(vault_prefix="SECRET_YOUR_APP")
>>> @environ.config(prefix="APP")
... class AppConfig:
... @environ.config
... class DB:
... name = environ.var("default_db")
... host = environ.var("default.host")
... port = environ.var(5432, converter=int) # Use attrs's converters and validators!
... user = environ.var("default_user")
... password = vault.secret()
...
... env = environ.var()
... lang = environ.var(name="LANG") # It's possible to overwrite the names of variables.
... db = environ.group(DB)
... awesome = environ.bool_var()
>>> cfg = environ.to_config(
... AppConfig,
... environ={
... "APP_ENV": "dev",
... "APP_DB_HOST": "localhost",
... "LANG": "C",
... "APP_AWESOME": "yes", # true and 1 work too, everything else is False
... # Vault-via-envconsul-style var name:
... "SECRET_YOUR_APP_DB_PASSWORD": "s3kr3t",
... }) # Uses os.environ by default.
>>> cfg
AppConfig(env='dev', lang='C', db=AppConfig.DB(name='default_db', host='localhost', port=5432, user='default_user', password=<SECRET>), awesome=True)
>>> cfg.db.password
's3kr3t'
shlex 简单词法分析
常用shlex.split
配合subprocess.run
:
subprocess.run(shlex.split("cat sendtext.txt"), stdout=subprocess.PIPE, universal_newlines=True)
loguru 更强更简单的日志
可以面去大量的配置操作,逻辑清晰简单可靠。并且支持多进程,支持色彩输出。
pydantic 平替dataclass
可以说是dataclass的升级版,支持类型检查,支持json序列化,支持orm等等。
rich 彩色富文本
Rich 是一个 Python 库,可以为您在终端中提供富文本和精美格式。
Rich API 可以很容易的在终端输出添加各种颜色和不同风格。Rich 还可以绘制漂亮的表格,进度条,markdown,突出显示语法的源代码及回溯等等,不胜枚举。
另外rich还有个非常漂亮的traceback,这里告诉了如何添加使用。
tabulate 轻松实现字符表格
>>> from tabulate import tabulate
>>> table_header = ['Name', 'Chinese', 'Math', 'English']
>>> table_data = [
... ('Tom', '90', '80', '85'),
... ('Jim', '70', '90', '80'),
... ('Lucy', '90', '70', '90'),
... ]
>>> print(tabulate(table_data, headers=table_header, tablefmt='grid'))
+--------+-----------+--------+-----------+
| Name | Chinese | Math | English |
+========+===========+========+===========+
| Tom | 90 | 80 | 85 |
+--------+-----------+--------+-----------+
| Jim | 70 | 90 | 80 |
+--------+-----------+--------+-----------+
| Lucy | 90 | 70 | 90 |
+--------+-----------+--------+-----------+
中文对齐引入import wcwidth
bpython 代替原生python交互解释器
Ctrl + R
回退F7
从编辑器打开F8
将代码复制出来
文件处理
图像处理
游戏和多媒体
大数据与科学计算
人工只能与机器学习
系统与命令行
apscheduler 定时任务框架
apscheduler提供了非常丰富而且方便易用的定时任务接口
prompt_toolkit 相当强大的命令行界面工具箱
prompt_toolkit
是一个用于在Python中构建强大的交互命令行和终端应用程序的库,同时它也可用于构建全屏应用程序。
click 替代Argparse
Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 Argparse,就好比 requests 相比于 urllib。
常用click.confirm
:
import click
if click.confirm("Do you want to kick this off with an Nmap scan?", default=True):
dosomething()
typer 升级版click
pip install typer
pip install typer-cli
你不必总是要编写 CLI 应用程序,但是在编写 CLI 时,最好是无障碍的体验。继 FastAPI 巨大成功之后,Sebastián Ramírez 用同样的原则为我们带来了 Typer:一个新的库,通过利用 Python 3.6+ 的类型提示功能,可以编写命令行界面。
这个设计确实使 Typer 脱颖而出。除确保你的代码被正确地记录下来外,你还可以通过最少的努力来获得一个带有验证的 CLI 接口。使用类型提示,你可以在 Python 编辑器中获得自动完成功能(比如 VSCode),从而提高工作效率。
为增强 Typer 功能,它的内部是基于 Click 开发的,Click 是非常著名的,并且已经通过了实战检验。这意味着,它可以利用其所有的优点、社区和插件,同时用较少的样板代码从简单的开始,并在需要时添加更多的复杂性。
一如既往,它的文档真的很出色,可以作为其他项目的典范。这绝对是不容错过的作品。
但是所有这种类型的CLI都并不好看,并且不支持灵活的颜色方案,所以我将rich
和typer
结合了一起。
rich_typer完全兼容typer并且给出了更好的配色方案和样式。自定义程度也更好。
DearPyGui GUI 框架
与其他 Python GUI 库相比,Dear PyGui 具有以下独特之处:
- GPU 渲染
- 简单的内置异步功能支持
- 完整的主题和样式控制
- 简单的内置日志窗口
- 70 多个小部件具有数百种小部件组合
- 详细的文档,示例和无与伦比的支持
数据库
sqlmodel 替代SQLAlchemy
是 SQLAlchemy
和 pydantic
的结合
上手快,人性化,支持 autocomplete
网络
netmiko SSH
netmiko 是 parmiko
的延伸库,针对网络的场景进行了优化和简化。
ntc_templates_elinpf textFSM网络设备配置解析模板
作为ntc_templates
库的补充,增加并且维护中国主流网络设备的配置解析模板。
net_inspect 网络设备信息解析框架
net_inspect是一个基于python的网络设备数据解析自动化框架
nornir 网络设备自动化框架
nornir 是一个 Python 库,用于自动化网络设备的配置和管理。它的目标是提供一个简单的、易于使用的、可扩展的框架,以便您可以使用 Python 编写自动化脚本。
Web框架
sanic 极速异步web框架
# -*- coding:utf-8 -*-
from sanic import (
Sanic,
request,
response
)
# 创建一个 Sanic 实例对象, Sanic 是 web 服务的入口类, 它等价于 flask.Flask
# 然后里面传递一个字符串, 为我们的应用起一个名字
app = Sanic("sanic_service")
# 这里通过 @app.get("路由") 的方式和一个视图函数进行绑定
# 视图函数中的 request 参数会接收一个 sanic.request.Request 实例对象, 它包含了接收到的请求中的所有信息
# 比如我们想获取 url 中的查询参数, 那么就需要通过这里的 request 获取, 这个参数在请求到来时会自动传递
@app.get("/index")
async def index(request: request.Request):
# 这个参数我们暂时先不用, 但是一定要有
# 这里直接返回一个字符串
return response.text("hello world")
# host: 监听的IP, port: 监听的端口, auto_reload: 修改代码之后是否自动重启
app.run(host="127.0.0.1", port=8888)
simpleui Django主题
安全
schema 验证输入
不管我们做什么应用,只要和用户输入打交道,就有一个原则 – 永远不要相信用户的输入数据。意味着我们要对用户输入进行严格的验证,web 开发时一般输入数据都以 JSON 形式发送到后端 API,API 要对输入数据做验证。一般我都是加很多判断,各种if,导致代码很丑陋,能不能有一种方式比较优雅的验证用户数据呢?Schema就派上用场了。
构建封装
代码调试
mock 虚假值测试
用于测试的模块pytest-mock,将方法屏蔽掉并给出虚假的返回值。
pytest-datadir 测试时的数据文件调用
e.g
def test_read_global(shared_datadir):
contents = (shared_datadir / 'hello.txt').read_text()
pytest-asyncio 实现异步测试
安装pytest-asyncio
@pytest.mark.asyncio
async def test_main():
...
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com