什么是ZeroNet?

ZeroNet是一个去中心化的类似于Internet的网络,由匈牙利的开发者使用Python制作,完全开源。网站由特殊的"ZeroNet URL"可以被使用一般的浏览器通过ZeroNet程序浏览,就像访问本地主机一样。ZeroNet默认并不匿名,但是用户可以通过内置的Tor功能进行匿名化。ZeroNet使用Bitcoin加密算法及BitTorrent网络。 防DMCA Take down 由于ZeroNet去中心化的原因,国外有人制作了一个ZeroNet版本的海盗湾,,这个网站可让版权所有者头疼啦...一般的网站服务器都有IP地址,不抗投诉的ISP收到了向IP WHOIS滥用信箱发送的DMCA投诉信的话,你就要和你的网站说再见了..(俗称 DMCA Take down),可用了ZeroNet后,并没有一台服务器是真实的服务器,任何访客都有可能成为服务器,还有些访客使用了Tor,更找不到真正的物理地址。 功能 实时站点更新 支持 Namecoin 的 .bit 域名 安装方便: 只需解压并运行 一键克隆存在的站点 无需密码、基于 BIP32 的认证:用与比特币钱包相同的加密方法用来保护你的账户 你的账户被使用和比特币钱包相同的加密方法 内建 SQL 服务器和 P2P 数据同步: 让开发更简单并提升加载速度 匿名性: 完整的 Tor 网络支持,支持通过 .onion 隐藏服务相互连接而不是通过IPv4地址连接 TLS 加密连接 自动打开 uPnP 端口 插件和多用户 (开放式代理) 支持 全平台兼容 原理 在你运行zeronet.py后你将可以通过http://127.0.0.1:43110/{zeronet_address} (比如.http://127.0.0.1:43110/1HeLLo4uzjaLetFx6NH3PMwFP3qbRbTf3D)。访问 zeronet 中的站点。 在你浏览 zeronet 站点时,客户端会尝试通过 BitTorrent 网络来寻找可用的节点,从而下载需要的文件 (html, css, js...) 你将会储存每一个浏览过的站点 每个站点都包含一个名为 content.json ,它储存了其他所有文件的 sha512 hash 值 和一个通过站点私钥建立的签名 如果站点的所有者 (拥有私钥的那个人) 修改了站点, 并且他/她签名了新的 content.json 然后推送至其他节点, 那么所有节点将会在验证 content.json 的真实性 (使用签名)后, 下载修改后的文件并推送至其他节点。 有关于 ZeroNet 加密, 站点更新, 多用户站点的幻灯片 » 常见问题 » ZeroNet开发者文档 »

好了,说点有用的: 1.可以建自己的网站,你基本上不用做什么。 2.基于p2p原理,你只要建好并有人浏览过,即使你自己关机,你的网站依然在全球存在。别人想关你站,没门。 3.基于p2p原理,支付内网穿透,也就是说你在内网也没关系,手机也没问题。 4.基于比特币原理,账号很安全,谁也不知道你是谁,谁也盗不去。 5.不需要域名,任何人访问都使用http://127.0.0.1:43110/字符串 来访问。 6.不用gg fb和tt你就能浏览全世界 项目地址:该项目的官方网址为: https://github.com/hellozeronet/zeronet 下载地址:https://github.com/HelloZeroNet/ZeroBundle/raw/master/dist/ZeroBundle-win.zip 相关说明:http://www.wanbizu.com/news/201603086775.html 安装方法?其实很简单,到官网zeronet.io下载,解压,双击运行,等进度走完就会自动打开默认浏览器,你就可以访问了。一般新系统都能正常运行,老系统有两种情况:如果自动打开浏览器后发现页面显示不正常,说明你的IE不支持,用chrome或者firefox浏览器来打开127.0.0.1:43110就行了。XP用户如果运行不了,那就需要下载安装微软的VC2008 Redistributable Package运行环境,才1MB多,搜一下就有了。 安装:解压后运行zeronet.cmd

安装后你唯一要做的,是注册一个id。 http://127.0.0.1:43110/zeroid.bit

如何加入 ?

下载 ZeroBundle 文件包: Microsoft Windows Apple OS X Linux 64bit Linux 32bit 解压缩 运行 ZeroNet.cmd (win), ZeroNet(.app) (osx), ZeroNet.sh (linux) 如果你在 OS X 上遇到了 "classic environment no longer supported" 错误,请打开一个终端然后把 ZeroNet.app 拖进去 在你打开时他将会自动下载最新版本的 ZeroNet 。 ## Linux 命令行 wget https://github.com/HelloZeroNet/ZeroBundle/raw/master/dist/ZeroBundle-linux64.tar.gz tar xvpfz ZeroBundle-linux64.tar.gz cd ZeroBundle 执行 ./ZeroNet.sh 来启动 在你打开时他将会自动下载最新版本的 ZeroNet 。 在 Debian Linux 中手动安装 sudo apt-get update sudo apt-get install msgpack-python python-gevent wget https://github.com/HelloZeroNet/ZeroNet/archive/master.tar.gz tar xvpfz master.tar.gz cd ZeroNet-master 执行 python zeronet.py 来启动 在你的浏览器中打开 http://127.0.0.1:43110/ ## Vagrant vagrant up 通过 vagrant ssh 连接到 VM cd /vagrant 运行 python zeronet.py --ui_ip 0.0.0.0 在你的浏览器中打开 http://127.0.0.1:43110/ ## Docker

docker run -d -v <local_data_folder>:/root/data -p 15441:15441 -p 43110:43110 nofish/zeronet
# 这个 Docker 镜像包含了 Tor ,但默认是禁用的,因为一些托管商不允许你在他们的服务器上运行 Tor。如果你希望启用它, 设置 ENABLE_TOR 环境变量为 true (默认: false). E.g.:
Docker run -d -e "ENABLE_TOR=true" -v <local_data_folder>:/root/data -p 15441:15441 -p 43110:43110 nofish/zeronet
在你的浏览器中打开 http://127.0.0.1:43110/ ## Virtualenv
virtualenv env
source env/bin/activate
pip install msgpack-python gevent
python zeronet.py
在你的浏览器中打开 http://127.0.0.1:43110/ 现有限制 没有类似于 BitTorrent 的文件拆分来支持大文件 没有比 BitTorrent 更好的匿名性 (已添加内置的完整 Tor 支持) 传输文件时没有压缩和加密 (已添加 TLS 支持) 不支持私有站点 # 如何创建一个 ZeroNet 站点? 如果 zeronet 在运行,把它关掉 执行: $ zeronet.py siteCreate ... - Site private key: 23DKQpzxhbVBrAtvLEc2uvk7DZweh4qL3fn3jpM3LgHDczMK2TtYUq - Site address: 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2 ... - Site created! $ zeronet.py ... 你已经完成了! 现在任何人都可以通过 http://localhost:43110/13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2 来访问你的站点 下一步: ZeroNet 开发者文档 我要如何修改 ZeroNet 站点? 修改位于 data/13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2 的目录. 在你改好之后: $ zeronet.py siteSign 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2 - Signing site: 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2... Private key (input hidden): 输入你在创建站点时获得的私钥 $ zeronet.py sitePublish 13DNDkMUExRf9Xa9ogwPKqp7zyHFEqbhC2 ... Site:13DNDk..bhC2 Publishing to 3/10 peers... Site:13DNDk..bhC2 Successfuly published to 3 peers - Serving files.... 就是这样! 你现在已经成功的签名并推送了你的更改。 帮助这个项目 Bitcoin: 1QDhxQ6PraUZa21ET5fYUCPgdrwBomnFgX Paypal: https://zeronet.readthedocs.org/en/latest/help_zeronet/donate/ Gratipay: https://gratipay.com/zeronet/ 赞助商 在 OSX/Safari 下 BrowserStack.com 带来更好的兼容性 感谢! 更多信息, 帮助, 变更记录和 zeronet 站点: https://www.reddit.com/r/zeronet/ 在: #zeronet @ FreeNode 和我们聊天,或者使用 gitter 这里是一个 gitter 上的中文聊天室 Email: hello@noloop.me # 福利 海盗湾全球种子站:http://127.0.0.1:43110/1PLAYgDQboKojowD3kwdb3CtWmWaokXvfp/ MSDN资源区:http://127.0.0.1:43110/1AJB5rtjfB9imjDGVk5vtRtZp3zgYizbpG/ Kindle电子书:http://127.0.0.1:43110/1KHCBG6dmbKXTZNenfwhWZ5x3oDyYyHSD4 导航:http://127.0.0.1:43110/1NzWeweqJ32aRVdM5UzFnYCszuvG5xV3vS

ZeroNet站点集合 & 搜索引擎 站点集合 http://127.0.0.1:43110/138R53t3ZW7KDfSfxVpWUsMXgwUnsDNXLP/?Page:list-of-zites ( 中文翻译在这里 ) http://127.0.0.1:43110/zaphods.bit/RM.html http://127.0.0.1:43110/0list.bit/ http://127.0.0.1:43110/1Dt7FR5aNLkqAjmosWh8cMWzJu633GYN6u/ 搜索引擎 http://127.0.0.1:43110/kaffiene.bit http://127.0.0.1:43110/zerosearch.bit/ http://127.0.0.1:43110/zerofind.bit 公用开放ZeroNet代{过}{滤}理集合(注意,这些代{过}{滤}理不能确保你的帐号安全) http://127.0.0.1:43110/ZeroProxies.bit 聊天室集合 http://127.0.0.1:43110/zerochatrooms.bit 博客集合 http://127.0.0.1:43110/zeroblogs.bit ZeroNet官方帮助集合 http://127.0.0.1:43110/ZeroSupport.bit

十三章 红黑树(red-black tree)

13.1 红黑树的性质

红黑树是一个二叉搜索树,增加了一个存储位保存结点的颜色, black 或者 red 树中的结点包含5个属性: color, key, left, right, p * 1.每个结点或是红色, 或是黑色 * 2.根结点是黑色 * 3.每个叶结点(nil)都是黑色的 * 4.如果一个结点是红色, 则它的2个子结点都是黑色 * 5.对于每个结点, 到其所有后代叶结点的简单路径上,均包含相同数量的黑色结点

黑高: 从某个结点x出发,到达一个叶结点的任意一条简单路径上的黑色结点的个数称为该结点的黑高

一个有n个内部结点的红黑树高度最多为 2log(n + 1)

证明:
假设红黑树的高为h,由性质4可知:从根结点到叶结点一条简单路径上至少有一半是黑色的。即:bh(x) >= h/2
由性质4可知, 结点数量 n >= 2**bh(x) - 1
log(n+1) >= bh(x)
log(n+1) >= h/2
所以:h <= 2log(n+1)

13.2 旋转(rotation)

rotation * 左旋(left-rotation)

def left_rotation(T, x):
y = x.right
x.right = y.left
if y.left != T.nil:
y.left.p = x
if x.p == T.nil:
T.root = y
elif x == x.p.left:
x.p.left = y
else:
x.p.right = y
x.p = y
y.left = x
* 右旋(right-rotation)
def right_rotation(T, x):
y = x.p
y.left = x.right
if x.right != nil:
x.right.p = y
if y.p == T.nil:
T.root = x
elif y.p.left == y:
y.p.left = x
else:
y.p.right = x
x.right = y
y.p = x
## 13.3 插入 RB-INSERT插入结点后后需要一个辅助程序RB-INSERT-FIXUP对结点重新着色并旋转
def RB_INSERT(T, z):
pass

13.4 删除

1.设置文件my.conf中的mysqld添加配置

server_id       = 1
log_bin = /var/log/mysql/mysql-bin.log # 二进制日志保存的路径
expire_logs_days = 10
max_binlog_size = 100M
binlog_ignore_db = mysql # 不写入日志的数据库
binlog_ignore_db = test # 多个需要重复设置

2.重启进入mysql查看

mysql> show binary logs;
+--------------+-----------+
| Log_name | File_size |
+--------------+-----------+
| mysql.000001 | 20437849 |
| mysql.000002 | 102119 |
| mysql.000003 | 488825 |
| mysql.000004 | 18150699 |
| mysql.000005 | 36176222 |
+--------------+-----------+

mysql> show master status;
+--------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------+----------+--------------+------------------+-------------------+
| mysql.000005 | 36205491 | | mysql,test | |
+--------------+----------+--------------+------------------+-------------------+

3. 全量备份

shell> mysqldump --single-transaction --flush-logs --master-data=2 \
--all-databases > backup_sunday_1_PM.sql

--single-transaction 单独的事务 --flush-logs 刷新二进制日志 --master-data

1.转换图片大小

convert -resize 50% old.jpg new.jpg

2.项目启动celery服务

celery worker --app=taidii  --loglevel=info --logfile=celery-worker-default-out.log

celery beat --app=taidii --loglevel=info

3.项目修改js之前

cd static/js/app/modules/
babel --presets react --watch reactSrc/ --out-dir reactBuild/

4.ssh保持连接

ssh -o TCPKeepAlive=yes -o ServerAliveInterval=300

5.django south

python manage.py syncdb
python manage.py convert_to_south appname
p
python manage.py schemagration appname --initial
python manage.py schemagration appname --auto
python manage.py migrate appname --fake 00001.xxx
python manage.py migrate appname

6. markdown 语法

6.1. 脚注

使用 [^keyword] 表示注脚。 keyword

6.2. 内容目录

使用[TOC]引用目录 toc

6.3 待办事宜 Todo 列表

使用带有 [ ] 或 [x] (未完成或已完成)项的列表语法撰写一个待办事宜列表例如: todo

6.4 表格

todo

6.5 流程图和时序图

  • 流程图: todo

  • 时序图: todo

6.6 LaTeX 公式

  • $ 表示行内公式: todo

  • $$ 表示整行公式: todo

git 统计

# 1、统计某人的代码提交量,包括增加,删除
git log --author="$(git config --get user.name)" --since=2014-07-01 --until=2016-08-01 --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }'

# 2、仓库提交者排名前5(如果看全部,去掉head管道即可)
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5

^M: bad interpreter

window下编辑过的文件放到unix系统执行。会报错。

使用vi打开文件

:set fileformat=unix

然后:w保存,即可

Powershell使用linux风格的快捷键

# 打开powershell配置文件
notepad.exe $PROFILE
# 添加下面一行
Set-PSReadlineOption -EditMode Emacs

nginx添加自定义的ssl

制作密钥

openssl genrsa -out test.key 2048

制作证书

openssl req -new -x509 -days 365 -key test.key -out test.crt

修改nginx配置

server {
listen 443;
server_name test.com; # 改为绑定证书的域名
ssl on;
ssl_certificate /etc/nginx/ssl/test.crt; # 改为自己申请得到的 crt 文件的名称
ssl_certificate_key/etc/nginx/ssl/test.key; # 改为自己申请得到的 key 文件的名称
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html; #站点目录
index index.html index.htm;
}
}

svn clean up failed

  1. 安装sqlite3命令行工具 (sqlite-tools-win32) from http://www.sqlite.org/download.html
  2. sqlite3 .svn/wc.db "select * from work_queue"
  3. sqlite3 .svn/wc.db "delete from work_queue"

清除命令行记录和登陆记录

sudo lastlog -C -u <username>

history -c

python多cpu build

MAKEFLAGS="-j$(nproc)" pip install xxx

redis设置用户名密码权限

参考redis docs

ACL SETUSER username on >PASSOWRD allchannels ~* allcommands
ACL SETUSER 用户名 on >密码 key 命令
# 示例
ACL SETUSER xm on >admin123 allchannels ~* allcommands

kafka

消费者

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --group group-python-test

生产者

kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test

golang交叉编译

GOOS=linux GOARCH=amd64 go build -o <output>

centos添加启动项

在CentOS中添加启动项通常需要创建一个Systemd单元文件来管理服务。下面是一些简单的步骤来实现这个过程:

  1. 创建一个名为<服务名称>.service的文件,其中<服务名称>是你想要添加的服务名称。可以使用任何文本编辑器创建该文件。
sudo vi /etc/systemd/system/<服务名称>.service
  1. 在打开的文件中,输入以下内容:
[Unit]
Description=<服务描述>
After=network.target

[Service]
ExecStart=<可执行文件的路径>
Restart=on-failure

[Install]
WantedBy=multi-user.target

确保将<服务描述>替换为对你的服务的简短描述,并将<可执行文件的路径>替换为你要运行的可执行文件的路径。

  1. 保存并关闭文件。

  2. 运行以下命令来重新加载Systemd配置:

sudo systemctl daemon-reload
  1. 运行以下命令以启用并启动服务:
sudo systemctl enable <服务名称>.service
sudo systemctl start <服务名称>.service

确保将<服务名称>替换为你在步骤1中创建的服务名称。

现在,你的服务将在CentOS启动时自动启动。你可以使用以下命令来管理服务:

sudo systemctl stop <服务名称>.service  # 停止服务
sudo systemctl restart <服务名称>.service # 重启服务
sudo systemctl status <服务名称>.service # 查看服务状态

aria2

# 文件的保存路径 (可使用绝对路径或相对路径), 默认:当前启动位置
# D:\Download 是我的默认下载目录,可以改为你自己的下载路径
dir=D:\Download

# 开启 BT 下列设置
enable-dht=true
bt-enable-lpd=true
enable-peer-exchange=true

# bt-tracker 更新,解决 Aria2 BT 下载速度慢没速度的问题
bt-tracker=udp://tracker.opentrackr.org:1337/announce,udp://9.rarbg.com:2810/announce,udp://opentracker.i2p.rocks:6969/announce,https://opentracker.i2p.rocks:443/announce,udp://tracker1.myporn.club:9337/announce,udp://tracker1.bt.moack.co.kr:80/announce,udp://tracker.torrent.eu.org:451/announce,udp://p4p.arenabg.com:1337/announce,udp://open.stealth.si:80/announce,udp://open.demonii.com:1337/announce,udp://ipv4.tracker.harry.lu:80/announce,udp://explodie.org:6969/announce,udp://exodus.desync.com:6969/announce,https://tracker.tamersunion.org:443/announce,https://tracker.nanoha.org:443/announce,https://tracker.lilithraws.org:443/announce,https://tr.burnabyhighstar.com:443/announce,https://1337.abcvg.info:443/announce,http://tracker.mywaifu.best:6969/announce,http://bt.okmp3.ru:2710/announce

mac删除无用的支持在后台服务

# 查找对应的服务
ls /Library/LaunchDaemons/
ls /Library/LaunchAgents/

#
sudo rm /Library/LaunchDaemons/<对应的服务>
sudo rm /Library/LaunchAgents/<对应的服务>

user加入docker的group

# 查看group
groups
# 加入docker组
sudo gpasswd -a $USER docker
# 重启docker后生效

switch游戏nsz转为nsp

安装: https://github.com/nicoboss/nsz/releases/

nsz -D /path/to/your/game.nsz

1.主服务器

1.1 设置好配置文件

cnf配置文件一般会有四个,可以根据命令 # ll /usr/share/mysql/*.cnf 查看;

my-small.cnf 内存少于或等于64M,只提供很少的的数据库服务;

my-medium.cnf 内存在32M--64M之间而且和其他服务一起使用,例如web;

my-large.cnf 内存有512M主要提供数据库服务;

my-huge.cnf 内存有1G到2G,主要提供数据库服务;

my-innodb-heavy-4G.cnf 内存有4G,主要提供较大负载数据库服务(一般服务器都使用这个);

可以根据服务器配置的不同选择不同的cnf配置文件。

my.cnf

[mysqld]
server-id = 1 # 必须,id,一般取IP最后一段
log-bin = mysql-bin # 必须,二进制日志文件
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = include_database_name # 包括的库名称 多个可换行多次设置
binlog_ignore_db = include_database_name # 不包括的库名称 多个可换行多次设置

1.2 配置好给从服务器登陆的账号,重启

grant replication slave on *.* to `tom`@`192.168.1.196` identified by 'password';
### 1.3 查看主服务器状态
mysql> show master status;
### 1.4 备份数据库(如果从服务器也为新建库,则不需要此操作)

备份数据库的方法有很多种:如果在同一局域网可以直接复制数据库,也可以用工具直接进行数据导入。

复制数据库用打包的方法:

cd/data 转到存放Mysql数据库的路径下

tarcvfz testcreate.tar.gz db/

再从数据库中进行复制解压

cd/data

scp 192.168.1.61:/data/testcreate.tar.gz

tar xvfz testcreate.tar.gz

2 从服务器

2.1. 配置从库服务my.cnf文件

# vi etc/my.cnf 对其进行如下修改:

Server-id = 2 # 这里ID改为2 因为主库为1;

log-bin = mysql-bin  # 必填项,用于数据同步;

master-host = 192.168.1.60 # 主库IP;

master-user = test # 同步用的账户;

master-password = 123456 # 同步账户密码,主库时的设置;

master-port = 3306 # 同步数据库的端口号。

2.2 重启从库服务器

#service mysqld restart

如果重启失败则配置文件有问题,需重新检查配置。

2.3 调整复制过来的数据库的权限(如果有从主库复制过来的数据库)

主库复制过来的数据库权限都为root权限,需要修改为mysql权限

#chown–R mysql:mysql /var/lib/mysql

如果从库是新建的库就不需要进行此步骤

2.4 显示从服务器状态

进行mysql服务器:

mysql>showslave status\G;
查看Slave_IO_Running和Slave_SQL_Running都是yes则成功

例如:

$ docker pull ubuntu:16.04
Trying to pull repository docker.io/library/ubuntu ...
Get https://registry-1.docker.io/v2/library/ubuntu/manifests/sha256:dd7808d8792c9841d0b460122f1acf0a2dd1f56404f8d1e56298048885e45535:
Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fubuntu%3Apull&service=registry.docker.io:
read tcp *.*.*.*:41348->50.17.62.194:443:
read: connection reset by peer
  • 原因:目测50.17.62.194被TCP重置。

  • 解决方法:

    找到其可用IP:

    $ dig auth.docker.io

     <<>> DiG 9.10.4-P6-RedHat-9.10.4-4.P6.fc25 <<>> auth.docker.io
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7119
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;auth.docker.io. IN A

    ;; ANSWER SECTION:
    auth.docker.io. 60 IN A 34.193.147.40
    auth.docker.io. 60 IN A 50.17.62.194
    auth.docker.io. 60 IN A 52.5.246.212

    ;; Query time: 130 msec
    ;; SERVER: *.*.*.*#53(.*.*.*.*)
    ;; WHEN: Tue Mar 07 11:03:29 CST 2017
    ;; MSG SIZE rcvd: 91
    改/etc/hosts强制docker.io相关的域名解析到其它可用IP:

    vi /etc/hosts
    34.193.147.40 registry-1.docker.io auth.docker.io

顺便附上关于镜像的描述以及现在有哪些镜像提供商

首先,需要明确一个问题:Mirror 与 Private Registry 有什么区别?

抄自daocloud的说明:

二者有着本质的差别。

Private Registry 是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。 Mirror 是一种代理中转服务,我们(指daocloud)提供的 Mirror 服务,直接对接 Docker Hub 的官方 Registry。Docker Hub 上有数以十万计的各类 Docker 镜像。 在使用 Private Registry 时,需要在 Docker Pull 或 Dockerfile 中直接键入 Private Registry 的地址,通常这样会导致与 Private Registry 的绑定,缺乏灵活性。 使用 Mirror 服务,只需要在 Docker 守护进程(Daemon)的配置文件中加入 Mirror 参数,即可在全局范围内透明的访问官方的 Docker Hub,避免了对 Dockerfile 镜像引用来源的修改。

简单来说,Mirror类似CDN,本质是官方的cache;Private Registry类似私服,跟官方没什么关系。对我来说,由于我是要拖docker hub上的image,对应的是Mirror。 yum/apt的mirror又有点不一样,它其实是把官方的库文件整个拖到自己的服务器上做镜像(不管有没有用),并定时与官方做同步;而Docker mirror只会缓存曾经使用过的image。

目前国内访问docker hub非常便秘,使用docker mirror势在必行。现有提供服务的有三家:ustc、daocloud、aliyun,下面会一一介绍。

1. 网易163 docker镜像

$ sudo echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://hub-mirror.c.163.com\"" >> /etc/default/docker
$ service docker restart

2. ustc的镜像

ustc是老牌的Linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。之前在blog里有提到可以用ustc的docker仓库镜像,使用方法参考ustc docker 镜像使用帮助。

ustc的docker镜像速度不错,一直用的挺happy。但是今天发现不好使了,可能跟这件事有关系吧,今天尝试去pull ubuntu,非常慢,应该是直接去docker hub上去拉了,基本没有加速效果。

ustc docker mirror的优势之一是,不需要注册,公共服务(这才是我熟悉的ustc嘛)。

3. daocloud

DaoCloud也提供了docker加速器,但是跟ustc不同,需要用户注册后才能使用,并且每月限制流量10GB。linux上使用比较简单,一条命令搞定:

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://{your_id}.m.daocloud.io

实际改的是/usr/lib/systemd/system/docker.service,加了个–registry-mirror参数,:

ExecStart=/usr/bin/docker-current daemon --registry-mirror=http://{your_id}.m.daocloud.io

设置后,需要重新加载配置&重启:

systemctl enable docker; systemctl daemon-reload ; systemctl restart docker

但是!今天使用DaoCloud的docker加速器体验非常差,加速效果基本没感觉,果断放弃。 ## 4. alicloud

阿里云也提供了docker加速器,不过比ustc更麻烦:不光要注册为阿里云的用户,还得加入开发者平台。不过捏着鼻子昨晚这些以后,它的服务还真是不错,基本1MB/s的pull速度(部分原因可能是因为我也在杭州吧)。配置方法跟daocloud类似,也是开通加速器以后给一个url。

我直接去改/usr/lib/systemd/system/docker.service了:

ExecStart=/usr/bin/docker-current daemon --registry-mirror=https://{your_id}.mirror.aliyuncs.com\

重新加载配置&重启:

systemctl enable docker; systemctl daemon-reload ; systemctl restart docker

pull的时候还是显示docker.io,但速度一点都不docker.io。

# docker pull ubuntu
Using default tag: latest
Trying to pull repository docker.io/library/ubuntu ...
latest: Pulling from docker.io/library/ubuntu
cad964aed91d: Pull complete
3a80a22fea63: Pull complete
50de990d7957: Pull complete
61e032b8f2cb: Pull complete
9f03ce1741bf: Pull complete
Digest: sha256:28d4c5234db8d5a634d5e621c363d900f8f241240ee0a6a978784c978fe9c737
Status: Downloaded newer image for docker.io/ubuntu:latest

算法 最坏情况运行时间 平均/期望运行时间
1 插入排序 Θ(n**2) Θ(n**2)
2 归并排序 Θ(nlgn) Θ(nlgn)
3 冒泡排序 Θ(n**2) Θ(n**2)
4 选择排序 Θ(n**2) Θ(n**2)
5 堆排序 Θ(nlgn)
6 快速排序 Θ(n**2) Θ(nlgn)
7 计数排序 Θ(n + k) Θ(n + k)
8 基数排序 Θ(d(n + k)) Θ(d(n + k))
9 桶排序

1.插入排序

  • 思路:类似于抽牌的过程,右手一张张地抽牌,每次右手抽的牌对比左手中已经排序好的牌,放在左手相应的位置中 example1
def sort_insert(lista):
for i in xrange(1, len(lista)): # 右手抽的牌
right_num = lista[i]
j = i #左手边起始对比的位置
while (j > 0) and (lista[j-1] > right_num): # 左边比较大的时候
lista[j] = lista[j-1] # 坐标的数字往后移
j -= 1
lista[j] = right_num
return lista

2.归并排序

  • 思路:
    1. 将数组划分为2个排好顺序的数组A和B
    2. 每次从2个数组中抽出一个最小的放在另一个数组C中,直到A、B其中一个数组被取完,将A、B中未取完的数组放入C中
def sort_merge(lista):
def compare(A, B): #步骤2
result = []
i, j = 0, 0
while i < len(A) and j < len(B):
if A[i] < B[j]:
result.append(A[i])
i += 1
else:
result.append(B[j])
j += 1
result.extend(A[i:])
result.extend(B[j:])
return result

def merge(lista): #步骤1,将数组分为2个数组A,B
if len(lista) == 1:
return lista
else:
mid = len(lista) // 2
left = merge(lista[:mid])
right = merge(lista[mid:])
return compare(left, right)
return merge(lista)

3.冒泡排序

  • 思路: 从左往右,从第一个数字开始,左边一个与右边一个数字对比,如果左边比右边大,就交换顺序,然后再从第二个数字开始迭代
def sort_bubble(lista):
length = len(lista)
for i in xrange(length-1):
for j in xrange(i, length-1):
if lista[j] > lista[j+1]: #如果左边大于右边,交换位置
lista[j], lista[j+1] = lista[j+1], lista[j]
return lista

4.选择排序

  • 思路: 类似于冒泡排序,但是循环的时候是找出最小的数值,与循环的起始位置交换顺序
def sort_selection(lista):
length = len(lista)
for i in xrange(length - 1):
minum = i
for j in xrange(i, length):
if lista[j] < lista[minum]:
minum = j
lista[i] = lista[minum]
return lista

5.堆排序

  • 思路: 1.将数组看做一个最大二叉堆 2.维护最大二叉堆的性质,父节点大于子节点 3.然后从根节点取出元素放到后面,重新维护最大堆的性质 4.重复3步骤,直到剩下最后1个元素
def sort_heap(lista):
def Father(i): # 父节点 i的一半向下取整 └ i/2 ┘
return (i+1)//2 - 1
def Left(i): # 左孩子节点
return (i+1)*2 - 1
def Right(i): # 右孩子节点
return (i+1)*2 + 1 - 1
def max_heapify(A, i): # 维护最大堆的性质
global heap_size
l = Left(i)
r = Right(i)
lastest = i
if l <= heap_size and l > A[lastest]:
lastest = l
if r <= heap_size and r > A[lastest]:
lastest = r
if lastest != i:
A[i], A[lastest] = A[lastest], A[i]
max_heapify(lastest)

def build_max_heap(A): # 生成最大堆
global heap_size
heap_size = len(A) - 1
for i in xrange(len(A)//2, -1, -1):
max_heapify(A, i)

def heap_sort(A): #排序
global heap_size
build_max_heap(A)
for i in xrange(len(A) - 1, 0, -1):
A[0], A[i] = A[i], A[0]
max_heapify(A, 0)
heap_sort(lista)
return lista

6.快速排序

  • 思路: 1.将数组的第一个数字定为基准数flag,将数组中比flag小的放置在flag左边,比flag大的放置在右边 2.对flag左边的和右边的数组重复步骤1
def sort_fast(lista):
def sub_flag(array, start, end): # 步骤1
flag = array[start]#确定flag
while start > end:
while (start > end) and array[end] > flag: # 比flag大
end -= 1 # 数字位置不变,比较的位置左移一格
while (start > end) and array[end] < flag: # 比flag小
array[start] = array[end] # 移动到左边
start += 1
array[end] = array[start] # 将之前左边的数字右边一个未比较的数字移动到右边原来的位置
array[start] = flag
return start # 返回flag的位置

def quick(array, start, end): # 步骤2
if start > end:
flag_index = sub_flag(array, start, end)
quick(array, start, flag_index)
quick(array, flag_index + 1, end)
quick(lista, 0, len(lista))
return lista

7.计数排序

  • 思路: 1.假设输入数组A[0,n], 其中最大值是max(A),假设 k >= max(A) 2.将B[0,k]每一位赋予初始值0,然后与A中元素i比较,将B[i] = B[i] + 1 3.数组B[0,k] 中的数值B[i] 就表示 A中元素i的数量 4.B[i] = B[i] + B[i-1],B中元素B[i]就代表比i小的元素的数量
def sort_count(lista):
k = max(lista) + 1
length = len(lista)
B = [0] * k # 临时存储
C = [0] * length # 输出
for i in lista:
B[i] = B[i] + 1
for i in xrange(1, k):
B[i] = B[i] + B[i-1]
for i in xrange(length - 1, -1, -1):
C[B[lista[i]] = lista[i]
B[lista[i]] = B[lista[i]] - 1
return C

8.基数排序

  • 思路:

写在最前

这是一个笔记,方便自己查询,详情请看原出处awesome-python-cn


Python 资源大全中文版

我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理。awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由伯乐在线持续更新。

Awesome 系列虽然挺全,但基本只对收录的资源做了极为简要的介绍,如果有更详细的中文介绍,对相应开发者的帮助会更大。


我们要做什么?


环境管理

管理 Python 版本和环境的工具

  • p:非常简单的交互式 python 版本管理工具。官网
  • pyenv:简单的 Python 版本管理工具。官网
  • Vex:可以在虚拟环境中执行命令。官网
  • virtualenv:创建独立 Python 环境的工具。官网
  • virtualenvwrapper:virtualenv 的一组扩展。官网

包管理

管理包和依赖的工具。

  • pip:Python 包和依赖关系管理工具。官网
  • pip-tools:保证 Python 包依赖关系更新的一组工具。官网
  • conda:跨平台,Python 二进制包管理工具。官网
  • Curdling:管理 Python 包的命令行工具。官网
  • wheel:Python 分发的新标准,意在取代 eggs。官网

包仓库

本地 PyPI 仓库服务和代理。

  • warehouse:下一代 PyPI。官网
  • devpi:PyPI 服务和打包/测试/分发工具。官网
  • localshop:本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。官网

分发

打包为可执行文件以便分发。

  • PyInstaller:将 Python 程序转换成独立的执行文件(跨平台)。官网
  • dh-virtualenv:构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。官网
  • Nuitka:将脚本、模块、包编译成可执行文件或扩展模块。官网
  • py2app:将 Python 脚本变为独立软件包(Mac OS X)。官网
  • py2exe:将 Python 脚本变为独立软件包(Windows)。官网
  • pynsist:一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。官网

构建工具

将源码编译成软件。

  • buildout:一个构建系统,从多个组件来创建,组装和部署应用。官网
  • BitBake:针对嵌入式 Linux 的类似 make 的构建工具。官网
  • fabricate:对任何语言自动找到依赖关系的构建工具。官网
  • PlatformIO:多平台命令行构建工具。官网
  • PyBuilder:纯 Python 实现的持续化构建工具。官网
  • SCons:软件构建工具。官网

交互式解析器

交互式 Python 解析器。

文件

文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。

  • imghdr:(Python 标准库)检测图片类型。官网
  • mimetypes:(Python 标准库)将文件名映射为 MIME 类型。官网
  • path.py:对 os.path 进行封装的模块。官网
  • pathlib:(Python3.4+ 标准库)跨平台的、面向对象的路径操作库。官网
  • python-magic:文件类型检测的第三方库 libmagic 的 Python 接口。官网
  • Unipath:用面向对象的方式操作文件和目录。官网
  • watchdog:管理文件系统事件的 API 和 shell 工具官网

日期和时间

操作日期和时间的类库。

  • arrow:更好的 Python 日期时间操作类库。官网
  • Chronyk:Python 3 的类库,用于解析手写格式的时间和日期。官网
  • dateutil:Python datetime 模块的扩展。官网
  • delorean:解决 Python 中有关日期处理的棘手问题的库。官网
  • moment:一个用来处理时间和日期的Python库。灵感来自于Moment.js。官网
  • PyTime:一个简单易用的Python模块,用于通过字符串来操作日期/时间。官网
  • pytz:现代以及历史版本的世界时区定义。将时区数据库引入Python。官网
  • when.py:提供用户友好的函数来帮助用户进行常用的日期和时间操作。官网

文本处理

用于解析和操作文本的库。

  • 通用
    • chardet:字符编码检测器,兼容 Python2 和 Python3。官网
    • difflib:(Python 标准库)帮助我们进行差异化比较。官网
    • ftfy:让Unicode文本更完整更连贯。官网
    • fuzzywuzzy:模糊字符串匹配。官网
    • Levenshtein:快速计算编辑距离以及字符串的相似度。官网
    • pangu.py:在中日韩语字符和数字字母之间添加空格。官网
    • yfiglet-figlet:pyfiglet -figlet 的 Python实现。
    • shortuuid:一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。官网
    • unidecode:Unicode 文本的 ASCII 转换形式 。官网
    • uniout:打印可读的字符,而不是转义的字符串。官网
    • xpinyin:一个用于把汉字转换为拼音的库。官网
    • simplejson:Python的JSON编码、解码器。官网GitHub
  • Slug化
    • awesome-slugify:一个 Python slug 化库,可以保持 Unicode。官网
    • python-slugify:Python slug 化库,可以把 unicode 转化为 ASCII。官网
    • unicode-slugify:一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。官网
  • 解析器
    • phonenumbers:解析,格式化,储存,验证电话号码。官网
    • PLY:lex 和 yacc 解析工具的 Python 实现。官网
    • Pygments:通用语法高亮工具。官网
    • pyparsing:生成通用解析器的框架。官网
    • python-nameparser:把一个人名分解为几个独立的部分。官网
    • python-user-agents:浏览器 user agent 解析器。官网
    • sqlparse:一个无验证的 SQL 解析器。官网

特殊文本格式处理

一些用来解析和操作特殊文本格式的库。

  • 通用
    • tablib:一个用来处理中表格数据的模块。官网
  • Office
    • Marmir:把输入的Python 数据结构转换为电子表单。官网
    • openpyxl:一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。官网
    • python-docx:读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。官网
    • unoconv:在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。官网
    • XlsxWriter:一个用于创建 Excel .xlsx 文件的 Python 模块。官网
    • xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。官网
    • xlwt:读写 Excel 文件的数据和格式信息。官网 / xlrd
    • relatorio:模板化OpenDocument 文件。官网
  • PDF
    • PDFMiner:一个用于从PDF文档中抽取信息的工具。官网
    • PyPDF2:一个可以分割,合并和转换 PDF 页面的库。官网
    • ReportLab:快速创建富文本 PDF 文档。官网
  • Markdown
    • Mistune:快速并且功能齐全的纯 Python 实现的 Markdown 解析器。官网
    • Python-Markdown:John Gruber’s Markdown 的 Python 版实现。官网
    • Python-Markdiwn2:纯 Python 实现的 Markdown 解析器,比 Python-Markdown 更快,更准确,可扩展。官网
  • YAML
    • PyYAML:Python 版本的 YAML 解析器。官网
  • CSV
    • csvkit:用于转换和操作 CSV 的工具。官网
  • Archive
    • unp:一个用来方便解包归档文件的命令行工具。官网

自然语言处理

用来处理人类语言的库。

  • NLTK:一个先进的平台,用以构建处理人类语言数据的 Python 程序。官网
  • jieba:中文分词工具。官网
  • langid.py:独立的语言识别系统。官网
  • Pattern:Python 网络信息挖掘模块。官网
  • SnowNLP:一个用来处理中文文本的库。官网
  • TextBlob:为进行普通自然语言处理任务提供一致的 API。官网
  • TextGrocery:一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。官网

文档

用以生成项目文档的库。

  • Sphinx:Python 文档生成器。官网
  • MkDocs:对 Markdown 友好的文档生成器。官网
  • pdoc:一个可以替换Epydoc 的库,可以自动生成 Python 库的 API 文档。官网
  • Pycco:文学编程(literate-programming)风格的文档生成器。官网

配置

用来保存和解析配置的库。

  • config:logging 模块作者写的分级配置模块。官网
  • ConfigObj:INI 文件解析器,带验证功能。官网
  • ConfigParser:(Python 标准库) INI 文件解析器。官网
  • profig:通过多种格式进行配置,具有数值转换功能。官网
  • python-decouple:将设置和代码完全隔离。官网

命令行工具

用于创建命令行程序的库。

  • 命令行程序开发
    • asciimatics:跨平台,全屏终端包(即鼠标/键盘输入和彩色,定位文本输出),完整的复杂动画和特殊效果的高级API。官网
    • cement:Python 的命令行程序框架。官网
    • click:一个通过组合的方式来创建精美命令行界面的包。官网
    • cliff:一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。官网
    • clint:Python 命令行程序工具。官网
    • colorama:跨平台彩色终端文本。官网
    • docopt:Python 风格的命令行参数解析器。官网
    • Gooey:一条命令,将命令行程序变成一个 GUI 程序。官网
    • python-prompt-toolkit:一个用于构建强大的交互式命令行程序的库。官网
    • Pythonpy:在命令行中直接执行任何Python指令。官网
  • 生产力工具
    • aws-cli:Amazon Web Services 的通用命令行界面。官网
    • bashplotlib:在终端中进行基本绘图。官网
    • caniusepython3:判断是哪个项目妨碍你你移植到 Python 3。官网
    • cookiecutter:从 cookiecutters(项目模板)创建项目的一个命令行工具。官网
    • doitlive:一个用来在终端中进行现场演示的工具。官网
    • howdoi:通过命令行获取即时的编程问题解答。官网
    • httpie:一个命令行HTTP 客户端,cURL 的替代品,易用性更好。官网
    • PathPicker:从bash输出中选出文件。官网
    • percol:向UNIX shell 传统管道概念中加入交互式选择功能。官网
    • SAWS:一个加强版的 AWS 命令行。官网
    • thefuck:修正你之前的命令行指令。官网
    • mycli:一个 MySQL 命令行客户端,具有自动补全和语法高亮功能。官网
    • pgcli:Postgres 命令行工具,具有自动补全和语法高亮功能。官网    *   try:一个从来没有更简单的命令行工具,用来试用python库。官网

下载器

用来进行下载的库.

  • s3cmd:一个用来管理Amazon S3 和 CloudFront 的命令行工具。官网
  • s4cmd:超级 S3 命令行工具,性能更加强劲。官网
  • you-get:一个 YouTube/Youku/Niconico 视频下载器,使用 Python3 编写。官网
  • youtube-dl:一个小巧的命令行程序,用来下载 YouTube 视频。官网

图像处理

用来操作图像的库.

  • pillow:Pillow 是一个更加易用版的 PIL官网
  • hmap:图像直方图映射。官网
  • imgSeek:一个使用视觉相似性搜索一组图片集合的项目。官网
  • nude.py:裸体检测。官网
  • pyBarcode:不借助 PIL 库在 Python 程序中生成条形码。官网
  • pygram:类似 Instagram 的图像滤镜。官网
  • python-qrcode:一个纯 Python 实现的二维码生成器。官网
  • Quads:基于四叉树的计算机艺术。官网
  • scikit-image:一个用于(科学)图像处理的 Python 库。官网
  • thumbor:一个小型图像服务,具有剪裁,尺寸重设和翻转功能。官网
  • wand:MagickWand的Python 绑定。MagickWand 是 ImageMagick的 C API 。官网

OCR

光学字符识别库。

音频

用来操作音频的库

  • audiolazy:Python 的数字信号处理包。官网
  • audioread:交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。官网
  • beets:一个音乐库管理工具及 MusicBrainz 标签添加工具官网
  • dejavu:音频指纹提取和识别官网
  • django-elastic-transcoder:Django + Amazon Elastic Transcoder官网
  • eyeD3:一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。官网
  • id3reader:一个用来读取 MP3 元数据的 Python 模块。官网
  • m3u8:一个用来解析 m3u8 文件的模块。官网
  • mutagen:一个用来处理音频元数据的 Python 模块。官网
  • pydub:通过简单、简洁的高层接口来操作音频文件。官网
  • pyechonest:Echo Nest API 的 Python 客户端官网
  • talkbox:一个用来处理演讲/信号的 Python 库官网
  • TimeSide:开源 web 音频处理框架。官网
  • tinytag:一个用来读取MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。官网
  • mingus:一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。官网

Video

用来操作视频和GIF的库。

  • moviepy:一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。官网
  • scikit-video:SciPy 视频处理常用程序。官网

地理位置

地理编码地址以及用来处理经纬度的库。

  • GeoDjango:世界级地理图形 web 框架。官网
  • GeoIP:MaxMind GeoIP Legacy 数据库的 Python API。官网
  • geojson:GeoJSON 的 Python 绑定及工具。官网
  • geopy:Python 地址编码工具箱。官网
  • pygeoip:纯 Python GeoIP API。官网
  • django-countries:一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。官网

HTTP

使用HTTP的库。

  • requests:人性化的HTTP请求库。官网
  • grequests:requests 库 + gevent ,用于异步 HTTP 请求.官网
  • httplib2:全面的 HTTP 客户端库。官网
  • treq:类似 requests 的Python API 构建于 Twisted HTTP 客户端之上。官网
  • urllib3:一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。官网

数据库

Python实现的数据库。

  • pickleDB:一个简单,轻量级键值储存数据库。官网
  • PipelineDB:流式 SQL 数据库。官网
  • TinyDB:一个微型的,面向文档型数据库。官网
  • ZODB:一个 Python 原生对象数据库。一个键值和对象图数据库。官网

数据库驱动

用来连接和操作数据库的库。

  • MySQL:awesome-mysql系列
    • mysql-python:Python 的 MySQL 数据库连接器。官网
    • ysqlclient:mysql-python 分支,支持 Python 3。
    • oursql:一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs.官网
    • PyMySQL:纯 Python MySQL 驱动,兼容 mysql-python。官网
  • PostgreSQL
    • psycopg2:Python 中最流行的 PostgreSQL 适配器。官网
    • queries:psycopg2 库的封装,用来和 PostgreSQL 进行交互。官网
    • txpostgres:基于 Twisted 的异步 PostgreSQL 驱动。官网
  • 其他关系型数据库
    • apsw:另一个 Python SQLite封装。官网
    • dataset:在数据库中存储Python字典
    • pymssql:一个简单的Microsoft SQL Server数据库接口。官网
  • NoSQL 数据库
    • cassandra-python-driver:Cassandra 的 Python 驱动。官网
    • HappyBase:一个为 Apache HBase 设计的,对开发者友好的库。官网
    • Plyvel:一个快速且功能丰富的 LevelDB 的 Python 接口。官网
    • py2neo:Neo4j restful 接口的Python 封装客户端。官网
    • pycassa:Cassandra 的 Python Thrift 驱动。官网
    • PyMongo:MongoDB 的官方 Python 客户端。官网
    • redis-py:Redis 的 Python 客户端。官网
    • telephus:基于 Twisted 的 Cassandra 客户端。官网
    • txRedis:基于 Twisted 的 Redis 客户端。官网

ORM

实现对象关系映射或数据映射技术的库。

  • 关系型数据库
    • Django Models:Django 的一部分。官网
    • SQLAlchemy:Python SQL 工具以及对象关系映射工具。官网
    • Peewee:一个小巧,富有表达力的 ORM。官网
    • PonyORM:提供面向生成器的 SQL 接口的 ORM。官网
    • python-sql:编写 Python 风格的 SQL 查询。官网
  • NoSQL 数据库
    • django-mongodb-engine:Django MongoDB 后端。官网
    • PynamoDB:Amazon DynamoDB 的一个 Python 风格接口。官网
    • flywheel:Amazon DynamoDB 的对象映射工具。官网
    • MongoEngine:一个Python 对象文档映射工具,用于 MongoDB。官网
    • hot-redis:为 Redis 提供 Python 丰富的数据类型。官网
    • redisco:一个 Python 库,提供可以持续存在在 Redis 中的简单模型和容器。官网
  • 其他
    • butterdb:Google Drive 电子表格的 Python ORM。官网

Web 框架

全栈 Web 框架。

  • Django:Python 界最流行的 web 框架。官网
  • Flask:一个 Python 微型框架。官网
  • pyramid:一个小巧,快速,接地气的开源Python web 框架。
  • Bottle:一个快速小巧,轻量级的 WSGI 微型 web 框架。官网
  • CherryPy:一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有WSGI 线程池。官网
  • TurboGears:一个可以扩展为全栈解决方案的微型框架。官网
  • web.py:一个 Python 的 web 框架,既简单,又强大。官网
  • web2py:一个全栈 web 框架和平台,专注于简单易用。官网
  • Tornado:一个web 框架和异步网络库。官网

权限

允许或拒绝用户访问数据或功能的库。

  • Carteblanche:Module to align code with thoughts of users and designers. Also magically handles navigation and permissions.官网
  • django-guardian:Django 1.2+ 实现了单个对象权限。官网
  • django-rules:一个小巧但是强大的应用,提供对象级别的权限管理,且不需要使用数据库。官网

CMS

内容管理系统

  • odoo-cms: 一个开源的,企业级 CMS,基于odoo。官网
  • django-cms:一个开源的,企业级 CMS,基于 Django。官网
  • djedi-cms:一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。官网
  • FeinCMS:基于 Django 构建的最先进的内容管理系统之一。官网
  • Kotti:一个高级的,Python 范的 web 应用框架,基于 Pyramid 构建。官网
  • Mezzanine:一个强大的,持续的,灵活的内容管理平台。官网
  • Opps:一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。官网
  • Plone:一个构建于开源应用服务器 Zope 之上的 CMS。官网
  • Quokka:灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。官网
  • Wagtail:一个 Django 内容管理系统。官网
  • Widgy:最新的 CMS 框架,基于 Django。官网

电子商务

用于电子商务以及支付的框架和库。

  • django-oscar:一个用于 Django 的开源的电子商务框架。官网
  • django-shop:一个基于 Django 的店铺系统。官网
  • Cartridge:一个基于 Mezzanine 构建的购物车应用。官网
  • shoop:一个基于 Django 的开源电子商务平台。官网
  • alipay:非官方的 Python 支付宝 API。官网
  • merchant:一个可以接收来自多种支付平台支付的 Django 应用。官网
  • money:货币类库with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution.官网
  • python-currencies:显示货币格式以及它的数值。官网

RESTful API

用来开发RESTful APIs的库

  • Django
    • django-rest-framework:一个强大灵活的工具,用来构建 web API。官网
    • django-tastypie:为Django 应用开发API。官网
    • django-formapi:为 Django 的表单验证,创建 JSON APIs 。官网
  • Flask
    • flask-api:为 flask 开发的,可浏览 Web APIs 。官网
    • flask-restful:为 flask 快速创建REST APIs 。官网
    • flask-restless:为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。官网
    • flask-api-utils:为 Flask 处理 API 表示和验证。官网
    • eve:REST API 框架,由 Flask, MongoDB 等驱动。官网
  • Pyramid
    • cornice:一个Pyramid 的 REST 框架 。官网
  • 与框架无关的
    • falcon:一个用来建立云 API 和 web app 后端的高性能框架。官网
    • sandman:为现存的数据库驱动系统自动创建 REST APIs 。官网
    • restless:框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。官网
    • ripozo:快速创建 REST/HATEOAS/Hypermedia APIs。官网

验证

实现验证方案的库。

  • OAuth
    • Authomatic:简单但是强大的框架,身份验证/授权客户端。官网
    • django-allauth:Django 的验证应用。官网
    • django-oauth-toolkit:为 Django 用户准备的 OAuth2。官网
    • django-oauth2-provider:为 Django 应用提供 OAuth2 接入。官网
    • Flask-OAuthlib:OAuth 1.0/a, 2.0 客户端实现,供 Flask 使用。官网
    • OAuthLib:一个 OAuth 请求-签名逻辑通用、 完整的实现。官网
    • python-oauth2:一个完全测试的抽象接口。用来创建 OAuth 客户端和服务端。官网
    • python-social-auth:一个设置简单的社会化验证方式。官网
    • rauth:OAuth 1.0/a, 2.0, 和 Ofly 的 Python 库。官网
    • sanction:一个超级简单的OAuth2 客户端实现。官网
  • 其他
    • jose:JavaScript 对象签名和加密草案的实现。官网
    • PyJWT:JSON Web 令牌草案 01。官网
    • python-jws:JSON Web 签名草案 02 的实现。官网
    • python-jwt:一个用来生成和验证 JSON Web 令牌的模块。官网

模板引擎

模板生成和词法解析的库和工具。

  • Jinja2:一个现代的,对设计师友好的模板引擎。官网
  • Chameleon:一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。官网
  • Genshi:Python 模板工具,用以生成 web 感知的结果。官网
  • Mako:Python 平台的超高速轻量级模板。官网

Queue

处理事件以及任务队列的库。

  • celery:一个异步任务队列/作业队列,基于分布式消息传递。官网
  • huey:小型多线程任务队列。官网
  • mrq:Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。官网
  • rq:简单的 Python 作业队列。官网
  • simpleq:一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。官网

搜索

对数据进行索引和执行搜索查询的库和软件。

  • django-haystack:Django 模块化搜索。官网
  • elasticsearch-py:Elasticsearch 的官方底层 Python 客户端。官网
  • elasticsearch-dsl-py:Elasticsearch 的官方高级 Python 客户端。官网
  • solrpy:solr的 Python 客户端。官网
  • Whoosh:一个快速的纯 Python 搜索引擎库。官网

动态消息

用来创建用户活动的库。

  • django-activity-stream:从你的站点行为中生成通用活动信息流。官网
  • Stream-Framework:使用 Cassandra 和 Redis 创建动态消息和通知系统。官网

资源管理

管理、压缩、缩小网站资源的工具。

  • django-compressor:将链接和内联的 JavaScript 或 CSS 压缩到一个单独的缓存文件中。官网
  • django-storages:一个针对 Django 的自定义存储后端的工具集合。官网
  • fanstatic:打包、优化,并且把静态文件依赖作为 Python 的包来提供。官网
  • File Conveyor:一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。官网
  • Flask-Assets:帮你将 web 资源整合到你的 Flask app 中。官网
  • jinja-assets-compressor:一个 Jinja 扩展,用来编译和压缩你的资源。官网
  • webassets:为你的静态资源打包、优化和管理生成独一无二的缓存 URL。官网

缓存

缓存数据的库。

  • Beaker:一个缓存和会话库,可以用在 web 应用和独立 Python脚本和应用上。官网
  • django-cache-machine:Django 模型的自动缓存和失效。官网
  • django-cacheops:具有自动颗粒化事件驱动失效功能的 ORM。官网
  • django-viewlet:渲染模板,同时具有额外的缓存控制功能。官网
  • dogpile.cache:dogpile.cache 是 Beaker 的下一代替代品,由同一作者开发。官网
  • HermesCache:Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能。官网
  • johnny-cache:django应用缓存框架。官网
  • pylibmc:libmemcached 接口的 Python 封装。官网

电子邮件

用来发送和解析电子邮件的库。

  • django-celery-ses:带有 AWS SES 和 Celery 的 Django email 后端。官网
  • envelopes:供人类使用的电子邮件库。官网
  • flanker:一个 email 地址和 Mime 解析库。官网
  • imbox:Python IMAP 库官网
  • inbox.py:Python SMTP 服务器。官网
  • inbox:一个开源电子邮件工具箱。官网
  • lamson:Python 风格的 SMTP 应用服务器。官网
  • mailjet:Mailjet API 实现,用来提供批量发送邮件,统计等功能。官网
  • marrow.mailer:高性能可扩展邮件分发框架。官网
  • modoboa:一个邮件托管和管理平台,具有现代的、简约的 Web UI。官网
  • pyzmail:创建,发送和解析电子邮件。官网
  • Talon:Mailgun 库,用来抽取信息和签名。官网

国际化

用来进行国际化的库。

  • Babel:一个Python 的国际化库。官网
  • Korean:一个韩语词态库。官网

URL处理

解析URLs的库

  • furl:一个让处理 URL 更简单小型 Python 库。官网
  • purl:一个简单的,不可变的URL类,具有简洁的 API 来进行询问和处理。官网
  • pyshorteners:一个纯 Python URL 缩短库。官网
  • shorturl:生成短小 URL 和类似 bit.ly 短链的Python 实现。官网
  • webargs:一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado和 Pyramid。官网

HTML处理

处理 HTML和XML的库。

  • BeautifulSoup:以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。官网
  • bleach:一个基于白名单的 HTML 清理和文本链接库。官网
  • cssutils:一个 Python 的 CSS 库。官网
  • html5lib:一个兼容标准的 HTML 文档和片段解析及序列化库。官网
  • lxml:一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。官网
  • MarkupSafe:为Python 实现 XML/HTML/XHTML 标记安全字符串。官网
  • pyquery:一个解析 HTML 的库,类似 jQuery。官网
  • untangle:将XML文档转换为Python对象,使其可以方便的访问。官网
  • xhtml2pdf:HTML/CSS 转 PDF 工具。官网
  • xmltodict:像处理 JSON 一样处理 XML。官网

爬取网络站点的库

  • Scrapy:一个快速高级的屏幕爬取及网页采集框架。官网
  • cola:一个分布式爬虫框架。官网
  • Demiurge:基于PyQuery 的爬虫微型框架。官网
  • feedparser:通用 feed 解析器。官网
  • Grab:站点爬取框架。官网
  • MechanicalSoup:用于自动和网络站点交互的 Python 库。官网
  • portia:Scrapy 可视化爬取。官网
  • pyspider:一个强大的爬虫系统。官网
  • RoboBrowser:一个简单的,Python 风格的库,用来浏览网站,而不需要一个独立安装的浏览器。官网

网页内容提取

用于进行网页内容提取的库。

  • Haul:一个可以扩展的图像爬取工具。官网
  • html2text:将 HTML 转换为 Markdown 格式文本官网
  • lassie:人性化的网页内容检索库。官网
  • micawber:一个小型网页内容提取库,用来从 URLs 提取富内容。官网
  • newspaper:使用 Python 进行新闻提取,文章提取以及内容策展。官网
  • opengraph:一个用来解析开放内容协议(Open Graph Protocol)的 Python模块。官网
  • python-goose:HTML内容/文章提取器。官网
  • python-readability:arc90 公司 readability 工具的 Python 高速端口。官网
  • sanitize:为杂乱的数据世界带来调理性。官网
  • sumy:一个为文本文件和 HTML 页面进行自动摘要的模块。官网
  • textract:从任何格式的文档中提取文本,Word,PowerPoint,PDFs 等等。官网

表单

进行表单操作的库。

  • Deform:Python HTML 表单生成库,受到了 formish 表单生成库的启发。官网
  • django-bootstrap3:集成了 Bootstrap 3 的 Django。官网
  • django-crispy-forms:一个 Django 应用,他可以让你以一种非常优雅且 DRY(Don't repeat yourself) 的方式来创建美观的表单。官网
  • django-remote-forms:一个平台独立的 Django 表单序列化工具。官网
  • WTForms:一个灵活的表单验证和呈现库。官网
  • WTForms-JSON:一个 WTForms 扩展,用来处理 JSON 数据。官网

数据验证

数据验证库。多用于表单验证。

  • Cerberus:A mappings-validator with a variety of rules, normalization-features and simple customization that uses a pythonic schema-definition.官网
  • colander:一个用于对从 XML, JSON,HTML 表单获取的数据或其他同样简单的序列化数据进行验证和反序列化的系统。官网
  • kmatch:一种用于匹配/验证/筛选 Python 字典的语言。官网
  • schema:一个用于对 Python 数据结构进行验证的库。官网
  • Schematics:数据结构验证。官网
  • valideer:轻量级可扩展的数据验证和适配库。官网
  • voluptuous:一个 Python 数据验证库。主要是为了验证传入 Python的 JSON,YAML 等数据。官网

反垃圾技术

帮助你和电子垃圾进行战斗的库。

  • django-simple-captcha:一个简单、高度可定制的Django 应用,可以为任何Django表单添加验证码。官网
  • django-simple-spam-blocker:一个用于Django的简单的电子垃圾屏蔽工具。官网

标记

用来进行标记的库。

  • django-taggit:简单的 Django 标记工具。官网

管理面板

管理界面库。

  • Ajenti:一个你的服务器值得拥有的管理面板。官网
  • django-suit:Django 管理界面的一个替代品 (仅对于非商业用途是免费的)。官网
  • django-xadmin:Django admin 的一个替代品,具有很多不错的功能。官网
  • flask-admin:一个用于 Flask 的简单可扩展的管理界面框架。官网
  • flower:一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。官网
  • Grappelli:Django 管理界面的一个漂亮的皮肤。官网
  • Wooey:一个 Django 应用,可以为 Python 脚本创建 web 用户界面。官网

静态站点生成器

静态站点生成器是一个软件,它把文本和模板作为输入,然后输出HTML文件。

  • Pelican:使用 Markdown 或 ReST 来处理内容, Jinja 2 来制作主题。支持 DVCS, Disqus.。AGPL 许可。官网
  • Cactus:为设计师设计的静态站点生成器。官网
  • Hyde:基于 Jinja2 的静态站点生成器。官网
  • Nikola:一个静态网站和博客生成器。官网
  • Tinkerer:Tinkerer 是一个博客引擎/静态站点生成器,由Sphinx驱动。官网
  • Lektor:一个简单易用的静态 CMS 和博客引擎。官网

进程

操作系统进程启动及通信库。

  • envoy:比 Python subprocess 模块更人性化。官网
  • sarge:另一 种 subprocess 模块的封装。官网
  • sh:一个完备的 subprocess 替代库。官网

并发和并行

用以进行并发和并行操作的库。

  • multiprocessing:(Python 标准库) 基于进程的“线程”接口。官网
  • threading:(Python 标准库)更高层的线程接口。官网
  • eventlet:支持 WSGI 的异步框架。官网
  • gevent:一个基于协程的 Python 网络库,使用greenlet官网
  • Tomorrow:用于产生异步代码的神奇的装饰器语法实现。官网
  • uvloop:在libuv之上超快速实现asyncio事件循环。官网

网络

用于网络编程的库。

  • asyncio:(Python 标准库) 异步 I/O, 事件循环, 协程以及任务。官网
  • Twisted:一个事件驱动的网络引擎。官网
  • pulsar:事件驱动的并发框架。官网
  • diesel:基于Greenlet 的事件 I/O 框架。官网
  • pyzmq:一个 ZeroMQ 消息库的 Python 封装。官网
  • txZMQ:基于 Twisted 的 ZeroMQ 消息库的 Python 封装。官网

WebSocket

帮助使用WebSocket的库。

  • AutobahnPython:给 Python 、使用的 WebSocket & WAMP 基于 Twisted 和 asyncio官网
  • Crossbar:开源统一应用路由(Websocket & WAMP for Python on Autobahn).官网
  • django-socketio:给 Django 用的 WebSockets。官网
  • WebSocket-for-Python:为Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。官网

WSGI 服务器

兼容 WSGI 的 web 服务器

  • gunicorn:Pre-forked, 部分是由 C 语言编写的。官网
  • uwsgi:uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务, 由 C 语言编写。官网
  • bjoern:异步,非常快速,由 C 语言编写。官网
  • fapws3:异步 (仅对于网络端),由 C 语言编写。官网
  • meinheld:异步,部分是由 C 语言编写的。官网
  • netius:异步,非常快速。官网
  • paste:多线程,稳定,久经考验。官网
  • rocket:多线程。官网
  • waitress:多线程, 是它驱动着 Pyramid 框架。官网
  • Werkzeug:一个 WSGI 工具库,驱动着 Flask ,而且可以很方便大嵌入到你的项目中去。官网

RPC 服务器

兼容 RPC 的服务器。

  • SimpleJSONRPCServer:这个库是 JSON-RPC 规范的一个实现。官网
  • SimpleXMLRPCServer:(Python 标准库) 简单的 XML-RPC 服务器实现,单线程。官网
  • zeroRPC:zerorpc 是一个灵活的 RPC 实现,基于 ZeroMQ 和 MessagePack。官网

密码学

  • cryptography:这个软件包意在提供密码学基本内容和方法提供给 Python 开发者。官网
  • hashids:在 Python 中实现 hashids官网
  • Paramiko:SSHv2 协议的 Python (2.6+, 3.3+) ,提供客户端和服务端的功能。官网
  • Passlib:安全密码存储/哈希库,官网
  • PyCrypto:Python 密码学工具箱。官网
  • PyNacl:网络和密码学(NaCl) 库的 Python 绑定。官网

图形用户界面

用来创建图形用户界面程序的库。

  • curses:内建的 ncurses 封装,用来创建终端图形用户界面。官网
  • enaml:使用类似 QML 的Declaratic语法来创建美观的用户界面。官网
  • kivy:一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS平台上。官网
  • pyglet:一个Python 的跨平台窗口及多媒体库。官网
  • PyQt:跨平台用户界面框架 Qt 的 Python 绑定 ,支持Qt v4 和 Qt v5。官网
  • PySide:P跨平台用户界面框架 Qt 的 Python 绑定 ,支持Qt v4。官网
  • Tkinter:Tkinter 是 Python GUI 的一个事实标准库。官网
  • Toga:一个 Python 原生的, 操作系统原生的 GUI 工具包。官网
  • urwid:一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。官网
  • wxPython:wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。官网
  • PyGObject:GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定官网
  • Flexx:Flexx 是一个纯 Python 语言编写的用来创建 GUI 程序的工具集,它使用 web 技术进行界面的展示。官网

游戏开发

超赞的游戏开发库。

  • Cocos2d:cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。官网
  • Panda3D:由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用C++编写, 针对 Python 进行了完全的封装。官网
  • Pygame:Pygame 是一组 Python 模块,用来编写游戏。官网
  • PyOgre:Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。官网
  • PyOpenGL:OpenGL 的 Python 绑定及其相关 APIs。官网
  • PySDL2:SDL2 库的封装,基于 ctypes。官网
  • RenPy:一个视觉小说(visual novel)引擎。官网

日志

用来生成和操作日志的库。

  • logging:(Python 标准库) 为 Python 提供日志功能。官网
  • logbook:Logging 库的替代品。官网
  • Eliot:为复杂的和分布式系统创建日志。官网
  • Raven:Sentry的 Python 客户端。官网
  • Sentry:实时记录和收集日志的服务器。官网

Testing

进行代码库测试和生成测试数据的库。

  • 测试框架
    • unittest:(Python 标准库) 单元测试框架。官网
    • nose:nose 扩展了 unittest 的功能。官网
    • contexts:一个 Python 3.3+ 的 BDD 框架。受到C# – Machine.Specifications的启发。官网
    • hypothesis:Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。官网
    • mamba:Python 的终极测试工具, 拥护BDD。官网
    • PyAutoGUI:PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。官网
    • pyshould:Should 风格的断言,基于 PyHamcrest官网
    • pytest:一个成熟的全功能 Python 测试工具。官网
    • green:干净,多彩的测试工具。官网
    • pyvows:BDD 风格的测试工具,受Vows.js的启发。官网-
    • Robot Framework:一个通用的自动化测试框架。官网
  • Web 测试
    • Selenium:Selenium WebDriver 的 Python 绑定。官网
    • locust:使用 Python 编写的,可扩展的用户加载测试工具。官网
    • sixpack:一个和语言无关的 A/B 测试框架。官网
    • splinter:开源的 web 应用测试工具。官网
  • Mock测试
    • mock:(Python 标准库) 一个用于伪造测试的库。官网
    • doublex:Python 的一个功能强大的 doubles  测试框架。官网
    • freezegun:通过伪造日期模块来生成不同的时间。官网
    • httmock:针对 Python 2.6+ 和 3.2+ 生成 伪造请求的库。官网
    • httpretty:Python 的 HTTP 请求 mock 工具。官网
    • responses:伪造 Python 中的 requests 库的一个通用库。官网
    • VCR.py:在你的测试中记录和重放 HTTP 交互。官网
  • 对象工厂
    • factoryboy:一个 Python 用的测试固件 (test fixtures) 替代库。官网
    • mixer:另外一个测试固件 (test fixtures) 替代库,支持 Django, Flask, SQLAlchemy, Peewee 等。官网
    • modelmommy:为 Django 测试创建随机固件官网
  • 代码覆盖率
    • coverage:代码覆盖率测量。官网
  • 伪数据
    • faker:一个 Python 库,用来生成伪数据。官网
    • fake2db:伪数据库生成器。官网
    • radar:生成随机的日期/时间。官网
  • 错误处理
    • FuckIt.py:FuckIt.py 使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。官网

代码分析和Lint工具

进行代码分析,解析和操作代码库的库和工具。

  • 代码分析
    • coala:语言独立和易于扩展的代码分析应用程序。官网
    • code2flow:把你的 Python 和 JavaScript 代码转换为流程图。官网
    • pycallgraph:这个库可以把你的Python 应用的流程(调用图)进行可视化。官网
    • pysonar2:Python 类型推断和检索工具。官网
  • Lint工具
    • Flake8:模块化源码检查工具: pep8, pyflakes 以及 co。官网
    • Pylint:一个完全可定制的源码分析器。官网
    • pylama:Python 和 JavaScript 的代码审查工具。官网
  • 代码格式化
    • autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。官网

Debugging Tools

用来进行代码调试的库。

  • 调试器
    • ipdb:IPython 启用的 pdb官网
    • pudb:全屏,基于控制台的 Python 调试器。官网
    • pyringe:可以在 Python 进程中附加和注入代码的调试器。官网
    • wdb:一个奇异的 web 调试器,通过 WebSockets 工作。官网
    • winpdb:一个具有图形用户界面的 Python 调试器,可以进行远程调试,基于 rpdb2。官网
    • django-debug-toolbar:为 Django 显示各种调试信息。官网
    • django-devserver:一个 Django 运行服务器的替代品。官网
    • flask-debugtoolbar:django-debug-toolbar 的 flask 版。官网
  • 性能分析器
  • 其他
    • pyelftools:解析和分析 ELF 文件以及 DWARF 调试信息。官网
    • python-statsd:statsd 服务器的 Python 客户端。官网

Science and Data Analysis

用来进行科学计算和数据分析的库。

  • astropy:一个天文学 Python 库。官网
  • bcbio-nextgen:这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。官网
  • bccb:生物分析相关代码集合官网
  • Biopython:Biopython 是一组可以免费使用的用来进行生物计算的工具。官网
  • blaze:NumPy 和 Pandas 的大数据接口。官网
  • cclib:一个用来解析和解释计算化学软件包输出结果的库。官网
  • NetworkX:一个为复杂网络设计的高性能软件。官网
  • Neupy:执行和测试各种不同的人工神经网络算法。官网
  • Numba:Python JIT (just in time) 编译器,针对科学用的 Python ,由Cython 和 NumPy 的开发者开发。官网
  • NumPy:使用 Python 进行科学计算的基础包。官网
  • Open Babel:一个化学工具箱,用来描述多种化学数据。官网
  • Open Mining:使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。官网
  • orange:通过可视化编程或 Python 脚本进行数据挖掘,数据可视化,分析和机器学习。官网
  • Pandas:提供高性能,易用的数据结构和数据分析工具。官网
  • PyDy:PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。官网
  • PyMC:马尔科夫链蒙特卡洛采样工具。官网
  • RDKit:化学信息学和机器学习软件。官网
  • SciPy:由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。官网
  • statsmodels:统计建模和计量经济学。官网
  • SymPy:一个用于符号数学的 Python 库。官网
  • zipline:一个 Python 算法交易库。官网
  • Bayesian-belief-networks:优雅的贝叶斯信念网络框架。官网
  • keras: 以tensorflow或者theano为后端的深度学习封装库,快速上手神经网络官网

数据可视化

进行数据可视化的库。 参见: awesome-javascript

  • matplotlib:一个 Python 2D 绘图库。官网
  • bokeh:用 Python 进行交互式 web 绘图。官网
  • ggplot:ggplot2 给 R 提供的 API 的 Python 版本。官网
  • plotly:协同 Python 和 matplotlib 工作的 web 绘图库。官网
  • pygal:一个 Python SVG 图表创建工具。官网
  • pygraphviz:Graphviz 的 Python 接口。官网
  • PyQtGraph:交互式实时2D/3D/图像绘制及科学/工程学组件。官网
  • SnakeViz:一个基于浏览器的 Python's cProfile 模块输出结果查看工具。官网
  • vincent:把 Python 转换为 Vega 语法的转换工具。官网
  • VisPy:基于 OpenGL 的高性能科学可视化工具。官网

计算机视觉

计算机视觉库。

机器学习

机器学习库。 参见: awesome-machine-learning.

  • Crab:灵活、快速的推荐引擎。官网
  • gensim:人性化的话题建模库。官网
  • hebel:GPU 加速的深度学习库。官网
  • NuPIC:智能计算 Numenta 平台。官网
  • pattern:Python 网络挖掘模块。官网
  • PyBrain:另一个 Python 机器学习库。官网
  • Pylearn2:一个基于 Theano 的机器学习库。官网
  • python-recsys:一个用来实现推荐系统的 Python 库。官网
  • scikit-learn:基于 SciPy 构建的机器学习 Python 模块。官网
  • pydeep:Python 深度学习库。官网
  • vowpalporpoise:轻量级 Vowpal Wabbit 的 Python 封装。官网
  • skflow:一个 TensorFlow 的简化接口(模仿 scikit-learn)。官网

MapReduce

MapReduce 框架和库。

  • dpark:Spark 的 Python 克隆版,一个类似 MapReduce 的框架。官网
  • dumbo:这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。官网
  • luigi:这个模块帮你构建批处理作业的复杂流水线。官网
  • mrjob:在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。官网
  • PySpark:Spark 的 Python API 。官网
  • streamparse:运行针对事实数据流的 Python 代码。集成了Apache Storm官网

函数式编程

使用 Python 进行函数式编程。

  • CyToolz:Toolz 的 Cython 实现 : 高性能函数式工具。官网
  • fn.py:在 Python 中进行函数式编程 : 实现了一些享受函数式编程缺失的功能。官网
  • funcy:炫酷又实用的函数式工具。官网
  • Toolz:一组用于迭代器,函数和字典的函数式编程工具。官网

第三方 API

用来访问第三方 API的库。 参见: List of Python API Wrappers and Libraries

  • apache-libcloud:一个为各种云设计的 Python 库。官网
  • boto:Amazon Web Services 的 Python 接口。官网
  • django-wordpress:WordPress models and views for Django.官网
  • facebook-sdk:Facebook 平台的 Python SDK.官网
  • facepy:Facepy 让和 Facebook's Graph API 的交互变得更容易。官网
  • gmail:Gmail 的 Python 接口。官网
  • google-api-python-client:Python 用的 Google APIs 客户端库。官网
  • gspread:Google 电子表格的 Python API.官网
  • twython:Twitter API 的封装。官网

DevOps 工具

用于 DevOps 的软件和库。

  • Ansible:一个非常简单的 IT 自动化平台。官网
  • SaltStack:基础设施自动化和管理系统。官网
  • OpenStack:用于构建私有和公有云的开源软件。官网
  • Docker Compose:快速,分离的开发环境,使用 Docker。官网
  • Fabric:一个简单的,Python 风格的工具,用来进行远程执行和部署。官网
  • cuisine:为 Fabric 提供一系列高级函数。官网
  • Fabtools:一个用来编写超赞的 Fabric 文件的工具。官网
  • gitapi:Git 的纯 Python API。官网
  • hgapi:Mercurial 的纯 Python API。官网
  • honcho:Foreman的 Python 克隆版,用来管理基于Procfile的应用。官网
  • pexpect:Controlling interactive programs in a pseudo-terminal like 在一个伪终端中控制交互程序,就像 GNU expect 一样。官网
  • psutil:一个跨平台进程和系统工具模块。官网
  • supervisor:UNIX 的进程控制系统。官网

任务调度

任务调度库。

  • APScheduler:轻巧但强大的进程内任务调度,使你可以调度函数。官网
  • django-schedule:一个 Django 排程应用。官网
  • doit:一个任务执行和构建工具。官网
  • gunnery:分布式系统使用的多用途任务执行工具 ,具有 web 交互界面。官网
  • Joblib:一组为 Python 提供轻量级作业流水线的工具。官网
  • Plan:如有神助地编写 crontab 文件。官网
  • schedule:人性化的 Python 任务调度库。官网
  • Spiff:使用纯 Python 实现的强大的工作流引擎。官网
  • TaskFlow:一个可以让你方便执行任务的 Python 库,一致并且可靠。官网

外来函数接口

使用外来函数接口的库。

  • cffi:用来调用 C 代码的外来函数接口。官网
  • ctypes:(Python 标准库) 用来调用 C 代码的外来函数接口。官网
  • PyCUDA:Nvidia CUDA API 的封装。官网
  • SWIG:简化的封装和接口生成器。官网

高性能

让 Python 更快的库。

  • Cython:优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。官网
  • PeachPy:嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows, Linux, OS X, Native Client 或者 Go 。官网
  • PyPy:使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。官网
  • Pyston:使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。官网
  • Stackless Python:一个强化版的 Python。官网

微软的 Windows平台

在 Windows 平台上进行 Python 编程。

  • Python(x,y):面向科学应用的 Python 发行版,基于 Qt 和 Spyder。官网
  • pythonlibs:非官方的 Windows 平台 Python 扩展二进制包。官网
  • PythonNet:Python 与 .NET 公共语言运行库 (CLR)的集成。官网
  • PyWin32:针对 Windows 的Python 扩展。官网
  • WinPython:Windows 7/8 系统下便携式开发环境。官网

网络可视化和SDN

用来进行网络可视化和SDN(软件定义网络)的工具和库。

  • Mininet:一款流行的网络模拟器以及用 Python 编写的 API。官网
  • POX:一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。官网
  • Pyretic:火热的 SDN 编程语言中的一员,为网络交换机和模拟器提供强大的抽象能力。官网
  • SDX Platform:基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。官网

硬件

用来对硬件进行编程的库。

  • ino:操作Arduino的命令行工具。官网
  • Pyro:Python 机器人编程库。官网
  • PyUserInput:跨平台的,控制鼠标和键盘的模块。官网
  • scapy:一个非常棒的操作数据包的库。官网
  • wifi:一个 Python 库和命令行工具用来在 Linux 平台上操作WiFi。官网
  • Pingo:Pingo 为类似Raspberry Pi,pcDuino, Intel Galileo等设备提供统一的API用以编程。官网

兼容性

帮助从 Python 2 向 Python 3迁移的库。

  • Python-Future:这就是 Python 2 和 Python 3 之间丢失的那个兼容性层。官网
  • Python-Modernize:使 Python 代码更加现代化以便最终迁移到 Python 3。官网
  • Six:Python 2 和 3 的兼容性工具。官网

杂项

不属于上面任何一个类别,但是非常有用的库。

  • blinker:一个快速的 Python 进程内信号/事件分发系统。官网
  • itsdangerous:一系列辅助工具用来将可信的数据传入不可信的环境。官网
  • pluginbase:一个简单但是非常灵活的 Python 插件系统。官网
  • Pychievements:一个用来创建和追踪成就的 Python 框架。官网
  • Tryton:一个通用商务框架。官网

算法和设计模式

Python 实现的算法和设计模式。

  • algorithms:一个 Python 算法模块。官网
  • python-patterns:Python 设计模式的集合。官网
  • sortedcontainers:快速,纯 Python 实现的SortedList,SortedDict 和 SortedSet 类型。官网

编辑器插件

编辑器和 IDE 的插件

  • Emacs
    • Elpy:Emacs Python 开发环境。官网
  • Sublime Text
    • SublimeJEDI:一个 Sublime Text 插件,用来使用超赞的自动补全库 Jedi。官网
    • Anaconda:Anaconda 把你的 Sublime Text 3 变成一个功能齐全的 Python IDE。官网
  • Vim
    • YouCompleteMe:引入基于 Jedi 的 Python 自动补全引擎。官网
    • Jedi-vim:绑定 Vim 和 Jedi 自动补全库对 Python 进行自动补全。官网
    • Python-mode:将 Vim 变成 Python IDE 的一款多合一插件。官网
  • Visual Studio
    • PTVS:Visual Studio 的 Python 工具官网

集成开发环境

流行的 Python 集成开发环境。

  • PyCharm:商业化的 Python IDE ,由 JetBrains 开发。也有免费的社区版提供。官网
  • LiClipse:基于 Eclipse 的免费多语言 IDE 。使用 PyDev 来支持 Python 。官网
  • Spyder:开源 Python IDE。官网

自动聊天工具

用于开发聊天机器人的库

  •   Errbot:最简单和最流行的聊天机器人用来实现自动聊天工具。官网

服务

在线工具和简化开发的 API 。

持续集成

参见: awesome-CIandCD.

  • Travis CI:一个流行的工具,为你的开源和私人项目提供持续集成服务。(仅支持 GitHub)官网
  • CircleCI:一个持续集成工具,可以非常快速的进行并行测试。 (仅支持 GitHub)官网
  • Vexor CI:一个为私人 app 提供持续集成的工具,支持按分钟付费。官网
  • Wercker:基于 Docker 平台,用来构建和部署微服务。官网

代码质量

  • Codacy:自动化代码审查,更加快速的发布高质量代码。对于开源项目是免费的。官网
  • QuantifiedCode:一个数据驱动、自动、持续的代码审查工具。官网

资源

在这里可以找到新的 Python 库。

网站

周刊

Twitter

学习指南

知名网站

值得关注的 Python 技术站点。

中文站点

  • 伯乐在线 Python 频道:分享 Python 开发技术、相关的行业动态。官网

英文站点

1. 获取数据

假设你是一家连锁店的老板,希望在另一个城市开分店,现在有一组城市的人口与利润的关系图, 通过这些数据预测不同人口的城市的利润 数据可以通过这个连接下载

# 导入模块
import numpy as np
import pandas as pd
import matlib.pyplot as plt

# 读取数据
data = pd.read_csv('ex1data1.txt', names=['Population','Profit'], header=None) #设置列名
# 画出数据的散点图查看
data.plot(kind='scatter', x='Population', y='Profit', figsize=(12,8))
plt.show()

如图:
example1

2.梯度下降

梯度下降: 假设 y = f(x), 求y最小值时候的x. 则 梯度 Δ = f'(x) 设定好一定的步长 λ x <-- x - λ*Δ 代理初始的x后每次迭代x都往梯度下降的方向挪动一定的步长(其中Δ控制方向)。 迭代多次后,当两次x带入后获取的y数值相差极小时,此时的x为最优解

3.实现简单的线性回归

只有一个因素影响数据, 假设直线 Y = theta0 + theta1X1
转换为向量的思想,则:Y = theta
(1, X) formula

误差计算方法: formula

即: formula

def computeCast(X, Y, theta):
"""
计算误差的方法
X: 输入的数据,格式:[[1,2],[1,3],[1,4]...]
Y: 实际结果, 格式:[[1],[2],[3]...]
theta: 参数, 向量,格式:[0,0]
"""
error = np.sqrt(np.power(((X*theta.T) - Y), 2))
return np.sum(error)/(len(X)*2) #TODO 为什么要多除一个2?

# 例
theta = np.matrix(np.array([0,0]))
cost = computeCast(X, Y, theta)
print cost # 32.0727338775

使用梯度下降的方法调节参数theta,获取最小数据差异的结果
具体为:

根据复合函数求导,对误差e求theta偏导,获取梯度Δ: formula 根据梯度下降的公式:x <-- x - λ*Δ,每次迭代,重复梯度下降的过程. 代码流程为:

  1. 设定初始的theta值,迭代次数iters,步长alpha
  2. 根据 梯度下降的公式不断修改 theta
  3. 根据迭代次数重复上一个步骤
def gradientDescent(X, Y, theta, alpha, inters):
"""
梯度下降方法
alpha: 步长
inters: 迭代次数
"""
temp = np.zeros(theta.shape) # 用于缓存theta
arguments = int(theta.ravel().shape[0]) # theta的元素数量
cost = np.zeros(len(X)) # 用于保存每次迭代后theta所对应的误差
for i in xrange(iters):
error = X*theta.T - Y
for j in xrange(arguments): # 修改参数的每一个元素
term = np.multiply(error, X[:,j])
temp[:,j] = theta[:,j] - (alpha/len(x)) * np.sum(term)
theta = temp
cost[i] = computeCast(X, Y, theta)
return theta, cost

4. 观察结果

设定一些参数,运行

theta = np.matrix(np.array([0,0]))
alpha = 0.01
inters = 1000
g, cost = gradientDescent(X, Y,theta, alpha, iters)
print g # [[-3.24140214 1.1272942 ]]
print cost[-1] # 4.51595550308

根据得到的theta画出预测的直线

x_array = np.linspace(data.Populcation.min(), data.Populocation.max(), 1000)
y_array = theta[:,0] + theta[:,1] * x_array
fig, ax = plt.subplots(figsize=(12,8))

ax.plot(x_array, y_array, 'r', label='Prediction') # 画出预测曲线,红色
ax.scatter(data.Populcation, data.Profit, label='traning data') # 画出训练数据
ax.legend(loc=2) # 提示,标注
ax.set_xlabel('Populocation') # 横坐标
ax.set_ylabel('Profit') # 纵坐标
ax.set_title('Predicted Profit vs. Population Size')
plt.show()

如图:
example2

5.查看迭代次数与误差的关系

# 尝试画出 iters - cost 的曲线
fig , ax = plt.subplots(figsize=(12,8))
ax.plot(np.arange(iters), cost, 'r')
ax.set_xlabel('iters')
ax.set_ylabel('cost')
ax.set_title('iters vs cost')
plt.show()

如图:
example3

  • FROM

指定容器基于哪个基础镜像创建

  • MAINTAINER

设置镜像的作者

  • RUN

在容器中运行的命令

  • ADD

复制文件指令, destination是容器内的路径。source可以是URL或者是启动配置上下文中的一个文件

  • CMD

提供了容器默认的执行命令。 Dockerfile只允许使用一次CMD指令。 使用多个CMD会抵消之前所有的指令,只有最后一个指令生效,CMD有三种形式:

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

  • EXPOSE

指定容器运行在监听的端口

  • ENTRYPOINT

配置给容器一个可执行的命令,这意味着在每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。同时也意味着该镜像每次被调用时仅能运行指定的应用。类似于CMD,Docker只允许一个ENTRYPOINT,多个ENTRYPOINT会抵消之前所有的指令,只执行最后的ENTRYPOINT指令。语法如下:

ENTRYPOINT ["executable", "param1","param2"]
ENTRYPOINT command param1 param2

  • WORKDIR

指定RUN、CMD与ENTRYPOINT命令的工作目录。语法如下:

WORKDIR /path/to/workdir
  • ENV

设置环境变量。它们使用键值对,增加运行程序的灵活性。语法如下:

ENV <key> <value>
  • USER 镜像正在运行时设置一个UID。语法如下:
USER <uid>
  • VOLUME

授权访问从容器内到主机上的目录。语法如下:

VOLUME ["/data"]

例子:

FROM localhost:5000/ubuntu:14.4
MAINTAINER wudizhangzhi
ADD localfile.txt /home/targetfile.txt
WORKDIR /home/
RUN pip install -r targetfile.txt
EXPOSE 7777
docker build -t wudizhangzhi/ubuntu:latest .

0%