导航

内容来源于网络

前言

分享Github开源项目,在玩的过程中学习,2023年每天的目标就是研究几个项目,寻找点乐趣。

开源项目

001.awesome-python-webapp

这是“小白的Python教程”中“实战”章的完整网站 + iOS App源码。

要查看示例网站运行效果,猛击:在线阅读

002.rocketry

更加人性化的 Python 调度库。可通过 Python 装饰器语法,进行任务调度的 Python 库。它简单、优雅、高效,支持定时、并发(异步、多线程、多进程)、条件触发等功能。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
from rocketry import Rocketry
from rocketry.conds import daily

app = Rocketry()

@app.task(daily)
def do_daily():
...

if __name__ == '__main__':
app.run()

003.reloadium

Python 热重载调试工具。在不重启程序的前提下,通过这个项目可以查看改动后、最新的 Python 代码运行效果,以及每行代码的耗时。有了它可以更高效地调试 Python 代码,强烈推荐在 PyCharm 和 VSCode 上使用。

004.tushare

TuShare是实现对股票/期货等金融数据从数据采集、清洗加工 到 数据存储过程的工具,满足金融量化分析师和学习数据分析的人在数据获取方面的需求,它的特点是数据覆盖范围广,接口调用简单,响应快速。TuShare 文档

005.algorithm

如果要成为一个有一定水平的程序员,算法是必须要会的。算法,让你的程序变得更有灵气。官方网站

006.luokr.com

Python Tornado 写的开源网站——螺壳网,访问

007.mincss

Python 写的用来找到 CSS 中没有用到的代码片段,并删除。适用于:想要做一个页面,但是不会写 CSS 人。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/env python
from __future__ import print_function
import sys, os
import time
sys.path.insert(0, os.path.abspath('.'))
from mincss.processor import Processor

DEFAULT_URL = 'http://localhost:9000/page.html'

def run(url):
p = Processor()
t0 = time.time()
p.process(url)
t1 = time.time()

print("INLINES ".ljust(79, '-'))
total_size_before = 0
total_size_after = 0
# for each in p.inlines:
# print("On line %s" % each.line)
# print('- ' * 40)
# print("BEFORE")
# print(each.before)
# total_size_before += len(each.before)
# print('- ' * 40)
# print("AFTER:")
# print(each.after)
# total_size_after += len(each.after)
# print("\n")
#
# print("LINKS ".ljust(79, '-'))
# for each in p.links:
# print("On href %s" % each.href)
# print('- ' * 40)
# print("BEFORE")
# print(each.before)
# total_size_before += len(each.before)
# print('- ' * 40)
# print("AFTER:")
# print(each.after)
# print("\n")
#
# print("LINKS ".ljust(79, '-'))
# for each in p.links:
# print("On href %s" % each.href)
# print('- ' * 40)
# print("BEFORE")
# print(each.before)
# total_size_before += len(each.before)
# print('- ' * 40)
# print("AFTER:")
# print(each.after)
# total_size_after += len(each.after)
# print("\n")

print(
"TOOK:".ljust(20),
"%.5fs" % (t1 - t0)
)
print(
"TOTAL SIZE BEFORE:".ljust(20),
"%.1fKb" % (total_size_before / 1024.0)
)
print(
"TOTAL SIZE AFTER:".ljust(20),
"%.1fKb" % (total_size_after / 1024.0)
)


if __name__ == '__main__':
urls = sys.argv[1:]
if not urls:
urls = [DEFAULT_URL]
for url in urls:
run(url)

008.python-gems

有趣的 Pyhton 代码片段集合

009.python-goose

Goose 用于文章提取器,提取中文内容的示例代码:

1
2
3
4
5
6
7
8
9
10
11
>>> from goose import Goose
>>> from goose.text import StopWordsChinese
>>> url = 'http://www.bbc.co.uk/zhongwen/simp/chinese_news/2012/12/121210_hongkong_politics.shtml'
>>> g = Goose({'stopwords_class': StopWordsChinese})
>>> article = g.extract(url=url)
>>> print article.cleaned_text[:150]
香港行政长官梁振英在各方压力下就其大宅的违章建筑(僭建)问题到立法会接受质询,并向香港民众道歉。

梁振英在星期二(1210日)的答问大会开始之际在其演说中道歉,但强调他在违章建筑问题上没有隐瞒的意图和动机。

一些亲北京阵营议员欢迎梁振英道歉,且认为应能获得香港民众接受,但这些议员也质问梁振英有

010.KindleEar

这是一个运行在Google App Engine(GAE)上的Kindle个人推送服务应用,生成排版精美的杂志模式mobi/epub格式自动每天推送至您的Kindle或其他邮箱。

此应用目前的主要功能有:

  • 支持类似Calibre的recipe格式的不限量RSS/ATOM或网页内容收集
  • 不限量自定义RSS,直接输入RSS/ATOM链接和标题即可自动推送
  • 多账号管理,支持多用户和多Kindle
  • 生成带图的杂志格式mobi或带图的有目录epub
  • 自动每天定时推送
  • 内置共享库,可以直接订阅其他网友分享的订阅源,也可以分享自己的订阅源给其他网友
  • 强大而且方便的邮件中转服务
  • 和Evernote/Pocket/Instapaper等系统的集成

011.walle-web

Walle(瓦力) 让用户代码发布终于可以不只能选择 jenkins!支持各种web代码发布,php、java、python、go等代码的发布、回滚可以通过web来一键完成。walle 一个可自由配置项目,更人性化,高颜值,支持git、多用户、多语言、多项目、多环境同时部署的开源上线部署系统。部署安装

012.flask-admin

Flask-Admin是一个易于使用的Flask扩展,可让您向 Flask 应用程序添加管理界面。它的灵感来自 django-admin 包,但以这样的方式实现 开发人员可以完全控制生成的应用程序的外观、感觉和功能的一种方式,开箱即用。文档

013.python-guide

Requests 库的作者——kennethreitz,写的 Python 入门教程。不单单是语法层面的,涵盖项目结构、代码风格,进阶、工具等方方面面。中文翻译版/在线阅读

014.python-sdk

七牛云存储 SDK。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
import qiniu
...
q = qiniu.Auth(access_key, secret_key)
key = 'hello'
data = 'hello qiniu!'
token = q.upload_token(bucket_name)
ret, info = qiniu.put_data(token, key, data)
if ret is not None:
print('All is OK')
else:
print(info) # error message in info
...

015.flaskbb

基于 Flask 框架做的论坛,功能有限,轻量级的论坛应用在线文档,可以在这个项目上进行二次开发,实现更加复杂的功能。在线预览

016.fuck-login

模拟登录一些知名的网站,为了方便爬取需要登录的网站。注意:控制爬虫的爬取频率!

017.superset

一个现代数据探索和数据可视化平台,现代、企业就绪的商业智能 Web 应用程序。

018.amazing-qr

Python 写的生成动态、彩色、各式各样的二维码中文文档

019.textfilter

敏感词过滤的几种实现+某1w词敏感词库

020.Young

Young是一个用Python写的功能丰富的、界面小清新的类似NodeBB的社区软件。详细的安装步骤

特性:

  • 话题按主题分类,你可以查看某一主题的话题
  • 支持匿名发帖,匿名评论
  • 社交功能(朋友圈,发状态)
  • 像QQ一样即时聊天
  • 实时提醒
  • 资源分享

021.fake-useragent

伪装浏览器身份,常用于爬虫。这个项目的代码很少,可以阅读一下,看看 ua.random 是如何返回随机的浏览器身份的😁

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from fake_useragent import UserAgent
ua = UserAgent()

ua.ie
# Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US);
ua.msie
# Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)'
ua['Internet Explorer']
# Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)
ua.opera
# Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11
ua.chrome
# Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2'
ua.google
# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13
ua['google chrome']
# Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
ua.firefox
# Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1
ua.ff
# Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1
ua.safari
# Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25

# and the best one, get a random browser user-agent string
ua.random

022.httpie

非常好用的命令行 HTTP 客户端,cURL 的替代者,返回的结果支持高亮,提高了可读性。用于调试接口、查看服务器返回的 HTTP 协议的信息。在线文档

023.langid.py

用于识别输入文本数据所属的语种,目前支持 97 种语言识别。

024.httpstat

以一种美观和清晰的方式可视化统计数据。同时它无依赖、兼容 Python3。

025.PyMySQL

纯 Pyton 写的 MySQL 库,纯 Python 的好处就是可以运行在任何装有 Python 解释器(CPython、PyPy、IronPython)的平台上。相对于 MySQLdb 性能几乎一样,使用方法也一样。

安装方法:

1
$ python3 -m pip install PyMySQL

示例代码:

1
2
3
4
5
6
7
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(255) COLLATE utf8_bin NOT NULL,
`password` varchar(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
AUTO_INCREMENT=1 ;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pymysql.cursors

# Connect to the database
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
database='db',
cursorclass=pymysql.cursors.DictCursor)

with connection:
with connection.cursor() as cursor:
# Create a new record
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('webmaster@python.org', 'very-secret'))

# connection is not autocommit by default. So you must commit to save
# your changes.
connection.commit()

with connection.cursor() as cursor:
# Read a single record
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('webmaster@python.org',))
result = cursor.fetchone()
print(result)

结果输出:

1
{'password': 'very-secret', 'id': 1}

026.reddit

reddit.com 网站的源码,通过这个项目,可以学习 Python 在构建大型项目中的使用、项目结构、代码风格、Python 技巧的使用方法等。安装教程

027.flask-limiter

一个 Flask 的扩展库,它可以根据访问者的 IP 限制其访问频率、次数等。文档

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
limiter = Limiter(
get_remote_address,
app=app,
default_limits=["200 per day", "50 per hour"],
storage_uri="memory://",
)


@app.route("/slow")
@limiter.limit("1 per day")
def slow():
return ":("


@app.route("/medium")
@limiter.limit("1/second", override_defaults=False)
def medium():
return ":|"


@app.route("/fast")
def fast():
return ":)"


@app.route("/ping")
@limiter.exempt
def ping():
return "PONG"

028.glances

一个可以让你一目了然你的系统情况(类 (h)top)的工具,它界面友好,安装方便。

029.ngrok

一个十分方便、好用的内网穿透工具,它可以把本地某个端口的服务,通过一个安全隧道,映射到公网的一个地址。同时它提供了一个 Web 页面,展示了每个请求、响应的所有信息,便于调试本地的程序。

基本的使用方法如下:

1
2
3
4
5
6
7
8
9
10
11
ngrok http 80
ngrok http 80 --oidc=https://myorg.okta.com --oidc-client-id=[id] --oidc-client-secret=[secret]
ngrok http 80 --oauth=google --oauth-allow-domain=[domain.com]
ngrok http 80 --oauth=github --oauth-scope=repo
ngrok http 80 --verify-webhook=slack --verify-webhook-secret=[secret]
ngrok http 80 --cidr-allow $(curl http://ifconfig.me/ip)/32
ngrok http 80 --request-header-add "country: \${.ngrok.geo.country_code}"
ngrok http 80 --response-header-add "content-security-policy: self;"
ngrok http 80 --mutual-tls-cas=[root-ca.pem]
ngrok tcp 22
ngrok http "file://$(pwd)"

030.jumpserver

JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。

JumpServer 使用 Python 开发,配备了业界领先的 Web Terminal 方案,交互界面美观、用户体验好。

JumpServer 采纳分布式架构,支持多机房跨区域部署,支持横向扩展,无资产数量及并发限制。

特色优势

  • 开源: 零门槛,线上快速获取和安装;
  • 分布式: 轻松支持大规模并发访问;
  • 无插件: 仅需浏览器,极致的 Web Terminal 使用体验;
  • 多租户: 一套系统,多个子公司或部门同时使用;
  • 多云支持: 一套系统,同时管理不同云上面的资产;
  • 云端存储: 审计录像云端存储,永不丢失;
  • 多应用支持: 数据库,Windows远程应用,Kubernetes。

031.locust

Locust 是一种易于使用、可编写脚本且可扩展的性能测试工具。您可以在常规 Python 代码中定义用户的行为,而不是受仅假装为真实代码的 UI 或领域特定语言的约束。

032.saythanks.io

Kennethreitz 写的一个简单的网站(基于 Flask),用于向开源项目作者发送感谢邮件的 Web App。该项目结构简单,可以用来学习大神是如何快速开发 Web 项目、方法、代码风格、开发常用库。网站地址

033.fastText

fastText 简而言之,就是把文档中所有词通过 lookup table 变成向量,取平均后直接用线性分类器得到分类结果。FastText的demo实现及其评估

034.mongoaudit

强大的 MongoDB 渗透测试工具,用于发掘 MongoDB 漏洞、并提出改善方法。

  • 安装:pip install mongoaudit
  • 运行:python mongoaudit

035.sh

sh 是一个成熟,用于替代 subprocess,它允许你调用任何程序,就像它是一个函数,支持 Python2.6 - 3.5

示例代码:

1
2
from sh import ifconfig
print(ifconfig("wlan0"))

036.drf-yasg

为 Django Rest Framework 接口自动生成 Swagger 接口文档的库

037.Python

用 Python 实现所有算法。该项目是用 Python 语言实现各种算法的集合,主要用于教育和学习。包括搜索、排序、数据结构、机器学习、密码、神经网络等方面

038.python-mini-projects

一个简单的 Python 迷你脚本集合。虽然代码简单但其中不乏实用的 Python 脚本,比如图片添加水印、批量下载图片、发送电子邮件、定时截屏等

039.tstock

在命令行看股票走势的工具

040.mycli

mycli 是一个带语法高亮、自动补全的 MySQL 命令行客户端工具。

041.python-fire

Fire 是 Google 开源的 Python 库,可自动将您的代码转变成 CLI,无需您做任何额外工作。您不必定义参数,设置帮助信息,或者编写定义代码运行方式的 main 函数。相反,您只需从 main 模块调用“Fire”函数,其余工作全部交由 Python Fire 来完成。

示例代码如下:

1
2
3
4
5
6
7
import fire

def hello(name="World"):
return "Hello %s!" % name

if __name__ == '__main__':
fire.Fire(hello)

通过下面方式运行结果:

1
2
3
python hello.py  # Hello World!
python hello.py --name=David # Hello David!
python hello.py --help # Shows usage information.

042.algorithms

基本算法、数据结构的 Python 实现

043.grequests

Rquests + Gevent 让异步 HTTP 变得简单、人性化。

示例代码:

1
2
3
4
5
6
7
8
9
10
import grequests

urls = [
'http://www.heroku.com',
'http://python-tablib.org',
'http://httpbin.org',
'http://python-requests.org',
'http://fakedomain/',
'http://kennethreitz.com'
]

044.ltp

LTP(Language Technology Platform) 提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。

045.ngxtop

解析 nginx 访问日志并格式化输出有用的信息,可以用来实时了解你的服务器正在发生的情况。安装命令 pip install ngxtop,输出示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ ngxtop
running for 411 seconds, 64332 records processed: 156.60 req/sec

Summary:
| count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx |
|---------+------------------+-------+-------+-------+-------|
| 64332 | 2775.251 | 61262 | 2994 | 71 | 5 |

Detailed:
| request_path | count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx |
|------------------------------------------+---------+------------------+-------+-------+-------+-------|
| /abc/xyz/xxxx | 20946 | 434.693 | 20935 | 0 | 11 | 0 |
| /xxxxx.json | 5633 | 1483.723 | 5633 | 0 | 0 | 0 |
| /xxxxx/xxx/xxxxxxxxxxxxx | 3629 | 6835.499 | 3626 | 0 | 3 | 0 |
| /xxxxx/xxx/xxxxxxxx | 3627 | 15971.885 | 3623 | 0 | 4 | 0 |
| /xxxxx/xxx/xxxxxxx | 3624 | 7830.236 | 3621 | 0 | 3 | 0 |
| /static/js/minified/utils.min.js | 3031 | 1781.155 | 2104 | 927 | 0 | 0 |
| /static/js/minified/xxxxxxx.min.v1.js | 2889 | 2210.235 | 2068 | 821 | 0 | 0 |
| /static/tracking/js/xxxxxxxx.js | 2594 | 1325.681 | 1927 | 667 | 0 | 0 |
| /xxxxx/xxx.html | 2521 | 573.597 | 2520 | 0 | 1 | 0 |
| /xxxxx/xxxx.json | 1840 | 800.542 | 1839 | 0 | 1 | 0 |

046.searx

分分钟打造一个聚合的搜索引擎,使用简单,部署方便。拓展方便,基于插件式的管理。文档

047.certbot

免费的自动启用和部署 HTTPS 的工具,让你的网站开启 HTTPS 变得简单快捷。在部署教程页面选择服务器的操作系统和 Web 服务器,之后根据给出的步骤一步步的执行命令就行了,文档

048.explainshell

一个可以解析 Linux 命令的网站,它可以给出命令的解释和其参数的解释,例如:ps -aux|grep python在线演示

049.pdir2

Python 程序员需要一个更好的 dir() —— 以更加友好的显示 dir() 输出的结果

050.aredis

一款基于 Python3 asyncio 的异步 redis 客户端,支持对于单实例,连接池, 哨兵以及集群。文档

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import asyncio
from aredis import StrictRedis

async def example():
client = StrictRedis(host='127.0.0.1', port=6379, db=0)
await client.flushdb()
await client.set('foo', 1)
assert await client.exists('foo') is True
await client.incr('foo', 100)

assert int(await client.get('foo')) == 101
await client.expire('foo', 1)
await asyncio.sleep(0.1)
await client.ttl('foo')
await asyncio.sleep(1)
assert not await client.exists('foo')

loop = asyncio.get_event_loop()
loop.run_until_complete(example())

051.HelloDjango-blog-tutorial

免费、中文、零基础,完整的项目,基于最新版 Django 1.10 和 Python 3.5。带你从零开始一步步开发属于自己的博客网站,帮助你以最快的速度掌握 Django 开发的技巧。成品在线预览

052.freezegun

时间漫步模块,模拟到某一个时间,使用简单方式多样,实现了装饰器、上下文等调用方式。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from freezegun import freeze_time
import datetime
import unittest

# Freeze time for a pytest style test:

@freeze_time("2012-01-14")
def test():
assert datetime.datetime.now() == datetime.datetime(2012, 1, 14)

# Or a unittest TestCase - freezes for every test, and set up and tear down code

@freeze_time("1955-11-12")
class MyTests(unittest.TestCase):
def test_the_class(self):
assert datetime.datetime.now() == datetime.datetime(1955, 11, 12)

# Or any other class - freezes around each callable (may not work in every case)

@freeze_time("2012-01-14")
class Tester(object):
def test_the_class(self):
assert datetime.datetime.now() == datetime.datetime(2012, 1, 14)

# Or method decorator, might also pass frozen time object as kwarg

class TestUnitTestMethodDecorator(unittest.TestCase):
@freeze_time('2013-04-09')
def test_method_decorator_works_on_unittest(self):
self.assertEqual(datetime.date(2013, 4, 9), datetime.date.today())

@freeze_time('2013-04-09', as_kwarg='frozen_time')
def test_method_decorator_works_on_unittest(self, frozen_time):
self.assertEqual(datetime.date(2013, 4, 9), datetime.date.today())
self.assertEqual(datetime.date(2013, 4, 9), frozen_time.time_to_freeze.today())

@freeze_time('2013-04-09', as_kwarg='hello')
def test_method_decorator_works_on_unittest(self, **kwargs):
self.assertEqual(datetime.date(2013, 4, 9), datetime.date.today())
self.assertEqual(datetime.date(2013, 4, 9), kwargs.get('hello').time_to_freeze.today())

053.musicbox

高品质网易云音乐命令行版本,简洁优雅,丝般顺滑,基于 Python 编写。

054.snake

贪吃蛇游戏 AI 版,通过算法实现让小蛇通过吃豆,最后蛇的身体填满整个地图算结束。该项目详细描述实现思想以及相关算法的讨论

055.python-console-snake

命令行贪吃蛇

056.redash

开源的数据可视化 Web 项目,提供了数据库查询和数据可视化功能。只提供的数据可视化最要的功能,使得简单易用且容易上手。可以直观地将一个 SQL 查询的结果可视化出来。同时提供 SQL 代码片段存储,减少重复编写 SQL 的问题

057.rq

基于 redis 的简单、轻量级任务队列库。可以帮助理解简单的任务队列模式和设计。使用简单、文档健全,适用于小型项目或简单的场景。

1
2
3
4
5
6
import requests

def count_words_at_url(url):
"""Just an example function that's called async."""
resp = requests.get(url)
return len(resp.text.split())

058.toapi

该项目做的事儿是通过简单的配置把目标网页的内容爬下来,缓存结果后提供成 API 的一条龙服务。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from flask import request
from htmlparsing import Attr, Text
from toapi import Api, Item

api = Api()


@api.site('https://news.ycombinator.com')
@api.list('.athing')
@api.route('/posts?page={page}', '/news?p={page}')
@api.route('/posts', '/news?p=1')
class Post(Item):
url = Attr('.storylink', 'href')
title = Text('.storylink')


@api.site('https://news.ycombinator.com')
@api.route('/posts?page={page}', '/news?p={page}')
@api.route('/posts', '/news?p=1')
class Page(Item):
next_page = Attr('.morelink', 'href')

def clean_next_page(self, value):
return api.convert_string('/' + value, '/news?p={page}', request.host_url.strip('/') + '/posts?page={page}')


api.run(debug=True, host='0.0.0.0', port=5000)

059.airflow

定时任务管理平台,管理和调度各种离线定时任务,自带 Web 管理界面。当定时任务量达到百级别的时候,就无法再使用 crontab 有效、方便地管理这些任务了。该项目就是为了解决了这个问题而诞生的

060.pook

模拟 HTTP 请求结果的库,可用于单元测试等场景。采用装饰器方式调用的示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
import pook
import requests

@pook.get('http://httpbin.org/status/500', reply=204)
@pook.get('http://httpbin.org/status/400', reply=200)
def fetch(url):
return requests.get(url)

res = fetch('http://httpbin.org/status/400')
print('#1 status:', res.status_code)

res = fetch('http://httpbin.org/status/500')
print('#2 status:', res.status_code)

061.Synonyms

synonyms可以用于自然语言理解的很多任务:文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等。

示例代码:

1
2
import synonyms
synonyms.display('能量')

062.What the f*ck Python!

一些有趣且鲜为人知的 Python 特性。中文文档

063.shell-functools

把函数式的编程带入 shell,从而让很多事情变得简单。通过 Python 的高阶函数和内置模块 os.path 与命令的管道结合,达到了强大、高效的功效。相比于单纯的命令实现更加的直观和容易理解。

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
示例 1
# ls 查看当前目录下的文件
> ls
document.txt
folder
image.jpg

# 通过 map abspath 展示这些文件的绝对路径
> ls | map abspath
/tmp/demo/document.txt
/tmp/demo/folder
/tmp/demo/image.jpg

示例 2
# find 命令找到的文件和目录
> find
.
./folder
./folder/me.jpg
./folder/subdirectory
./folder/subdirectory/song.mp3
./document.txt
./image.jpg

# 把找到的结果中的文件,重命名在末尾追加 .bak (备份文件)
> find | filter is_file | map basename | map append ".bak"
me.jpg.bak
song.mp3.bak
document.txt.bak
image.jpg.bak

064.tqdm

强大、快速、易扩展的 Python 进度条库。

1
2
3
4
5
from tqdm import tqdm
for i in tqdm(range(10000)):
...
# 输出结果:
# 76%|████████████████████████████ | 7568/10000 [00:33<00:10, 229.00it/s]

065.getproxy

极简的抓取代理项目,无需配置。不仅提供了获取代理脚本,同时可以通过该页面,直接获取可用代理(15min 更新、类型包含http和https)

066.Macast

Macast是一个跨平台的 菜单栏\状态栏 应用,用户可以使用电脑接收发送自手机的视频、图片和音乐,支持主流视频音乐软件和其他任何符合DLNA协议的投屏软件。

067.LearnPython

这一个以”撸代码“的形式学习 Python 的编程技巧的项目,针对 Python 的一些语法特性力求通过代码例子解释该知识点、同时还有一些实践项目,通过动手实践有助于知识的融会贯通。同时可以关注作者的知乎专栏学习更多的 Python 编程技巧

068.syncPlaylist

在网易云音乐与 QQ 音乐之间同步歌单。易于使用、配置方便、代码简单,用到的技术:requests + beautifulsoup4 以及 selenium

069.haipproxy

使用 Scrapy+Redis 实现的高可用分布式 IP 代理池,为大型分布式爬虫提供高可用低延迟的代理 IP 资源。

以单机模式部署haipproxy和测试代码,以知乎为目标请求站点,实测抓取效果如下:

示例代码:

1
2
3
4
5
6
7
8
9
from client.py_cli import ProxyFetcher
args = dict(host='127.0.0.1', port=6379, password='123456', db=0)
# 这里`zhihu`的意思是,去和`zhihu`相关的代理ip校验队列中获取ip
# 这么做的原因是同一个代理IP对不同网站代理效果不同
fetcher = ProxyFetcher('zhihu', strategy='greedy', redis_args=args)
# 获取一个可用代理
print(fetcher.get_proxy())
# 获取可用代理列表
print(fetcher.get_proxies()) # or print(fetcher.pool)

070.MovieHeavens

基于Pyqt5的电影天堂电影搜索工具,为了避免找电影期间的各种广告,以及各种页面跳转

071.WechatSogou

基于搜狗微信搜索的微信公众号爬虫库,极易上手。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
In [5]: import wechatsogou
...:
...: ws_api =wechatsogou.WechatSogouAPI()
...: ws_api.get_gzh_info('南航青年志愿者')
...:
Out[5]:
{
'authentication': '南京航空航天大学',
'headimage': 'http://img01.sogoucdn.com/app/a/100520090/oIWsFt1tmWoG6vO6BcsS7St61bRE',
'introduction': '南航大志愿活动的领跑者,为你提供校内外的志愿资源和精彩消息.',
'post_perm': 26,
'view_perm': 1000,
'profile_url': 'http://mp.weixin.qq.com/profile?src=3&timestamp=1501140102&ver=1&signature=OpcTZp20TUdKHjSqWh7m73RWBIzwYwINpib2ZktBkLG8NyHamTvK2jtzl7mf-VdpE246zXAq18GNm*S*bq4klw==',
'qrcode': 'http://mp.weixin.qq.com/rr?src=3&timestamp=1501140102&ver=1&signature=-DnFampQflbiOadckRJaTaDRzGSNfisIfECELSo-lN-GeEOH8-XTtM*ASdavl0xuavw-bmAEQXOa1T39*EIsjzxz30LjyBNkjmgbT6bGnZM=',
'wechat_id': 'nanhangqinggong',
'wechat_name': '南航青年志愿者'
}

072.faker

用于生成假数据的库,支持多种语言,你值得拥有。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ faker address
968 Bahringer Garden Apt. 722
Kristinaland, NJ 09890

$ faker -l de_DE address
Samira-Niemeier-Allee 56
94812 Biedenkopf

$ faker profile ssn,birthdate
{'ssn': '628-10-1085', 'birthdate': '2008-03-29'}

$ faker -r=3 -s=";" name
Willam Kertzmann;
Josiah Maggio;
Gayla Schmitt;

073.newspaper

强大的提取 Web 的内容、文章的库,支持多种语言。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>> import newspaper
>>> sina_paper = newspaper.build('http://www.sina.com.cn/', language='zh')

>>> for category in sina_paper.category_urls():
>>> print(category)
http://health.sina.com.cn
http://eladies.sina.com.cn
http://english.sina.com
...

>>> article = sina_paper.articles[0]
>>> article.download()
>>> article.parse()

>>> print(article.text)
新浪武汉汽车综合 随着汽车市场的日趋成熟,
传统的“集全家之力抱得爱车归”的全额购车模式已然过时,
另一种轻松的新兴 车模式――金融购车正逐步成为时下消费者购
买爱车最为时尚的消费理念,他们认为,这种新颖的购车
模式既能在短期内
...

>>> print(article.title)
两年双免0手续0利率 科鲁兹掀背金融轻松购_武汉车市_武汉汽
车网_新浪汽车_新浪网

074.pygorithm

一个帮助学习主要算法的库,可以通过理解这些算法的实现,提高自己的算法水平。

示例代码:

1
2
3
4
5
6
7
8
9
from pygorithm.sorting import bubble_sort

# This will print the code for bubble sort
print(bubble_sort.get_code())

my_list = [12, 4, 2, 14, 3, 7, 5]

# to sort the list
sorted_list = bubble_sort.sort(my_list)

075.huey

结合 redis 实现的轻量任务队列,但是支持功能还是很多的:

  • 多进程、多线程、协程
  • 任务定时执行
  • 任务执行失败重试
  • 结果存储

076.proxy_pool

爬虫代理IP池项目,主要功能为定时采集网上发布的免费代理验证入库,定时验证入库的代理保证代理的可用性,提供API和CLI两种使用方式。同时你也可以扩展代理源以增加代理池IP的质量和数量。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import requests

def get_proxy():
return requests.get("http://127.0.0.1:5010/get/").json()

def delete_proxy(proxy):
requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))

# your spider code

def getHtml():
# ....
retry_count = 5
proxy = get_proxy().get("proxy")
while retry_count > 0:
try:
html = requests.get('http://www.example.com', proxies={"http": "http://{}".format(proxy)})
# 使用代理访问
return html
except Exception:
retry_count -= 1
# 删除代理池中代理
delete_proxy(proxy)
return None

077.pyecharts

Apache ECharts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from pyecharts.charts import Bar
from pyecharts import options as opts

# V1 版本开始支持链式调用
bar = (
Bar()
.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"))
)
bar.render()

# 不习惯链式调用的开发者依旧可以单独调用方法
bar = Bar()
bar.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
bar.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
bar.set_global_opts(title_opts=opts.TitleOpts(title="某商场销售情况"))
bar.render()

078.simiki

Simiki 是一个简单的个人Wiki框架。使用Markdown书写Wiki, 生成静态HTML页面。Wiki源文件按目录分类存放, 方便管理维护。中文文档

079.weibospider

分布式微博爬虫,支持快速抓取和稳定抓取两种运行模式。项目模块逻辑清晰、注释丰富、便于定制化自己的需求。中文文档

080.joblib

使用 Python 方便的进行并行计算

示例代码如下:

1
2
3
from joblib import Parallel, delayed
from math import sqrt
Parallel(n_jobs=1)(delayed(sqrt)(i**2) for i in range(10))

081.records

Kenneth Reitz 大神的for Humans™系列,Records 是一个支持大多数主流关系数据库的原生 SQL 查询第三方库。API 友好,使用简单、支持命令行模式、功能多样。与此同时该库只有 500 行代码,可以当作入门阅读源码的项目,同时学习大神的编程技巧与习惯

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import records

db = records.Database('postgres://...') # 连接数据库
rows = db.query('select * from active_users') # 执行原生 SQL
# 遍历结果
for r in rows:
print(r.name, r.user_email)

# 友好的 print 格式
print(rows.dataset)
# username|active|name |user_email |timezone
# --------|------|----------|-----------------|--------------------------
# model-t |True |Henry Ford|model-t@gmail.com|2016-02-06 22:28:23.894202

# 支持将结果导出成不同格式
print(rows.export('json')) # json
print(rows.export('csv')) # csv
print(rows.export('yaml')) # yaml
rows.export('df') # pandas 的 df 对象
with open('report.xls', 'wb') as f:
f.write(rows.export('xls')) # xls

082.tldr-python-client

Linux man 解释一般都太长了,很多时候我们就想用一些比较常用的命令,但却记不起来。这个时候如果不 Google,就可以用 tldr(简化 man 的工程)。该项目为 Python 客户端实现

083.zdict

方便的终端字典工具,支持多种字典和参数、翻译结果高亮、以及交互模式查询。

084.binlog2sql

从MySQL binlog解析出你要的SQL。根据不同选项,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。

  • 数据快速回滚(闪回)闪回原理与实践
  • 主从切换后新 master 丢数据的修复
  • 从 binlog 生成标准SQL,带来的衍生功能

085.ItChat

itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人。

示例代码:

1
2
3
4
5
import itchat

itchat.auto_login()

itchat.send('Hello, filehelper', toUserName='filehelper')

086.pandas-tutorial

当今最热的职业是数据科学,数据科学领域应用最广泛的编程语言是python,python这么火的原因就是其有一个功能强大的数据科学库:pandas。这套 pandas 教程包含从初级到进阶的内容,适合初学者和希望进阶建立知识体系的数据科学从业者阅读。

087.pysheeet

Python 速查表在线阅读

088.robobrowser

提供多种模拟操作网页的库,比如获得网页内容、访问链接、点击按钮、填充并提交表单、上传文件。使用简单、API 友好。适用于想要通过脚本流程化操作,某些未提供这些操作接口的场景

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import re
from robobrowser import RoboBrowser

# Browse to Genius
browser = RoboBrowser(history=True)
browser.open('http://genius.com/')

# Search for Porcupine Tree
form = browser.get_form(action='/search')
form # <RoboForm q=>
form['q'].value = 'porcupine tree'
browser.submit_form(form)

# Look up the first song
songs = browser.select('.song_link')
browser.follow_link(songs[0])
lyrics = browser.select('.lyrics')
lyrics[0].text # \nHear the sound of music ...

# Back to results page
browser.back()

# Look up my favorite song
song_link = browser.get_link('trains')
browser.follow_link(song_link)

# Can also search HTML using regex patterns
lyrics = browser.find(class_=re.compile(r'\blyrics\b'))
lyrics.text # \nTrain set and match spied under the blind...

089.jieba

“结巴”中文分词:做最好的 Python 中文分词组件

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# encoding=utf-8
import jieba

jieba.enable_paddle()# 启动paddle模式。 0.40版之后开始支持,早期版本不支持
strs=["我来到北京清华大学","乒乓球拍卖完了","中国科学技术大学"]
for str in strs:
seg_list = jieba.cut(str,use_paddle=True) # 使用paddle模式
print("Paddle Mode: " + '/'.join(list(seg_list)))

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式

seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))

输出:

1
2
3
4
5
6
7
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

【精确模式】: 我/ 来到/ 北京/ 清华大学

【新词识别】:他, 来到, 了, 网易, 杭研, 大厦 (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)

【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

090.pydu

pydu(Python Data structures and Utils) 是面向Python 2 和 3 的实用数据结构和工具库。 它收集自开源项目,也有来自开发者贡献。文档

091.thefuck

在 Linux 命令行中,当你输入的命令有错误后,直接输入 fuck 就可以自动执行修复后的命令

092.youtube-dl

强大的视频下载工具,支持几百个国内外主流视频网站。正如名字一样,最初是为了下载 youtube 上的视频而开发的。如果有国外服务器的朋友,可以充分利用这个工具,下载 youtube 上的视频,速度不要太爽。具体可以参照我的文章:手把手教你用YOUTUBE-DL下载YOUTUBE视频

093.scylla

Scylla 是一款高质量的免费代理 IP 池工具,仅支持 Python 3.6。中文文档

特性如下:

  • 自动化的代理 IP 爬取与验证
  • 易用的 JSON API
  • 简单但美观的 web 用户界面,基于 TypeScript 和 React(例如,代理的地理分布)
  • 最少仅用一条命令即可启动
  • 简明直接的编程 API(将在 1.1 版本中加入)
  • 最少仅用一行代码即可与 Scrapyrequests 进行集成
  • 无头浏览器(headless browser crawling)爬虫

094.awslogs

一个简单的命令行工具,用于在本地查询 Amazon CloudWatch 日志,强大的支持多实例日志汇总查看。

简单的查看命令:

1
$ awslogs get /var/log/syslog ip-10-1.* --start='2h ago' | grep ERROR

095.CUP

CUP 基础库是百度开源的 Python 语言基础库,致力将 DEV 从涉及底层操作、Util 操作类解放出来,使其更关注构建 service 上层业务逻辑。
目前已涵盖了构建一个服务的各个方面,大家可以从基础库的代码结构、wiki、doc 中进行简单了解。文档

096.supervisor

Python 开发的一个 C/S 服务,是 Linux/Unix 系统下的一个进程管理工具,不支持 Windows 系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用 Supervisor 管理的进程,当一个进程意外被杀死,supervisort 监听到进程死后,会自动将它重新启动,很方便的做到进程自动恢复的功能,提高系统、服务的稳定性,多用于生产环境

097.cx-extractor-python

抽取网页中的正文,常见的网页通常分为两种。 第一种是类似于门户网站的首页,这种网页是导航页面,有很多的超链接和文章标题,这种网页本身并没有实质内容,因此这里不考虑这种网页。 第二种是有实质性内容的网页,例如新闻的页面,这里实现的效果就是对网页进行处理,剔除其中的html标签、超链接、脚本代码等内容,抽取出网页的正文。 这个方法只适用于有大段正文的中文网页,例如新闻、博客,不适用于微博、贴吧等等。

示例代码:

1
2
3
4
5
6
7
from crawler.cx_extractor_Python import  cx_extractor_Python
cx = cx_extractor_Python()
# test_html = cx.readHtml("E:\\Documents\\123.html")
test_html = cx.getHtml('http://news.163.com/16/0101/10/BC84MRHS00014AED.html')
content = cx.filter_tags(test_html)
s = cx.getText(content)
print(s)

098.termtosvg

Python 写的终端记录器。通过命令 termtosvg 运行该工具,然后在终端执行你要展示的命令,最终输入 exit 命令结束录制,本地会生成一份 SVG 动画,可用于分享、展示终端操作。

099.FeelUOwn

一个符合 Unix 哲学的跨平台的音乐播放器,主要面向 Linux/macOS 用户。

特性:

  • 安装简单,新手友好,默认提供国内各音乐平台插件(网易云、虾米、QQ)
  • 基于文本的歌单,方便与朋友分享、设备之间同步
  • 提供基于 TCP 的交互控制协议
  • 类似 .vimrc 和 .emacs 的配置文件 .fuorc
  • 有友善的开发上手文档,核心模块有较好的文档和测试覆盖

100.hue

开源的 Apache Hadoop UI 系统。通过使用 Hue 我们可以在浏览器端的 Web 控制台上与 Hadoop 集群进行交互来分析处理数据。

核心功能:

  • 数据可视化
  • SQL 编辑器,支持 Hive、Impala、MySQL等
  • 可进行 workflow 的编辑、查看

101.TGmeetup

搜集、整理、展示、报名技术类线下聚会的命令行工具,让使用者可以更加方便、及时的获取技术类活动资讯

102.tinydb

TinyDB 是使用纯 Python 编写的 NoSQL 数据库,使用 json 文件存储数据。它区别于 SQLite 的关系性数据库。同样的小、不需要依赖外部服务器。适用于桌面程序、客户端,不适用于 Web 应用、高性能的数据查询。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> from tinydb import TinyDB, Query
>>> db = TinyDB('/path/to/db.json')
>>> db.insert({'int': 1, 'char': 'a'})
>>> db.insert({'int': 1, 'char': 'b'})

>>> User = Query()
>>> # Search for a field value
>>> db.search(User.name == 'John')
[{'name': 'John', 'age': 22}, {'name': 'John', 'age': 37}]

>>> # Combine two queries with logical and
>>> db.search((User.name == 'John') & (User.age <= 30))
[{'name': 'John', 'age': 22}]

>>> # Combine two queries with logical or
>>> db.search((User.name == 'John') | (User.name == 'Bob'))
[{'name': 'John', 'age': 22}, {'name': 'John', 'age': 37}, {'name': 'Bob', 'age': 42}]

>>> # Apply transformation to field with `map`
>>> db.search((User.age.map(lambda x: x + x) == 44))
>>> [{'name': 'John', 'age': 22}]

>>> # More possible comparisons: != < > <= >=
>>> # More possible checks: where(...).matches(regex), where(...).test(your_test_func)

103.himawaripy

一个 Python3 脚本,它会定时(需设置定时任务)抓取由日本 Himawari 8 气象卫星拍摄的接近实时的地球照片,并将它设置成你的桌面背景

104.loguru

一个让 Python 记录日志变得简单的库

105.lsbasi

用 Python 写一个简单的解释器系列教程

106.mkdocs

用 Python 开发的快速、简单的静态网站生成器,主要是为了构建项目的文档。文档源是 markdown 文件,用法和 Hexo 差不多,可通过一个 YAML 文件进行配置

107.awesome-python-applications

(英文)介绍 Python 有趣、神奇的开源项目。目前涵盖多个领域、项目丰富

108.click

Python 的第三方库,用于快速创建命令行。支持装饰器方式调用、多种参数类型、自动生成帮助信息等。

示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import click

@click.command()
@click.option("--count", default=1, help="Number of greetings.")
@click.option("--name", prompt="Your name", help="The person to greet.")
def hello(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for _ in range(count):
click.echo(f"Hello, {name}!")

if __name__ == '__main__':
hello()

# 下面为运行效果
$ python hello.py --count=3
Your name: Click
Hello, Click!
Hello, Click!
Hello, Click!

109.PSpider

代码量极少,功能却很完备的 Python 爬虫框架。

特点:

  • 功能完备:包含抓取、解析、存储等
  • 代码量少:方便阅读源码、动手修改、二次开发

110.ranger

以类似 VIM 操作,方便、快捷地管理文件的工具

111.sherlock

(英文)在主流社交网站,例如:GitHub、Facebook 等网站上查找指定的用户名是否存在。你想取一个独一无二的名字吗?快试试吧

112.marshmallow

使用类似于 ORM 的语法,序列化、反序列化 Python 对象。可以将序列化的对象呈现为标准格式,适用于例如数据校验、返回 HTTP API 的 JSON。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from datetime import date
from pprint import pprint

from marshmallow import Schema, fields


class ArtistSchema(Schema):
name = fields.Str()


class AlbumSchema(Schema):
title = fields.Str()
release_date = fields.Date()
artist = fields.Nested(ArtistSchema())


bowie = dict(name="David Bowie")
album = dict(artist=bowie, title="Hunky Dory", release_date=date(1971, 12, 17))

schema = AlbumSchema()
result = schema.dump(album)
pprint(result, indent=2)
# { 'artist': {'name': 'David Bowie'},
# 'release_date': '1971-12-17',
# 'title': 'Hunky Dory'}

113.changedetection.io

简单好用的网站变更检测、监控和通知服务。基于 Flask+Selenium 构建的 Web 服务,可以在目标网站发生变化时发出通知,可用于监控商品降价、工作机会、版本发布、最新内容等,支持 Docker 的安装方式。

114.ruia

Ruia是一个基于asyncio和aiohttp的异步爬虫框架,其诞生的核心理念也异常清晰,那就是:

  • 更少的代码:能通用的功能就插件化,让开发者直接引用即可
  • 更快的速度:由异步驱动

实例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from ruia import TextField, Item, Spider

class HackerNewsItem(Item):
target_item = TextField(css_select='tr.athing')
title = TextField(css_select='a.storylink')


class HackerNewsSpider(Spider):
start_urls = ['https://news.ycombinator.com/news?p=1']

async def parse(self, response):
async for item in HackerNewsItem.get_items(html=response.html):
yield item

if __name__ == '__main__':
HackerNewsSpider.start()

115.spug

Spug是面向中小型企业设计的轻量级无Agent的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能。

116.pudb

基于控制台的全屏 Python 可视化调试器。比 pdb 好用太多了,特性:

  • 源码语法高亮,栈、断点、变量可见并且一直动态更新。变量展示还有很多可以定制化的功能。
  • 基于键盘,简单高效。支持 VI 的鼠标移动。还支持 PDB 的某些命令
  • 支持查找源代码,可以使用 m 代用 module browser 查看载入的模块
  • 断点设置。鼠标移到某行代码,按 b,然后可以在断点窗口编辑断点

117.tenacity

使用该库可以优雅地实现各种需求的重试。

118.unimatrix

模拟“黑客帝国”影片中的终端动画脚本

119.ffmpeg-python

FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。这个是其 Python 的库,可以用该库操作、处理视频和音频。

示例代码:

1
2
3
4
5
6
# 水平翻转视频
import ffmpeg
stream = ffmpeg.input('input.mp4')
stream = ffmpeg.hflip(stream)
stream = ffmpeg.output(stream, 'output.mp4')
ffmpeg.run(stream)

120.pyright

微软出品的 Python 静态类型检查工具。执行速度快,适合大型 Python 项目,引用一句话:动态语言一时爽,重构火葬场

121.pyxel

基于 Python 编程程语言实现的复古游戏引擎。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
import pyxel

pyxel.init(160, 120)

def update():
if pyxel.btnp(pyxel.KEY_Q):
pyxel.quit()

def draw():
pyxel.cls(0)
pyxel.rect(10, 10, 20, 20, 11)

pyxel.run(update, draw)

122.awesome-python-login-model

该项目收集了各大网站登陆方式和部分网站的爬虫程序。登陆方式实现包含 selenium 登录、通过抓包直接模拟登录等。有助于新手研究、编写爬虫

123.better-exceptions

更加友好、实用、漂亮的输出 Python 异常

124.dash

一款只用几百行 Python 代码就可以轻易实现数据分析可视化的利器,是目前 Python 社区数据可视化主要的工具之一。具有:使用简单、易于扩展、开发团队活跃等特点

125.ds-cheatsheets

Python 在数据科学方面使用库的速查表,包含了 Pandas、Jupyter、SQL、Dask 等。虽然都是些基本的 API 调用,但是用来备忘和速查足以

126.gita

基于 Python 开发的管理 git 工具,使用后可在任何目录下代理执行 git 指令。同时支持同时显示多个 repo 的状态信息、本地分支与远程分支的关系等

127.pylane

Pylane 是一个基于gdb的python进程注入和调试工具, 通过gdb trace python进程,然后在该进程的python vm中动态地注入一段python代码, 从而对一个运行中的python进程执行一段任意的逻辑。

128.scrapydweb

用于 Scrapyd 集群管理的 web 应用,支持 Scrapy 日志分析和可视化。

129.cufflinks

基于 plotly 和 pandas 的绘图库。Pandas 是处理数据的常用库,cufflinks 可以让 pandas 处理后的数据更直观的展示。通过该库你可以用极少的代码,实现绚丽和多样的数据可视化图形

130.one-python-craftsman

来自一位 Pythonista 的编程经验分享,内容涵盖编码技巧、最佳实践与思维模式等方面。

131.RPA-Python

一个 Python 自动化操作的库。比如:自动打开网页并截图

示例代码:

1
2
3
4
5
6
r.init()
r.url('https://www.google.com')
r.type('//*[@name="q"]', 'decentralisation[enter]')
print(r.read('result-stats'))
r.snap('page', 'results.png')
r.close()

132.bullet

一个支持终端输入和菜单选择的 Python 库。可以让使用者在终端上用方向键移动、单选、复选、密码输入等,而且支持定制化格式和颜色。看下面的效果图你就知道它是干什么

133.DaPy

DaPy是一个在设计时就非常关注易用性的数据分析库。通过为您提供设计合理的数据结构和丰富的机器学习模型,它能帮您快速地实现数据分析思路。早已经有了很多例如Pandas之类的著名数据分析模块,但仍没有一个相关的模块能做到:

  • 以链式编程的方式编写代码;
  • 线程安全的数据容器;
  • 调用几个API就能完成简单的特征工程;
  • 能够轻松的按行处理数据;
  • 能够像MySQL那样在命令行中显示日志。

​因此,DaPy会更适合于数据分析师、统计学家和需要处理大数据但仅有有限计算机知识的人群。DaPy的数据结构提供了超过70个高效易用的API接口帮助您进行数据挖掘,包括40+个数据操作函数,10+个特征工程函数和15+数据探索函数。

134.PyUnit

搜狗词库下载、新词发现算法、常见的工具类、百度应用、翻译、天气预报、汉语纠错、字符串文本数据提取时间解析、百度文库下载、实体抽取等等

模块如下:

  • 搜狗下载
  • 新词发现
  • 常见的工具类
  • 百度应用
  • 日语单词翻译
  • 日志模块
  • 口语化时间处理
  • 实体抽取
  • 日历处理
  • 全国地址提取
  • 常见数学处理
  • 字符串处理
  • 23种设计模式
  • 质数处理
  • 天气预报

135.memory_profiler

Python 程序内存占用分析工具。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 采用装饰器的方式引用,不影响现有代码
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a

if __name__ == '__main__':
my_func()

# 运行命令:
python -m memory_profiler example.py

# 输出:
Line # Mem usage Increment Occurrences Line Contents
============================================================
3 38.816 MiB 38.816 MiB 1 @profile
4 def my_func():
5 46.492 MiB 7.676 MiB 1 a = [1] * (10 ** 6)
6 199.117 MiB 152.625 MiB 1 b = [2] * (2 * 10 ** 7)
7 46.629 MiB -152.488 MiB 1 del b
8 46.629 MiB 0.000 MiB 1 return a

136.mitmproxy

基于 Python 语言开发的抓包工具。支持命令行、Web 平台的形式展示抓包结果,还能通过 Python 引用库来拦截、控制响应和请求。下图展示为命令行使用界面(类 vim 操作)

137.PySimpleGUI

Python GUI 编程库,它是将 tkinter、Qt、Remi、WxPython 封装成更人性化的接口。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import PySimpleGUI as sg                        # Part 1 - The import

# Define the window's contents
layout = [ [sg.Text("What's your name?")], # Part 2 - The Layout
[sg.Input()],
[sg.Button('Ok')] ]

# Create the window
window = sg.Window('Window Title', layout) # Part 3 - Window Defintion

# Display and interact with the Window
event, values = window.read() # Part 4 - Event loop or Window.read call

# Do something with the information gathered
print('Hello', values[0], "! Thanks for trying PySimpleGUI")

# Finish up by removing from the screen
window.close() # Part 5 - Close the Window

138.PythonPlantsVsZombies

Python 语言编写的植物大战僵尸。学习如何使用 Python 编写小游戏的极佳例子

139.bokeh

一个交互式的数据可视化 Python 库,专注于在 Web 浏览器中实现美观、直接的数据可视化功能。使用它可以让你快速和轻松地创建交互式图表、仪表板和数据可视化程序。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from numpy.random import random

from bokeh.core.enums import MarkerType
from bokeh.plotting import figure, show

p = figure(title="Bokeh Markers", toolbar_location=None)
p.grid.grid_line_color = None
p.background_fill_color = "#eeeeee"
p.axis.visible = False
p.y_range.flipped = True

N = 10

for i, marker in enumerate(MarkerType):
x = i % 4
y = (i // 4) * 4 + 1

p.scatter(random(N)+2*x, random(N)+y, marker=marker, size=14,
line_color="navy", fill_color="orange", alpha=0.5)

p.text(2*x+0.5, y+2.5, text=[marker],
text_color="firebrick", text_align="center", text_font_size="13px")

show(p)

140.GeneralNewsExtractor

基于《基于文本及符号密度的网页正文提取方法》论文用 Python 实现的正文抽取器,可以用来提取 HTML 中正文的内容、作者、标题。

141.healthchecks

基于 Python3 和 Django2 的 Cron 定时任务监控工具,同时支持多种定时任务失败时的告警方式

142.city-vein

用公交路线数据,还原城市结构。通过数据可视化手段,还原了 30 多个城市的城市结构。该项目中有数据获取和处理的脚本,而且该项目充分体现了数据可视化带来的便利和效果,易于激发学习编程的热情。在线浏览

143.PySnooper

Python 的第三方调试库。让你通过装饰器方法,方便的知道每一行程序运行后的结果,而不需要再手动增加 print 展示过程数据、调试程序。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pysnooper

@pysnooper.snoop()
def number_to_bits(number):
if number:
bits = []
while number:
number, remainder = divmod(number, 2)
bits.insert(0, remainder)
return bits
else:
return [0]

number_to_bits(6)

输出:

144.Python-100-Days

《Python 100 天从新手到大师》—— Python 的入门学习资料,学习曲线低。非专业人士也能上手学习,适合新手入门

145.Zvm

一款用 Python 实现的简易 JVM。实现功能如下:class 文件解析、类加载、运行时数据区、指令解释器、基本指令集、简易 GC、简易线程、简易 JDK 库,可以运行基本的 Java class 文件。代码量少,模块清晰,适合用来学习 JVM 的基本结构和实现

146.arrow

还在为处理时间、时区、转化、夏令时等问题而头疼吗?这个 Python 的第三方时间库。提供了更便捷的方式来创建、操作和格式化时间和日期,用更少的代码来处理时间和日期。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
>>> import arrow
>>> arrow.get('2013-05-11T21:23:58.970460+07:00')
<Arrow [2013-05-11T21:23:58.970460+07:00]>

>>> utc = arrow.utcnow()
>>> utc
<Arrow [2013-05-11T21:23:58.970460+00:00]>

>>> utc = utc.shift(hours=-1)
>>> utc
<Arrow [2013-05-11T20:23:58.970460+00:00]>

>>> local = utc.to('US/Pacific')
>>> local
<Arrow [2013-05-11T13:23:58.970460-07:00]>

>>> local.timestamp()
1368303838.970460

>>> local.format()
'2013-05-11 13:23:58 -07:00'

>>> local.format('YYYY-MM-DD HH:mm:ss ZZ')
'2013-05-11 13:23:58 -07:00'

>>> local.humanize()
'an hour ago'

>>> local.humanize(locale='ko-kr')
'한시간 전'

147.GithubMonitor

由于很多猪队友的存在,公司敏感信息通过 GitHub 泄露出去是很常见的。这个项目主要根据关键字与 hosts 生成的关键词,利用 github 提供的 api,监控 git 泄漏,并在检测到信息泄露的时候发送邮件通知。

148.manim

一个生成数学教学视频的动画引擎。它用编程的方式创建精美的数学动画,让数学更加易懂。

149.psutil

一个跨平台库的进程和系统资源监控、管理库。用于查看有关正在运行的进程和系统利用率,如 CPU、内存、磁盘、网络等信息。 实现了 UNIX 命令行工具提供的许多功能,例如:ps、top、lsof、netstat、ifconfig 等,支持 Linux、Windows、macOS 等系统。学会了这个库,就可以通过 Python 脚本做更多有趣的事情了。

查看CPU的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
>>> import psutil
>>>
>>> psutil.cpu_times()
scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, nice=0.0)
>>>
>>> for x in range(3):
... psutil.cpu_percent(interval=1)
...
4.0
5.9
3.8
>>>
>>> for x in range(3):
... psutil.cpu_percent(interval=1, percpu=True)
...
[4.0, 6.9, 3.7, 9.2]
[7.0, 8.5, 2.4, 2.1]
[1.2, 9.0, 9.9, 7.2]
>>>
>>> for x in range(3):
... psutil.cpu_times_percent(interval=1, percpu=False)
...
scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)
>>>
>>> psutil.cpu_count()
4
>>> psutil.cpu_count(logical=False)
2
>>>
>>> psutil.cpu_stats()
scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)
>>>
>>> psutil.cpu_freq()
scpufreq(current=931.42925, min=800.0, max=3500.0)
>>>
>>> psutil.getloadavg() # also on Windows (emulated)
(3.14, 3.89, 4.67)

150.you-get

一个 Python 写的视频下载工具,和之前的youtebu-dl以及ytl异曲同工。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ you-get 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
site: YouTube
title: Me at the zoo
stream:
- itag: 43
container: webm
quality: medium
size: 0.5 MiB (564215 bytes)
# download-with: you-get --itag=43 [URL]

Downloading Me at the zoo.webm ...
100% ( 0.5/ 0.5MB) ├██████████████████████████████████┤[1/1] 6 MB/s

Saving Me at the zoo.en.srt ... Done.

151.Gooey

一个把 Python 命令行工具转化成 GUI 桌面工具的库。

152.KubeOperator

KubeOperator 是一个开源的轻量级 Kubernetes 发行版,专注于帮助企业规划、部署和运营生产级别的 K8s 集群。

153.opendevops

CODO是一款为用户提供企业多混合云、一站式DevOps、自动化运维、完全开源的云管理平台、自动化运维平台

154.pyflame

Uber 开源的 Python 性能分析工具。可以在不修改代码的情况下分析 Python 程序的性能,同时生成火焰图

155.altair

强大的数据可视化 Python 库。支持多种数据展示方式、接口简单、效果炫酷

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import altair as alt
from vega_datasets import data

source = data.cars()

brush = alt.selection(type='interval')

points = alt.Chart(source).mark_point().encode(
x='Horsepower',
y='Miles_per_Gallon',
color=alt.condition(brush, 'Origin', alt.value('lightgray'))
).add_params(
brush
)

bars = alt.Chart(source).mark_bar().encode(
y='Origin',
color='Origin',
x='count(Origin)'
).transform_filter(
brush
)

points & bars

156.handcalcs

通过简单的 Python 代码,生成复杂公式的工具。

157.QuickCut

一款轻量、好用的开源视频处理工具。它是基于 PyQt5 开发的桌面工具,用于满足非专业用户的视频处理需求:压缩视频、转码视频、倒放视频、合并片段、根据字幕裁切片段、自动配字幕、自动剪辑等

158.free-python-games

真入门级的 Python 游戏集合库。都是简单的小游戏:贪吃蛇、迷宫、Pong、猜字等,运行方便、代码简单易懂。用游戏开启的你 Python 学习之旅,玩完再学源码,其乐无穷啊。

159.oxfs

一个基于 sftp 协议的 fuse 网络文件系统,功能上类似于 sshfs。

特性:

  • 引入了异步并发读远端文件机制,提高了文件首次读速度。
  • 缓存持久化到本地磁盘,下次挂载时访问更加快速。
  • 异步任务负责同步文件,避免低速的网络读写阻塞上层应用。

160.poetry

Python 虚拟环境、依赖管理工具。依赖管理工具有很多,我相上了它有三点:通过单文件 pyproject.toml 便可轻松的区别安装、管理开发和正式环境、有版本锁定可方便回滚、输出界面简单清爽。当然它还是个“新生儿”,尝鲜的风险还是有的,选择须谨慎

161.py2sec

一款轻量级跨平台 Python “加密”、加速的脚本工具。原理是基于 Cython 将 .py 编译成 run-time libraries 文件:.so(Linux && Mac)或 .pyd(Win),一定程度上实现了“加密”保护源代码的功能。

整个Python项目编译前:

py2sec 编译后效果:

162.rich

一个让你的终端输出变得“花里胡哨”的三方库。

163.asciinema

终端记录工具。忘记录屏软件吧,纯文本的录制终端操作的工具。安装简单、使用方便,且生成的记录文件极小,但需要配合 JS 文件播放

164.playwright-python

微软开源的浏览器自动化工具,可以用 Python 语言操作浏览器啦。支持 Linux、macOS、Windows 系统下的 Chromium、Firefox 和 WebKit 浏览器

165.practical-python

大佬 David Beazley 开源的 Python 免费入门级教程。他是《Python Cookbook 第三版》、《Python 参考手册》的作者,教程经过实际的教学实践、包含课后练习题。在线学习

  1. Course Setup (READ FIRST!)
  2. Introduction to Python
  3. Working with Data
  4. Program Organization
  5. Classes and Objects
  6. The Inner Workings of Python Objects
  7. Generators
  8. A Few Advanced Topics
  9. Testing, Logging, and Debugging
  10. Packages

166.redis-memory-analyzer

Redis 实时内存分析工具。我比较好奇它是怎么实时获取 redis 中 key 的情况和信息,就看了下源码 scanner.py 文件。发现是采用 scan_iter 方法,控制扫描 key 返回的量。然后通过 yield 减少内存占用量,最后再加上 register_script 方法调用 Lua 脚本或 pipeline 方法提高获取 key 信息的效率。分析后感觉这个工具可适用在数据量较大的情况,实时性要求在秒或者分钟级的场景下

167.wagtail

目前最强大的开源 Django CMS(内容管理系统)之一。我很少用“最”这个字眼,节省时间就聊聊它惊艳到我的点吧。首先该项目更新、迭代活跃,其次项目首页提到的功能都是免费的,没有付费解锁的骚操作。wagtail 专注于内容管理,不束缚前端实现。有趣的 StreamField 技术让你的内容变得灵活且不失结构,竟然还支持 A/B 测试,最后 Google、NASA 他们都在用这个项目

168.KeymouseGo

Python 实现的精简绿色版按键精灵。记录用户的鼠标、键盘操作,自动执行之前记录的操作,可设定执行的次数。在进行某些简单、单调重复的操作时,使用该软件可以十分省事儿。只需要录制一遍,剩下的交给 KeymouseGo 来做就可以了

169.sentry

一款免费开源的 Python 实时异常监控平台。采用 C/S 模式,服务器端通过 Python 实现,同时提供 web 管理页面,支持从任何语言、任何应用程序发送事件。一个成熟的服务必要的一环就是异常告警,Sentry 可以帮你及时知道服务非预期的异常

170.vaex

类似 Pandas 的 Python 数据处理库,在处理大型数据集的时候表现极大的优于 Pandas。Vaex 通过懒加载、延迟计算和零内存复制策略,极大的降低了内存的使用率、提高了计算的效率。从而能够每秒处理 10 亿行的数据,并且支持以直方图、密度图等形式展示数据。

171.word_cloud

Python 的词云生成工具。

172.ZeroNet

一个使用 Bitcoin 加密和 BitTorrent 网络的去中心化网络。将传统巨头垄断的互联网变得平民化,不需要租用服务器不需要公网 IP,每个人都可以轻松创建分布式博客、分布式论坛、分布式微博、分布式视频网站、分布式直播网站等等

173.ar-cutpaste

AR 拷贝实物照片到 PS 软件的工具。它可以通过 iPhone 或者 Android 手机将真实物品从周围环境中抠出来,并粘贴到 Photoshop 中,未来还会支持其它软件

174.nginx-ui

在线修改 Nginx 配置的服务。总的来说还是能减少修改配置出错的概率,而且不用面对漆黑枯燥的命令行了

175.python-dotenv

帮你更好的管理 Python 项目中敏感配置信息的开源三方库。在项目中会有一些数据库、账户、KEY 等敏感信息,这些信息最好不要写在源代码中。为了降低泄漏风险,一般会通过环境变量来设置,这个库可以很方便帮你在 Python 项目中管理这些信息。

176.activitywatch

一个记录你的时间都花在那的 Python 项目。支持 Web 可视化,效果如下

177.akshare

一款基于 Python 的开源金融数据接口库。提供了股票、期货、期权、基金、数字货币等金融产品的基本数据、实时和历史行情数据、衍生数据,包含数据采集、数据清洗、到数据落地的一套开源工具。满足了金融数据科学家、数据科学爱好者在金融数据获取方面的需求。

示例代码:

1
2
3
4
import akshare as ak

stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20170301", end_date='20210907', adjust="")
print(stock_zh_a_hist_df)

Output:

1
2
3
4
5
6
7
8
9
10
11
12
13
      日期          开盘   收盘    最高  ...  振幅   涨跌幅 涨跌额 换手率
0 2017-03-01 9.49 9.49 9.55 ... 0.84 0.11 0.01 0.21
1 2017-03-02 9.51 9.43 9.54 ... 1.26 -0.63 -0.06 0.24
2 2017-03-03 9.41 9.40 9.43 ... 0.74 -0.32 -0.03 0.20
3 2017-03-06 9.40 9.45 9.46 ... 0.74 0.53 0.05 0.24
4 2017-03-07 9.44 9.45 9.46 ... 0.63 0.00 0.00 0.17
... ... ... ... ... ... ... ... ...
1100 2021-09-01 17.48 17.88 17.92 ... 5.11 0.45 0.08 1.19
1101 2021-09-02 18.00 18.40 18.78 ... 5.48 2.91 0.52 1.25
1102 2021-09-03 18.50 18.04 18.50 ... 4.35 -1.96 -0.36 0.72
1103 2021-09-06 17.93 18.45 18.60 ... 4.55 2.27 0.41 0.78
1104 2021-09-07 18.60 19.24 19.56 ... 6.56 4.28 0.79 0.84
[1105 rows x 11 columns]

178.repoll

基于 Django 开发的 redis 集群管理、监控工具。功能包括:标准化申请流程、管理配置、监控接口等,减轻了运维人员的痛苦

179.wttr.in

一个 Python 实现的命令行查看天气工具

180.Computer-Networking-A-Top-Down-Approach-NOTES

《计算机网络-自顶向下方法》编程作业。包含问题和 Python 代码解答,Wireshark 实验部分为官方文档的翻译

181.learn-python3

一份 Python3 的教程,请查收。该教程采用 Jupyter notebooks 形式,便于运行和阅读。并且还包含了练习题,对新手友好。缺点的话就是英文的教程,但是我都能看懂你肯定也可以

182.readthedocs.org

知名文档社区网站(readthedocs.org)的开源源码。该网站上托管了:Scrapy、requests、bootstrap-datepicker 等知名库的文档,我看了下项目是基于 Django 开发的,文件有些多看起来需要点耐心

183.calibre

一款功能强大的电子书管理工具。它是集下载、格式转化、制作、管理于一体的电子书工具,比如可以将 txt 文本,转化成包含作者信息和书籍封面的 mobi 文件,制作完成后还可以直接发送到 Kindle 设备上。

184.taichi

一个高性能图形学编程框架。它可以将你编写的 Python 代码转换成高效的汇编代码,在多 CPU 和 GPU 上运行,相当于是在用 Python 的语法写着色器。Taichi 解决了图形学配环境难,代码移植性差等问题,只需 pip install taichi 即可安装,编写的程序在 Windows、Linux、OSX 上均可运行,降低了新手学习图形学的门槛。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# python/taichi/examples/simulation/fractal.py

import taichi as ti

ti.init(arch=ti.gpu)

n = 320
pixels = ti.field(dtype=float, shape=(n * 2, n))


@ti.func
def complex_sqr(z):
return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2])


@ti.kernel
def paint(t: float):
for i, j in pixels: # Parallelized over all pixels
c = ti.Vector([-0.8, ti.cos(t) * 0.2])
z = ti.Vector([i / n - 1, j / n - 0.5]) * 2
iterations = 0
while z.norm() < 20 and iterations < 50:
z = complex_sqr(z) + c
iterations += 1
pixels[i, j] = 1 - iterations * 0.02


gui = ti.GUI("Julia Set", res=(n * 2, n))

for i in range(1000000):
paint(i * 0.03)
gui.set_image(pixels)
gui.show()

185.gpustat

一个方便查询 GPU 状态的命令行程序

186.PyBoy

Python 写的 GameBoy 模拟器。不仅可以用来怀念童年,还能用这个库写“外挂”,之前虐你千百遍的游戏。现在用 Python 找回场子,放学别走,学校门口见!

187.scalene

一个 Python 的高性能 CPU 和内存分析器。Scalene 很快、占用资源少、展示信息全面,可用来排查、优化 Python 程序占用资源过多等问题

188.httpx

使用简单方便,轻松实现异步请求的 HTTP 客户端(Python 3.8+)。

示例代码:

1
2
3
4
5
6
7
8
9
10
>>> import httpx
>>> r = httpx.get('https://www.example.org/')
>>> r
<Response [200 OK]>
>>> r.status_code
200
>>> r.headers['content-type']
'text/html; charset=UTF-8'
>>> r.text
'<!doctype html>\n<html>\n<head>\n<title>Example Domain</title>...'

189.iredis

Python 语言写的支持自动补全、语法高亮、命令提示等的 Redis 命令行客户端。超好用,真是相见很晚啊

190.python-small-examples

Python 有趣、实用的代码示例集合。包含:Python 基础、小技巧、坑、文件操作、机器学习、绘图等

191.rssant

免费开源的 RSS 订阅项目,服务端是 Django 写的。你可以自己部署也可以直接使用在线版

192.fastapi

基于 Python 3.6+ 的高性能 Web 框架。“人如其名”用 FastAPI 写接口那叫一个快、调试方便,Python 在进步而它基于这些进步,让 Web 开发变得更快、更强。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Create a file main.py with:
from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}

//Run the server with:
$ uvicorn main:app --reload

INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.

193.geek_crawler

极客时间课程(目前仅支持图文、音频)下载到本地的 Python 脚本。需输入账号密码后,才能将指定极客时间专栏课程保存到本地,方便随时随地学习

194.MrDoc

一个基于 Python 开发的在线文档系统。支持 Markdown 语法、文集分类、科学公式、流程图、思维导图等内容。清爽的阅读界面,还可以把内容打包导出为 Markdown 文件、EPUB 文件、PDF 文件。适合作为个人和小型团队的私有文档服务

195.django-debug-toolbar

Django 的调试工具栏。可显示当前请求和响应有关的各种调试信息,包括耗时、SQL、配置、性能等信息

196.pottery

以 Python 的方式操作 Redis 的库。忘记那些 Redis 命令吧,只要你知道如何使用 Python 字典,那么你就会用这个库操作 Redis

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>>> from pottery import RedisDict
>>> tel = RedisDict({'jack': 4098, 'sape': 4139}, redis=redis, key='tel')
>>> tel['guido'] = 4127
>>> tel
RedisDict{'jack': 4098, 'sape': 4139, 'guido': 4127}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
RedisDict{'jack': 4098, 'guido': 4127, 'irv': 4127}
>>> list(tel)
['jack', 'guido', 'irv']
>>> sorted(tel)
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False
>>>

197.PyWebIO

PyWebIO提供了一系列命令式的交互函数来在浏览器上获取用户输入和进行输出,将浏览器变成了一个“富文本终端”,可以用于构建简单的Web应用或基于浏览器的GUI应用。 PyWebIO还可以方便地整合进现有的Web服务,让你不需要编写HTML和JS代码,就可以构建出具有良好可用性的应用。

198.webssh

简单的 SSH 连接服务器的 Python Web 应用。该项目后端采用 Tornado Web 框架和 Python SSH 库 paramiko,前端是 TypeScript 写的命令行前端组件 Xterm.js 实现。整个项目简单还具有实用价值,可作为 Python Web 的实战项目学习

199.zulip

完全开源的企业级即时通讯项目。后端采用 Python 语言实现性能足够强大,功能齐全相当于开源、免费的 Slack,拥有拖拽上传文件、代码高亮、Markdown 语法、应用整合、容易接入的 API 等功能,还支持 Web、PC、iOS 和 Android 主流平台,众多知名企业都在用,能够有效地提高团队沟通和办公效率。同时该项目对新手用户友好,如果你想加入一个不错的 Python 开源项目,推荐你花时间研究下它一定会有所收获

200.orjson

更快更强的 Python JSON 库。支持比如日期、numpy 数组等丰富的数据类型,而且速度更快

Quickstart示例代码:

1
2
3
4
5
6
7
8
9
10
11
>>> import orjson, datetime, numpy
>>> data = {
"type": "job",
"created_at": datetime.datetime(1970, 1, 1),
"status": "🆗",
"payload": numpy.array([[1, 2], [3, 4]]),
}
>>> orjson.dumps(data, option=orjson.OPT_NAIVE_UTC | orjson.OPT_SERIALIZE_NUMPY)
b'{"type":"job","created_at":"1970-01-01T00:00:00+00:00","status":"\xf0\x9f\x86\x97","payload":[[1,2],[3,4]]}'
>>> orjson.loads(_)
{'type': 'job', 'created_at': '1970-01-01T00:00:00+00:00', 'status': '🆗', 'payload': [[1, 2], [3, 4]]}

201.rumps

简单的 macOS 状态栏 Python 库

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import rumps

class AwesomeStatusBarApp(rumps.App):
@rumps.clicked("Preferences")
def prefs(self, _):
rumps.alert("jk! no preferences available!")

@rumps.clicked("Silly button")
def onoff(self, sender):
sender.state = not sender.state

@rumps.clicked("Say hi")
def sayhi(self, _):
rumps.notification("Awesome title", "amazing subtitle", "hi!!1")

if __name__ == "__main__":
AwesomeStatusBarApp("Awesome App").run()

202.tiler

将图片转化成各种较小图块拼接成的图像工具。马赛克风格的图片转化工具,支持自定义拼接图案和符号。工具实用方便、代码简单易懂,适合对图像感兴趣的小伙伴学习和上手

203.lastversion

帮你找到库或者软件最新版本的 Python 工具。它可以避开不同项目作者使用的不同风格的版本号,获取一个项目的最新版本号,下载或安装它们。本项目可用于 build system,比如自动更新脚本。支持从这些网站搜索:GitHub、GitLab、PyPI 等,确保版本最新和稳定

204.streamlit

能够快速地把数据制作成可视化、交互页面的 Python 框架。分分钟让你的数据变成图表,并且该项目提供免费的共享服务平台帮你的项目上线,方便数据的共享和讨论

205.xonsh

支持 Python 赋能的 shell。如果你不会编写 shell 脚本,但是会 Python。那通过这个项目可以让你混用 shell 命令和 Python 语法,高效快速地完成你想要的功能

206.Zappa

Python 无服务框架,功能即服务(serverless)。

207.django-grappelli

美化 Django 默认管理后台界面的库

安装步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 安装
pip install django-grappelli
# 设置 settings.py 文件
INSTALLED_APPS = (
'grappelli',
'django.contrib.admin',
)
# 增加路径
from django.conf.urls import include

urlpatterns = [
path('grappelli/', include('grappelli.urls')), # grappelli URLS
path('admin/', admin.site.urls), # admin site
]
# 增加请求处理器
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
'django.template.context_processors.request',
...
],
},
},
]
# 最后
python manage.py collectstatic

208.Hitomi-Downloader

Python 写的桌面下载工具。界面简单使用方便,拥有下载限速、BT 种子、自动提取网页视频等功能,支持下载国内多个视频网站的内容

209.trzsz

简单实用的文件传输工具。支持 tmux 和 iTerm2 一起使用,并且有显示上传/下载进度的进度条

210.15-minute-apps

基于 PyQt 框架写的小型桌面应用程序的集合。想用 Python 写桌面应用的小伙伴,这个项目应该可以帮到你。比如计算器:

211.pgcli

支持语法高亮和自动补全的 Postgres 数据库客户端命令行工具。它安装简单上手快速,如果你用过 Postgres 数据库自带的命令行工具,就一定能感受到 pgcli 的迷人之处

212.python-patterns

Python 设计模式和使用场景的集合

213.alive-progress

一款新的 Python 炫酷进度条项目。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
letters = [chr(ord('A') + x) for x in range(26)]
with alive_bar(26, dual_line=True, title='Alphabet') as bar:
for c in letters:
bar.text = f'-> Teaching the letter: {c}, please wait...'
if c in 'HKWZ':
print(f'fail "{c}", retry later')
time.sleep(0.3)
bar()

on 7: fail "H", retry later
on 10: fail "K", retry later
Alphabet |███████████████████████████▊ | ▃▅▇ 18/26 [69%] in 6s (3.2/s, eta: 3s)
-> Teaching the letter: S, please wait...

214.blind_watermark

给图片加盲水印的 Python 库。盲水印就是图片有水印但人眼看不出来,需要通过程序才能提取水印,相当于隐形“盖章”,可以用在数据泄露溯源、版权保护等场景。

该库出自阿里巴巴安全团队,强大之处:

  • 解析水印图时无需原图
  • 水印图剪裁、旋转都不会破坏图中的盲水印
  • 支持密码加密

示例代码:

1
2
3
4
5
6
7
8
9
from blind_watermark import WaterMark

bwm1 = WaterMark(password_img=1, password_wm=1)
bwm1.read_img('pic/ori_img.jpg')
wm = '@guofei9987 开源万岁!'
bwm1.read_wm(wm, mode='str')
bwm1.embed('output/embedded.png')
len_wm = len(bwm1.wm_bit)
print('Put down the length of wm_bit {len_wm}'.format(len_wm=len_wm))

215.PyG2Plot

基于 G2Plot 封装的 Python3 可视化库。G2Plot 是蚂蚁集团开源的一个基于图表分类学的可视分析图表库,内置 25+ 常见图表类型。该库是 Python 对 G2Plot 的封装,体验良好,开箱即用

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from pyg2plot import Plot

line = Plot("Line")

line.set_options({
"data": [
{ "year": "1991", "value": 3 },
{ "year": "1992", "value": 4 },
{ "year": "1993", "value": 3.5 },
{ "year": "1994", "value": 5 },
{ "year": "1995", "value": 4.9 },
{ "year": "1996", "value": 6 },
{ "year": "1997", "value": 7 },
{ "year": "1998", "value": 9 },
{ "year": "1999", "value": 13 },
],
"xField": "year",
"yField": "value",
})

# 1. render html file
line.render("plot.html")
# 2. render html string
line.render_html()

216.requests-html

好用的 Python 解析 HTML 库。写爬虫的小伙伴都感受过解析 HTML 的痛苦,常用工具 BeautifulSoup、lxml、Scrapy 的 selector 等。今天你有了新的选择 requests-html,支持 XPath、CSS 选择器、动态页面、过滤指定内容等。上手特别简单和迅速,我的爬虫项目 Hydra 中就用了它,解析 HTML 变得轻松了许多。

函数示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> from requests_html import AsyncHTMLSession
>>> asession = AsyncHTMLSession()
>>> async def get_pythonorg():
... r = await asession.get('https://python.org/')
... return r
...
>>> async def get_reddit():
... r = await asession.get('https://reddit.com/')
... return r
...
>>> async def get_google():
... r = await asession.get('https://google.com/')
... return r
...
>>> results = asession.run(get_pythonorg, get_reddit, get_google)
>>> results # check the requests all returned a 200 (success) code
[<Response [200]>, <Response [200]>, <Response [200]>]
>>> # Each item in the results list is a response object and can be interacted with as such
>>> for result in results:
... print(result.html.url)
...
https://www.python.org/
https://www.google.com/
https://www.reddit.com/

217.vcrpy

把 HTTP 的请求拦截下来,返回本地准备好的数据的库。就像“插卡”一样,使用装饰器方式修饰的函数会被拦截下来,直接返回指定本地路径的文件中的数据,从而提高测试执行速度和确定性

1
2
3
4
5
6
import vcr
import urllib

with vcr.use_cassette('fixtures/vcr_cassettes/synopsis.yaml'):
response = urllib.request.urlopen('http://www.iana.org/domains/reserved').read()
assert 'Example domains' in response

218.apkleaks

扫描 APK 文件是否包含敏感信息的命令行工具

示例代码:

1
2
3
4
5
6
7
// custom-rules.json
{
"Amazon AWS Access Key ID": "AKIA[0-9A-Z]{16}",
...
}

$ apkleaks -f /path/to/file.apk -p rules.json -o ~/Documents/apkleaks-results.txt

219.graphene-django

让你轻松地将 GraphQL 整合到 Django 项目的库

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#Here is a simple Django model:
from django.db import models

class UserModel(models.Model):
name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)

from graphene_django import DjangoObjectType
import graphene

#To create a GraphQL schema for it you simply have to write the following:
class User(DjangoObjectType):
class Meta:
model = UserModel

class Query(graphene.ObjectType):
users = graphene.List(User)

def resolve_users(self, info):
return UserModel.objects.all()

schema = graphene.Schema(query=Query)

#Then you can query the schema:
query = '''
query {
users {
name,
lastName
}
}
'''
result = schema.execute(query)

220.tomato-clock

Python 写的命令行番茄工作法定时器。代码仅有 100 多行,不依赖其它第三方库

示例代码:

1
2
3
4
5
6
7
8
9
10
11
# via pip
$ tomato # start a 25 minutes tomato clock + 5 minutes break
$ tomato -t # start a 25 minutes tomato clock
$ tomato -t <n> # start a <n> minutes tomato clock
$ tomato -b # take a 5 minutes break
$ tomato -b <n> # take a <n> minutes break
$ tomato -h # help

#Output
🍅 tomato 25 minutes. Ctrl+C to exit
🍅🍅---------------------------------------------- [8%] 23:4 ⏰

221.vardbg

一款能够把 Python 程序执行过程,导出成视频或动图的代码调试工具。可用于动画学算法、制作代码讲解视频等场景

222.Airtest

适用于移动端应用的跨平台 UI 自动化框架。基于图像识别定位元素,可能都不需要一行代码就可以很方便地用它来测试 APP 或刷游戏

223.ArchiveBox

基于 Python 实现的网站归档平台。就是可以自动把网页(HTML、PDF、图片等)变成静态页面,下载到本地存储和管理的工具。可以用来做镜像站、档案馆、离线阅读等

224.lux

一个用于数据科学方面的 Python 开源库。这个库适用于实验室分析数据的场景,基于 Jupyter 的数据可视化和操作界面,再加上 pandas 丰富的数据接入方式以及强大的数据处理能力,让数据的分析变得简单从而可以更加直观地找到数据背后藏着的“真理”

225.qutebrowser

基于 PyQt5 编写的 Vim 操作方式的浏览器。支持 Linux,Windows 和 macOS 操作系统,可以先安装体验下。然后再看看源码学习如何用 Python 写浏览器

226.GitHubPoster

能够把多个平台上的数据,生成类似 GitHub 绿墙图像的工具。比如能够把发推的频率、扇贝单词打卡等情况生成类似 GitHub 绿墙图像,使用简单感兴趣的同学可以把玩一下

227.guietta

用于制作简单 GUI 程序的 Python 库。换一种简单的方式写 GUI(图形用户界面)程序

示例代码:

1
2
3
4
5
6
7
8
9
10
11
from guietta import _, Gui, Quit
gui = Gui(
[ "Enter numbers:", "__a__", "+", "__b__", ["Calculate"] ],
[ "Result: -->", "result", _, _, _ ],
[ _, _, _, _, Quit ]
)

with gui.Calculate:
gui.result = float(gui.a) + float(gui.b)

gui.run()

输出:

228.pygame

用来开发游戏的 Python 库。Pygame 已经持续更新多年,网上的教程和资料十分充足,虽然在游戏开发领域 Python 只是个弟弟,但如果只是用这个库开发个 2D 小游戏还是很顺手的。

229.bigdata_analyse

大数据分析实战项目的集合。该项目包含了淘宝、租房、招聘等数据的分析实例,不仅有 Python、SQL、HQL 的实例代码,还附上了数据集下载地址。

230.JDMemberCloseAccount

用 Python 操作 selenium 的实战项目。该项目以全自动退出京东加入的店铺会员为例,介绍了 Python 自动化的知识和方案

231.OnlineJudge

青岛大学开源的在线评测系统(OJ),采用 Django+Vue.js 实现。

功能如下:

  • 基于 Docker,真正一键部署
  • 前后端分离,模块化编程,微服务
  • ACM/OI 两种比赛模式、实时/非实时评判 任意选择
  • 丰富的可视化图表,一图胜千言
  • 支持 Template Problem,可以添加函数题甚至填空题
  • 更细致的权限划分,超级管理员和普通管理员各司其职
  • 多语言支持:C, C++, Java, Python2, Python3,题目可以选择使用的语言
  • Markdown & MathJax 支持
  • 比赛用户IP限制 (CIDR ranges)

232.Pillow

最流行的 Python 图像处理库。它的诞生是由于 PIL 的年久失修,现已于 2011 年停止维护,所以开源爱好者们就在 PIL 的基础上创建了 Pillow。该库支持丰富的图像格式和强大的图像处理功能,如果你要用 Python 处理图像,它绝对是不二之选

Convert files to JPEG示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
import os, sys
from PIL import Image

for infile in sys.argv[1:]:
f, e = os.path.splitext(infile)
outfile = f + ".jpg"
if infile != outfile:
try:
with Image.open(infile) as im:
im.save(outfile)
except OSError:
print("cannot convert", infile)

233.tqsdk-python

开源的 Python 量化交易框架。使用少量代码即可实现量化交易程序,还支持历史数据、实时数据、策略回测、实盘交易、图形化界面展示等功能。但免费版本仅提供全部的期货、商品/金融期权和上证50、沪深300 和中证500 的实时行情,付费版支持更多种类以及更加稳定的服务

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from tqsdk import TqApi, TqAuth, TqAccount, TargetPosTask

api = TqApi(TqAccount("H海通期货", "4003242", "123456"), auth=TqAuth("信易账户", "账户密码")) # 创建 TqApi 实例, 指定交易账户
q_1910 = api.get_quote("SHFE.rb1910") # 订阅近月合约行情
t_1910 = TargetPosTask(api, "SHFE.rb1910") # 创建近月合约调仓工具
q_2001 = api.get_quote("SHFE.rb2001") # 订阅远月合约行情
t_2001 = TargetPosTask(api, "SHFE.rb2001") # 创建远月合约调仓工具

while True:
api.wait_update() # 等待数据更新
spread = q_1910["last_price"] - q_2001["last_price"] # 计算近月合约-远月合约价差
print("当前价差:", spread)
if spread > 250:
print("价差过高: 空近月,多远月")
t_1910.set_target_volume(-1) # 要求把1910合约调整为空头1手
t_2001.set_target_volume(1) # 要求把2001合约调整为多头1手
elif spread < 200:
print("价差回复: 清空持仓") # 要求把 1910 和 2001合约都调整为不持仓
t_1910.set_target_volume(0)
t_2001.set_target_volume(0)

234.BaoTa

宝塔 Linux 服务器运维管理平台。简单好用的服务器运维平台,支持一键 LNMP 安装、管理集群、网站、数据库等功能,可以有效的提高操作的规范性和安全性,降低出错概率。这个开源项目是免费版,还有付费的专业版

235.learn-python

一份以代码和注释方式讲解 Python 的免费教程。每个 Python 基础语法和知识点都采用可以运行的代码为例讲解,再配上适当的注释和参考资料,让你快速上手 Python。此项目不仅可以当做学习 Python 的资料,还可以留着做为速查表

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"""Lists  <--- Name of the topic here
# @see: https://www.learnpython.org/en/Lists <-- Link to further readings goes here
Here might go more detailed explanation of the current topic (i.e. general info about Lists).
"""

def test_list_type():
"""Explanation of sub-topic goes here.

Each file contains test functions that illustrate sub-topics (i.e. lists type, lists methods).
"""

# Here is an example of how to build a list. <-- Comments here explain the action
squares = [1, 4, 9, 16, 25]

# Lists can be indexed and sliced.
# Indexing returns the item.
assert squares[0] == 1 # <-- Assertions here illustrate the result.
# Slicing returns a new list.
assert squares[-3:] == [9, 16, 25] # <-- Assertions here illustrate the result.

236.magic-wormhole

一条命令就能将文件安全地传送到另外一台电脑上的工具。基于 PAKE(Password-Authenticated Key Exchange)协议实现文件在公网的加密传输,发送和接收均仅需一条命令

237.recommenders

通过 Jupyter Notebook 形式呈现的推荐系统最佳实践。这是微软开源的推荐系统教程,项目中还包含推荐系统常用的 Python 工具箱

238.CPython-Internals

图文并茂的 Python 源码阅读笔记项目。阅读的是比较新的 CPython 3.8 版本,重点是项目一直在更新维护

239.mypy

Python 静态类型检查库。既然 Python 是一门动态类型语言,为啥还要检查类型呢?有了静态类型检测则无需运行代码,就可以发现程序中潜在的错误。还可以加入到 git hook 中,实现在提交代码前自动检查。详情查看这篇文章

240.Pokemon-Terminal

适用于多种终端的口袋妖怪主题工具。支持 iTerm2、ConEmu、Terminology、Windows 的终端,已经收集了 719 个小精灵

241.moviepy

用于处理视频的 Python 库,它支持视频剪辑、自定义效果、视频合成、格式转化、插入文字等功能。专于注视频但不局限于此,还支持处理音频和 GIF 图片。虽然现在视频剪辑的工具很丰富,但如果要批量处理视频,用 Python+moviepy 写个脚本应该可以一劳永逸,节省时间

示例代码:

1
2
3
4
5
6
7
8
9
10
11
from moviepy import *

video = VideoFileClip("myHolidays.mp4").subclip(50,60)

# Make the text. Many more options are available.
txt_clip = ( TextClip("My Holidays 2013",fontsize=70,color='white')
.with_position('center')
.with_duration(10) )

result = CompositeVideoClip([video, txt_clip]) # Overlay text on video
result.write_videofile("myHolidays_edited.webm",fps=25) # Many options...

242.pyinstrument

简单易用的 Python 代码性能分析库,优化 Python 代码的工具。支持 Python 3.7+ 能够分析异步代码,仅需一条命令即可显示具体到函数的耗时,快速指出影响代码性能的地方,帮助提高代码性能让你的代码快人一步

243.ray

基于 Python 的分布式计算框架,采用动态图计算模型。使用起来很方便可通过装饰器的方式,仅需修改极少的的代码,让原本运行在单机的 Python 代码轻松实现分布式计算。目前多用于机器学习方面

244.termpair

浏览器远程+实时操作命令行的工具。让开发者安全实时的共享终端,特别适合服务器非桌面系统的环境。

245.weiboSpider

Python 写的微博爬虫,命令行直接启动。支持获取微博用户、内容字段丰富。虽然爬虫的实战项目很多,但能一直更新的很少,因为只要数据源变动爬虫就要跟进迭代。

246.30-Days-Of-Python

免费、零基础的 Python 教程。保姆级 Python 教程内容虽为英文,但问题不大请放心食用

247.python-pinyin

汉语转拼音的 Python 库。不知道有没有小伙伴和我一样,刚看到这库不知道能用来干啥。其实它可以用来丰富被搜索的中文内容,通过该项目可实现拼音搜索内容、容错同音错别字、中文排序等,从而提高搜索准确度和体验

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>> from pypinyin import pinyin, lazy_pinyin, Style
>>> pinyin('中心') # or pinyin(['中心']),参数值为列表时表示输入的是已分词后的数据
[['zhōng'], ['xīn']]
>>> pinyin('中心', heteronym=True) # 启用多音字模式
[['zhōng', 'zhòng'], ['xīn']]
>>> pinyin('中心', style=Style.FIRST_LETTER) # 设置拼音风格
[['z'], ['x']]
>>> pinyin('中心', style=Style.TONE2, heteronym=True)
[['zho1ng', 'zho4ng'], ['xi1n']]
>>> pinyin('中心', style=Style.TONE3, heteronym=True)
[['zhong1', 'zhong4'], ['xin1']]
>>> pinyin('中心', style=Style.BOPOMOFO) # 注音风格
[['ㄓㄨㄥ'], ['ㄒㄧㄣ']]
>>> lazy_pinyin('威妥玛拼音', style=Style.WADEGILES)
['wei', "t'o", 'ma', "p'in", 'yin']
>>> lazy_pinyin('中心') # 不考虑多音字的情况
['zhong', 'xin']
>>> lazy_pinyin('战略', v_to_u=True) # 不使用 v 表示 ü
['zhan', 'lüe']
# 使用 5 标识轻声
>>> lazy_pinyin('衣裳', style=Style.TONE3, neutral_tone_with_five=True)
['yi1', 'shang5']
# 变调 nǐ hǎo -> ní hǎo
>>> lazy_pinyin('你好', style=Style.TONE2, tone_sandhi=True)
['ni2', 'ha3o']

248.q

用 SQL 方式查询 CSV 文件的命令行工具。支持 where、group_by、join 查询和中文等多种字符编码,还可以把查询结果转存到数据库。

示例代码:

1
2
3
4
5
sql$ q "SELECT COUNT(*) FROM ./clicks_file.csv WHERE c3 > 32.3"

$ ps -ef | q -H "SELECT UID, COUNT(*) cnt FROM - GROUP BY UID ORDER BY cnt DESC LIMIT 3"

$ q "select count(*) from some_db.sqlite3:::albums a left join another_db.sqlite3:::tracks t on (a.album_id = t.album_id)"

249.Tkinter-Designer

用拖动的方式创建漂亮的桌面软件。它的操作十分简单,首先在 Figma 网站通过拖拽的方式构建应用,然后把设计好的应用地址和 token 输入到 Tkinter-Designer 自动生成 Python 代码,最后就能得到界面简洁大方的桌面应用啦。

250.flask-state

一款轻便的机器状态监控 Flask 插件。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#1. Bind Database Address
from flask_state import DEFAULT_BIND_SQLITE
app.config['SQLALCHEMY_BINDS'] = {DEFAULT_BIND_SQLITE: 'sqlite:///path'}

#2. Configure Flask-State
import flask_state
flask_state.init_app(app)

#3. Include Imports to Views
// requires echarts module
import 'echarts';
import 'flask-state/flask-state.min.css';
import {init} from 'flask-state';
// Create a DOM node with ID 'test'. After init() binds the node,
// click to open the listening window
init({dom:document.getElementById('test')});

251.gopup

采集各种权威公开数据的 Python 库。

数据接口:百度、谷歌、头条、微博指数,宏观数据,利率数据,货币汇率,千里马、独角兽公司,新闻联播文字稿,影视票房数据,高校名单,疫情数据…

252.python-cheatsheet

全面且实用的 Python 备忘录。这个东西特别适合我这个上了年纪的人,比如:忘记怎么用 Python 写正则、要搞个进度条忘记库的名字和基本用法、用 pandas 处理数据忘记方法需要的参数等等。正当我觉得自己需要“回炉重学”的时候发现了这个项目,有了它上面的问题都可以找到拿来即用的代码片段。

253.running_page

一个展示个人跑步主页的 Python 项目。特性:

  • GitHub Actions 管理自动同步跑步进程及自动生成新的页面
  • Gatsby 生成的静态网页,速度快
  • Mapbox 进行地图展示
  • 支持 Nike、Runtastic、佳明、Keep 的数据
  • 自动备份 gpx 数据,方便备份及上传到其它软件

254.DearPyGui

强大的 Python GUI 库。底层采用 GPU 渲染提供了卓越的性能,内置多种现成的部件和样式控制,文档详细包含丰富的示例,可以轻松上手。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import dearpygui.dearpygui as dpg

def save_callback():
print("Save Clicked")

dpg.create_context()
dpg.create_viewport()
dpg.setup_dearpygui()

with dpg.window(label="Example Window"):
dpg.add_text("Hello world")
dpg.add_button(label="Save", callback=save_callback)
dpg.add_input_text(label="string")
dpg.add_slider_float(label="float")

dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()

255.kopf

用 Python 操作 Kubernetes 的框架。Kubernetes(k8s) 是一个容器编排系统,它本身提供了命令行工具(kubectl),但有时无法实现较为复杂的操作。通过该项目可以用 Python 轻松完成,需要条件判断、事件触发等复杂的 k8s 操作。

256.nonebot2

Python 异步聊天机器人框架。该项目基于 Python 的异步特性,可以轻松处理大量的消息。提供命令行脚手架、支持多种 IM 平台,能够快速构建聊天机器人、消息通知等项目。

257.sqlfluff

SQL 代码风格检查工具。编程语言的 linter 工具随处可见,但是少有 SQL 的工具。该项目就是用来检查、统一 SQL 代码风格的工具,支持 MySQL、BigQuery、Hive 等多种 SQL 方言。

To get started, install the package and run sqlfluff lint or sqlfluff fix:

1
2
3
4
5
6
7
8
9
$ pip install sqlfluff
$ echo " SELECT a + b FROM tbl; " > test.sql
$ sqlfluff lint test.sql --dialect ansi
== [test.sql] FAIL
L: 1 | P: 1 | L050 | Files must not begin with newlines or whitespace.
L: 1 | P: 3 | L003 | First line has unexpected indent
L: 1 | P: 11 | L039 | Unnecessary whitespace found.
L: 1 | P: 14 | L039 | Unnecessary whitespace found.
L: 1 | P: 27 | L001 | Unnecessary trailing whitespace.

258.docker-py

用 Python 操作 Docker 的库。Docker 官方出品的 Python 库,可以用来批量、自动管理镜像

259.memray

Python 的内存分析器。帮你分析 Python 应用的内存使用情况,找到内存泄漏的原因、占用内存多的代码、内存使用率高的原因。支持生成内存报告(火焰图、表格、树状图)和实时报告等模式,以及统计结果等功能

  • 表格报告:memray table [options]
  • 实时报告:memray run –live application.py
  • 统计结果:memray stats [options]

260.modin

更快、类似 pandas 的数据处理和分析库。底层通过 Ray 或 Dask 加速计算,上层兼容大部分 pandas API。所以使用起来十分简单,仅需更改一行代码即可从 pandas 无缝切换到 Modin,同时获得更快的数据处理速度

261.pikepdf

用于读取和写入 PDF 文件的 Python 库

示例代码:

1
2
3
4
5
# Elegant, Pythonic API
with pikepdf.open('input.pdf') as pdf:
num_pages = len(pdf.pages)
del pdf.pages[-1]
pdf.save('output.pdf')

262.pinry

分享图片的开源网站。该项目前后端分离采用 Vue.js + Django 等技术栈,网站以平铺的方式展示图片,支持浏览、上传和搜索图片以及管理后台、个人页、增加标签等功能

263.dooit

命令行待办事项工具。用 Python 写的交互式命令行 todo 工具,操作简单支持快捷键和鼠标,界面精致可自定义主题和图标。

264.gradio

用 Python 为模型创建演示界面。这是一个用于构建机器学习和数据科学演示的 Python 库,它包含多种输入和展示的组件,使用起来极其方便,只用几行代码就可以创建出演示机器学习模型的 Web 界面。

示例代码:

1
2
3
4
5
6
7
import gradio as gr

def greet(name):
return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()

265.label-studio

开源的数据标注工具。支持音频、文本、图像、视频、时间序列等,多种类型数据的标注和注释工具。

266.libtmux

用 Python 操作 tmux 的库。通过该项目就可以使用 Python 代码,自动操控 tmux 应用的会话、窗口、窗格。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> pane.clear()  # clear the pane
Pane(%1 ...)
>>> pane.send_keys("cowsay 'hello'", enter=True)
>>> print('\n'.join(pane.cmd('capture-pane', '-p').stdout)) # doctest: +SKIP
$ cowsay 'hello'
_______
< hello >
-------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
...

267.nas-tools

NAS 媒体库资源自动整理工具。支持资源检索和订阅、媒体库整理和通知服务的 NAS 媒体库工具,这是一个用爱发电的项目,可以不爱但请不要伤害。

268.whoogle-search

自架纯净谷歌搜索服务。这是一个注重保护用户隐私的元搜索引擎,它会返回过滤掉广告后的 Google 搜索结果,而且不追踪 IP、不存 Cookie。支持 Docker 部署既简单又快速,适合注重隐私的用户。

269.pokete

运行在终端里的口袋妖怪类游戏。虽然游戏图像采用简单的 ASCII 码构建,但商店、小精灵、对战等功能一应俱全

270.rembg

简单实用的删除图像背景/抠图工具

示例代码:

1
2
3
4
5
6
7
8
9
from rembg import remove
from PIL import Image

input_path = 'input.png'
output_path = 'output.png'

input = Image.open(input_path)
output = remove(input)
output.save(output_path)

271.saleor

用 Python 开发的电商平台。采用 Django+GraphQL API+React 构建,功能丰富支持移动端、订单、商品、用户管理等。在线体验

272.textdistance

计算文本距离的常用算法库。包含计算文本相似度、多样性、编辑距离、压缩等多种算法,所有算法均采用 Python 实现,容易理解调用方便

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import textdistance

textdistance.hamming('test', 'text')
# 1

textdistance.hamming.distance('test', 'text')
# 1

textdistance.hamming.similarity('test', 'text')
# 3

textdistance.hamming.normalized_distance('test', 'text')
# 0.25

textdistance.hamming.normalized_similarity('test', 'text')
# 0.75

textdistance.Hamming(qval=2).distance('test', 'text')
# 2

273.tiptop

炫酷的命令行系统监控工具

274.Archery

在线 SQL 审核平台。采用 Django+Bootstrap 框架开发而成,支持 MySQL、Oracle 等数据库的 SQL 上线、备份、慢日志查询等功能。在线尝试,账号:archer,密码:archer。

275.Handright

模拟手写体中文的 Python 库。基于 PIL 开发实现的工具库,能够输出手写体中文的图片,支持自定义背景图

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# coding: utf-8
from PIL import Image, ImageFont

from handright import Template, handwrite

text = "我能吞下玻璃而不伤身体。"
template = Template(
background=Image.new(mode="1", size=(1024, 2048), color=1),
font=ImageFont.truetype("path/to/my/font.ttf", size=100),
)
images = handwrite(text, template)
for im in images:
assert isinstance(im, Image.Image)
im.show()

276.OneForAll

功能强大的子域收集工具。具有强大的子域收集能力、支持子域验证、速度快等特点的子域扫描工具

277.pyenv

简单易用的 Python 版本管理工具。开发者有时候因为历史遗留问题,需要维护依赖不同 Pyhton 版本的项目,这时就需要安装和管理多个 Python 版本,这是一件十分痛苦的事情。而 pyenv 恰好完美地解决了这一痛点,它支持 global、local、shell 三种模式,开发者可以根据情况灵活地切换不同的 Python 版本,这一切仅需一条命令

278.xxh

在 SSH 服务器时带上自己喜欢的 shell。你的 shell 里是不是塞满了快捷脚本、工具和颜色,但在 SSH 远程连接服务器时,你就会失去这一切。xxh 可以把你最喜欢的 shell 带到任何地方

279.latexify_py

用于生成 LaTeX 数学公式的 Python 库。LaTeX 是一种基于 ΤΕΧ 的排版系统,对于展示复杂的数学公式表现极为出色。该项目可以用 Python 函数,轻松生成复杂的 LaTeX 数学公式描述。

280.matrix-webcam

在“矩阵”中进行视频会议。可以让你在视频会议时,实现类似《黑客帝国》数字雨的效果,支持 Teams/Zoom/Skype 视频软件,适用于 Windows、macOS、Linux 操作系统。

281.pdf2docx

可将 PDF 转换成 docx 文件的 Python 库。该项目通过 PyMuPDF 库提取 PDF 文件中的数据,然后采用 python-docx 库解析内容的布局、段落、图片、表格等,最后自动生成 docx 文件。

示例代码:

1
2
3
4
5
6
7
8
9
from pdf2docx import Converter

pdf_file = '/path/to/sample.pdf'
docx_file = 'path/to/sample.docx'

# convert pdf to docx
cv = Converter(pdf_file)
cv.convert(docx_file) # all pages by default
cv.close()

282.schedule

简单友好的 Python 任务调度库。该项目人性化的 API 设计,让开发者仅用几行代码就能轻松实现定时任务。它不依赖任何第三方库,全部代码也就一个文件 800 多行,拥有丰富的注释和单元测试,源码阅读起来十分轻松。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import schedule
import time

def job():
print("I'm working...")

schedule.every(10).seconds.do(job)
schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every(5).to(10).minutes.do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
schedule.every().day.at("12:42", "Europe/Amsterdam").do(job)
schedule.every().minute.at(":17").do(job)

def job_with_argument(name):
print(f"I am {name}")

schedule.every(10).seconds.do(job_with_argument, name="Peter")

while True:
schedule.run_pending()
time.sleep(1)

283.Umi-OCR

基于 PaddleOCR 的 OCR 图片转文字识别软件。完全免费、可离线使用的开源软件,支持截屏识别文字、批量导入图片、横/竖排文字,还可以自动忽略水印区域,适用于 Win10 操作系统。

284.diagrams

用 Python 代码图解系统架构。程序员在做技术方案的时候,系统架构图是必不可少的。该项目将绘制架构图时所需的图标,封装成了对应的类极易调用,文档还提供了丰富的示例,让你分分钟就能上手,轻松用 Python 快速绘制出一份精美且清晰的架构图,这样不仅能省去拖拽调整连线的步骤,而且代码还可以复用,以便应对不断迭代升级的架构。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB

with Diagram("Grouped Workers", show=False, direction="TB"):
ELB("lb") >> [EC2("worker1"),
EC2("worker2"),
EC2("worker3"),
EC2("worker4"),
EC2("worker5")] >> RDS("events")

285.labelImg

图形化界面的图像标注工具。用 Python 和 Qt 编写的图像标注桌面应用,简单方便下载就能用,适用于 Windows、Linux、macOS。标注数据支持 PASCAL VOC 格式的 XML 文件和 YOLO 的 txt 文件。

286.MechanicalSoup

自动与网站交互的轻量级 Python 库。我们写爬虫一般是请求+解析两步走,该项目将 Requests(请求) 和 BeautifulSoup(解析) 两大 Python 爬虫常用库,封装成一个浏览器对象(StatefulBrowser),将上面说的两步并成一步。后面仅需一个浏览器对象,就可以完成请求页面、过滤内容、提交表单、跳转地址等操作,使得代码更加简单、操作更加方便。又因为它不依赖浏览器进程,所以相较于 Selenium 它更加轻巧,但缺点是不支持 JS 动态渲染的页面。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
"""Example usage of MechanicalSoup to get the results from the Qwant
search engine.
"""

import re
import mechanicalsoup
import html
import urllib.parse

# Connect to Qwant
browser = mechanicalsoup.StatefulBrowser(user_agent='MechanicalSoup')
browser.open("https://lite.qwant.com/")

# Fill-in the search form
browser.select_form('#search-form')
browser["q"] = "MechanicalSoup"
browser.submit_selected()

# Display the results
for link in browser.page.select('.result a'):
# Qwant shows redirection links, not the actual URL, so extract
# the actual URL from the redirect link:
href = link.attrs['href']
m = re.match(r"^/redirect/[^/]*/(.*)$", href)
if m:
href = urllib.parse.unquote(m.group(1))
print(link.text, '->', href)

287.orange3

互动式数据分析桌面工具。一款面向不会编程人群的数据挖掘和数据可视化工具箱。内置多种图表类型、支持可视化编程,无需写代码即可做出简单、实用的数据分析软件,多用于教学和实验室等场景。

288.ydata-profiling

能够自动生成 pandas DataFrame 分析报告的库。虽然 pandas 自带的 df.describe 函数可以方便地生成统计报告,但是信息较少。该项目能够自动生成一份 df 多维度的 HTML 分析报告,包含列的类型、缺失情况、数值分布、行重复率、占用内存大小等信息,有助于更好地了解数据情况。

289.django-silk

Django 的性能分析工具。它可以将 Django 服务的平均耗时、请求次数、查询 SQL、代码性能分析等信息展示到一个页面,开发者有了这些信息就能够更快地找到 Django 服务的性能瓶颈和响应慢的原因。

290.Games

纯 Python 实现的桌面小游戏集合。该项目包含 20 多个不重样的趣味小游戏,它们都是采用 Python 开发运行简单,用到的库包括 cocos2d、pygame、PyQt 等。

291.OCRmyPDF

可以把 PDF 文件变成可搜索文件的工具。它使用 Tesseract OCR 引擎,将 PDF 的内容识别成文本,然后给 PDF 文件增加 OCR 文本层。从而实现可搜索和复制 PDF 的内容,已支持 100 多种语言。

292.pendulum

让 Python 处理时间更简单的库。该项目不仅提供了更加简单易用的 API,而且还兼容 datetime 标准库,可以直接替代码中的 datetime 对象。它提供了很多人性化的时间处理方式,比如时间加减、多长时间的描述以及时区的处理等等。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
>>> 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'

293.pg_activity

类似 top 的 PostgreSQL 数据库命令行监控工具。一条命令就能实时查看 PostgreSQL 数据库状态和每条 SQL 语句执行详情、耗时、占用资源、读/写速度等信息的工具。

294.Bottles

一款可轻松实现 Linux 上运行 Windows 软件的工具。该项目提供了清爽易用的 GUI 界面,用户就算不懂任何编程技巧,也可以轻而易举地在 Linux 系统上,运行 Windows 的游戏和软件。

295.django-cacheops

一款灵活的 Django ORM 缓存库。该项目使用 redis 作为缓存,可通过装饰器设置数据库查询结果的过期时间。

1
2
3
4
5
6
7
8
from cacheops import cached_as

@cached_as(Article, timeout=120)
def article_stats():
return {
'tags': list(Article.objects.values('tag').annotate(Count('id')))
'categories': list(Article.objects.values('category').annotate(Count('id')))
}

296.doccano

一款开源的文本标记工具。它可以提供文本分类、序列标记、情感分析、文本摘等功能,帮助快速完成打标工作,支持中文和多人协作。

297.FileCodeBox

一款匿名口令分享文本和文件的服务。该项目是基于 FastAPI+SQLite3 开发的文件分享服务,支持分享文件、口令提取文件等功能,无需注册即可完成文件提取。

298.python-systemd-tutorial

用 Python 编写 systemd 服务的教程。许多 Linux 发行版都用 systemd 来管理系统的服务,比如开机启动、自动重启、守护进程等。该项目讲解了如何入门 systemd,并提供了一个 Python 脚本和 systemd unit 文件,可以在此基础上快速开发出 systemd 服务。

1
2
3
4
5
6
7
8
9
10
11
12
if __name__ == '__main__':
import time
import systemd.daemon

print('Starting up ...')
time.sleep(10)
print('Startup complete')
systemd.daemon.notify('READY=1')

while True:
print('Hello from the Python Demo Service')
time.sleep(5)

持续更新中…