跳到主要内容

第三方包推荐

blacksheep

异步 HTTP 服务器框架

piccolo

Piccolo是一个异步的Python ORM(对象关系映射器)框架,用于PostgreSQL和SQLite。

python-socketio

这个项目实现了Socket.IO客户端和服务器,可以独立运行或与各种Python网络框架集成。

semantic-version

semantic-version是一个用于管理版本号的库,可以用来比较版本号,并且可以自动生成版本号。

使用方法:

from semantic_version import Version
v1 = Version('1.2.3')
v2 = Version('1.2.4')
v1 < v2 # True

inflection

Inflection是一个字符串转换库。它将英语单词单数化和复数化,并将字符串从CamelCase转换为下划线字符串。Inflection是Ruby on Rails的inflector在Python中的一个移植。

>>> camelize("device_type")
'DeviceType'
>>> camelize("device_type", False)
'deviceType'

>>> camelize(underscore("IOError"))
'IoError'

>>> dasherize("puni_puni")
'puni-puni'

>>> humanize("employee_salary")
'Employee salary'
>>> humanize("author_id")
'Author'

>>> ordinal(1)
'st'
>>> ordinal(2)
'nd'
>>> ordinal(1002)
'nd'
>>> ordinal(1003)
'rd'
>>> ordinal(-11)
'th'
>>> ordinal(-1021)
'st'

jellyfish

jellyfish是一个用于字符串的近似和音素匹配的库。

>>> import jellyfish
>>> jellyfish.levenshtein_distance(u'jellyfish', u'smellyfish')
2
>>> jellyfish.jaro_distance(u'jellyfish', u'smellyfish')
0.89629629629629637
>>> jellyfish.damerau_levenshtein_distance(u'jellyfish', u'jellyfihs')
1

>>> jellyfish.metaphone(u'Jellyfish')
'JLFX'
>>> jellyfish.soundex(u'Jellyfish')
'J412'
>>> jellyfish.nysiis(u'Jellyfish')
'JALYF'
>>> jellyfish.match_rating_codex(u'Jellyfish')
'JLLFSH'

retrying

Retrying是一个Apache 2.0许可的通用重试库,用Python编写,以简化向任何东西添加重试行为的任务。

最简单的用例是当异常发生时,重试一个不稳定的函数,直到返回一个值。

import random
from retrying import retry

@retry
def do_something_unreliable():
if random.randint(0, 10) > 1:
raise IOError("Broken sauce, everything is hosed!!!111one")
else:
return "Awesome sauce!"

print do_something_unreliable()

starlette

Starlette是一个轻量级的ASGI框架/工具,它是在Python中构建异步网络服务的理想选择。

anyio

AnyIO是一个异步网络和并发库,可以在asyncio或trio之上工作。它在asyncio之上实现了类似trio的结构化并发(SC),并与trio本身的原生SC协调工作。

根据AnyIO的API编写的应用程序和库将在asyncio或trio上运行,不做任何修改。AnyIO也可以渐渐地被采用到一个库或应用程序中--一点一点的,不需要完全重构。它将与你所选择的后端本地库相融合。

aiofiles 异步文件操作

aiofiles是一个Apache2许可的库,用Python编写,用于处理asyncio应用程序中的本地磁盘文件。

普通的本地文件IO是阻塞的,不能轻易地、可移植地做成异步的。这意味着做文件IO可能会干扰asyncio应用程序,它不应该阻塞执行线程。aiofiles通过引入文件的异步版本,支持将操作委托给一个单独的线程池来帮助解决这个问题。

async with aiofiles.open('filename', mode='r') as f:
contents = await f.read()
print(contents)
'My file contents'

wrapt

wrapt 模块的目的是为 Python 提供一个透明的对象代理,它可以作为构造函数包装器和装饰函数的基础。

wrapt 模块非常注重正确性。因此,它远远超出了现有的机制,如 functools.wraps() ,以确保装饰器保留内省性、签名、类型检查能力等。使用该模块构建的装饰器将比典型的装饰器适用于更多的场景,并提供更可预测和一致的行为。

为了确保开销尽可能的小,一个C语言扩展模块被用于性能关键的组件。在目标系统没有编译器允许编译C语言扩展的情况下,还提供了一个自动回退到纯Python实现的功能。

import wrapt

@wrapt.decorator
def pass_through(wrapped, instance, args, kwargs):
return wrapped(*args, **kwargs)

@pass_through
def function():
pass

prettytable 表格文本生成

x.add_column("City name",
["Adelaide","Brisbane","Darwin","Hobart","Sydney","Melbourne","Perth"])
x.add_column("Area", [1295, 5905, 112, 1357, 2058, 1566, 5386])
x.add_column("Population", [1158259, 1857594, 120900, 205556, 4336374, 3806092,
1554769])
x.add_column("Annual Rainfall",[600.5, 1146.4, 1714.7, 619.5, 1214.8, 646.9,
869.4])
+-----------+------+------------+-----------------+
| City name | Area | Population | Annual Rainfall |
+-----------+------+------------+-----------------+
| Adelaide | 1295 | 1158259 | 600.5 |
| Brisbane | 5905 | 1857594 | 1146.4 |
| Darwin | 112 | 120900 | 1714.7 |
| Hobart | 1357 | 205556 | 619.5 |
| Melbourne | 1566 | 3806092 | 646.9 |
| Perth | 5386 | 1554769 | 869.4 |
| Sydney | 2058 | 4336374 | 1214.8 |
+-----------+------+------------+-----------------+

zerorpc RPC 实现

zerorpc是一个基于zeromq和messagepack的灵活RPC实现。用zerorpc暴露的服务API被称为 "zeroervices"。

class Cooler(object):
""" Various convenience methods to make things cooler. """

def add_man(self, sentence):
""" End a sentence with ", man!" to make it sound cooler, and
return the result. """
return sentence + ", man!"

def add_42(self, n):
""" Add 42 to an integer argument to make it cooler, and return the
result. """
return n + 42

def boat(self, sentence):
""" Replace a sentence with "I'm on a boat!", and return that,
because it's cooler. """
return "I'm on a boat!"

import zerorpc

s = zerorpc.Server(Cooler())
s.bind("tcp://0.0.0.0:4242")
s.run()

Streamlit

FastUI

NiceGUI

Pendulum

Pendulum是一个Python日期/时间库,它提供了一个更方便的API,用于处理常见的使用情况。

>>> import pendulum

>>> now_in_paris = pendulum.now('Europe/Paris')
>>> now_in_paris
'2016-07-04T00:49:58.502116+02:00'

# Seamless timezone switching
>>> now_in_paris.in_timezone('UTC')
'2016-07-03T22:49:58.502116+00:00'

>>> tomorrow = pendulum.now().add(days=1)
>>> last_week = pendulum.now().subtract(weeks=1)

>>> past = pendulum.now().subtract(minutes=2)
>>> past.diff_for_humans()
'2 minutes ago'

>>> delta = past - last_week
>>> delta.hours
23
>>> delta.in_words(locale='en')
'6 days 23 hours 58 minutes'

# Proper handling of datetime normalization
>>> pendulum.datetime(2013, 3, 31, 2, 30, tz='Europe/Paris')
'2013-03-31T03:30:00+02:00' # 2:30 does not exist (Skipped time)

# Proper handling of dst transitions
>>> just_before = pendulum.datetime(2013, 3, 31, 1, 59, 59, 999999, tz='Europe/Paris')
'2013-03-31T01:59:59.999999+01:00'
>>> just_before.add(microseconds=1)
'2013-03-31T03:00:00+02:00'