python 实用库收集

这篇文章是将自己在浏览源码的时候见到的一些库收集起来备忘。

Python 常用库

inspect 检查现场对象

inspect 模块也被称为 检查现场对象。这里的重点在于 “现场” 二字,也就是当前运行的状态。
inspect 模块提供了一些函数来了解现场对象,包括 模块、类、实例、函数和方法。
inspect 函数主要用于以下四个方面:

  1. 对是否是模块、框架、函数进行类型检查
  2. 获取源码
  3. 获取类或者函数的参数信息
  4. 解析堆栈

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都并不好看,并且不支持灵活的颜色方案,所以我将richtyper结合了一起。

rich_typer完全兼容typer并且给出了更好的配色方案和样式。自定义程度也更好。

DearPyGui GUI 框架

与其他 Python GUI 库相比,Dear PyGui 具有以下独特之处:

  • GPU 渲染
  • 简单的内置异步功能支持
  • 完整的主题和样式控制
  • 简单的内置日志窗口
  • 70 多个小部件具有数百种小部件组合
  • 详细的文档,示例和无与伦比的支持

数据库

sqlmodel 替代SQLAlchemy

SQLAlchemypydantic 的结合

上手快,人性化,支持 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