MarkHoo 发布的文章

本站目前的开发环境是 Python3.5.2+Django1.10.6+Sqlite3+Centos7.5+Nginx1.12.2+Gunicorn

blog虽然已经上线测试有一段时间了(2018.8.7上线),但是项目部署的笔记由于内容较多,没时间整理。今天抽空整理了一下午,发布出来供需要的同学借鉴参考。文中如有错误请多多指正

部署前的准备

服务器

要部署项目就要先购买服务器,如腾讯云,阿里云等等

注意:服务器在国内的话,必须要备案!不然无法使用。

阿里云优惠券:点击前往领取
腾讯云代金券:点击前往领取
腾讯云首页:点击直达
腾讯云西南区云产品促销链接:点击直达
腾讯云服务器购买链接:点击直达

域名

域名购买选择,可以到百度云,腾讯云,阿里云,GoDaddy,namecheap等等

购买域名后就是解析域名,打开域名解析面板,添加解析记录
记录类型:A
主机记录:test.markhoo.com,这个markhoo.com是你的一级域名,二级域名你可以设置为www.markhoo.com
解析线路:可以默认也可以选别的
记录值:填写你的服务器IP地址
TTL:域名生效时间,也就是多久生效
设置好以上内容,点击确定。解析完成

主机记录中这个markhoo.com是你的一级域名,二级域名你也可以设置为 www.markhoo.com 或者别的 xxx.markhoo.com 也可以。
注意:域名是否在国内购买不重要,只要服务器不在大陆购买,即使未备案照样可以使用。要是要解析的服务器是大陆服务商则必须要备案。备案后一个域名可以同时接入多个服务商。

域名解析记录类型说明:

  • A:将域名指向一个IPv4地址
  • AAAA:将域名指向一个IPv6地址
  • CNAME:将域名指向另外一个域名
  • NS:将子域名指定其他DNS服务器解析
  • MX:将域名指向邮件服务器地址
  • SRV:记录提供特定的服务的服务器
  • TXT:文本长度限制512,通常做SPF记录(反垃圾邮件)
  • CAA:CA证书颁发机构授权校验
  • 显性URL:将域名302重定向到另外一个地址
  • 隐性URL:与显性URL类似,但是会隐藏真实目标地址

xshell下载与安装

主要用于远程登录服务器进行相关操作。在官网注册后发送下载链接到你的注册邮箱,或者到搜索引擎搜索下载。
个人版免费,企业版收费。
下载后一路点击下一步,完成。

登录服务器步骤:
点击左上角'文件'--'新建'
然后弹出对话框
常规:名称,这个你可以随便取什么名字
协议:SSH,一般默认
主机:空,填上你的服务器IP地址
端口号:22,默认的就行
填好以上选项内容,点击左侧的'用户身份验证',然后看右侧,方法选择'Password',在下面输入你的服务器登录用户名和密码,最后点击下面的'连接'。
登录成功!进入界面。

百度网盘官网软件下载链接:
链接: https://pan.baidu.com/s/19K5q1JkmD9qnYaGRTALyLg 密码: r6hx

安装Nginx

首先用xshell登录服务器
通过 yum 安装 Nginx

yum install nginx

启动 Nginx 服务

systemctl start nginx

或者

systemctl start nginx.service
systemctl enable nginx.service

访问服务器IP地址,可以看到 nginx 的欢迎界面

Nginx相关命令:
停止nginx

nginx -s stop

重启nginx

nginx -s reload

Centos7.5安装Python3

由于centos7.5原本默认安装了Python2,而且这个Python2不能被删除,因为有很多系统命令,比如yum都要用到。
以下操作首先要用xshell登录到服务器
输入Python命令,查看可以得知是Python2.7.5版本

输入

which python

可以查看位置,一般是位于/usr/bin/python目录下。

下面介绍安装Python3的方法

首先安装依赖包

yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

然后根据自己需求下载不同版本的Python3,我下载的是Python3.5.2

注:如果速度不够快,可以直接去官网下载,利用WinSCP等软件传到服务器上指定位置。

我的存放目录是/usr/local/python3,使用命令:

mkdir /usr/local/python3

建立好一个空文件夹,进入该目录

cd /usr/local/python3

使用一下命令下载压缩包

wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

然后解压压缩包安装Python3

tar -xvJf Python-3.5.2.tar.xz
cd Python-3.5.2
./configure --prefix=/usr/local/python3
make && make install

最后创建软链接

ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

在命令行中输入python3测试

升级pip3命令:

pip3 install --upgrade pip

部署前的项目配置

Django 项目中会有一些 CSS、JavaScript 等静态文件,为了能够方便地让 Nginx 处理这些静态文件的请求,我们把项目中的全部静态文件收集到一个统一的目录下,这个目录通常位于 Django 项目的根目录,并且命名为 static。为了完成这些任务,需要在项目的配置文件里做一些必要的配置:

myblog/settings.py

# 其他配置...

STATIC_URL = '/static/'
# 加入下面的配置
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATIC_ROOT 指明了静态文件的收集目录,即项目根目录(BASE_DIR)下的 static 文件夹。

为了安全起见,在生产环境下需要关闭 DEBUG 选项以及设置允许访问的域名。打开 settings.py 文件,找到 DEBUG 和 ALLOWED_HOSTS 这两个选项,将它们设置成如下的值:

myblog/settings.py

DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost ', '.markhoo.com']

ALLOWED_HOSTS 是允许访问的域名列表,127.0.0.1 和 localhost 是本地访问的域名,.markhoo.com 是访问服务器的域名(换成你自己的域名)。域名前加一个点表示允许访问该域名下的子域名,比如 www.markhoo.com test.markhoo.com 等二级域名同样允许访问。如果不加前面的点则只允许访问 markhoo.com。

项目还会依赖一些第三方 Python 库,为了方便在服务器上一次性安装,我们将全部依赖写入一个叫 requirements.txt 的文本文件中。激活本地的虚拟环境(如果你使用了虚拟环境的话),并进入项目的根目录,运行 pip freeze > requirements.txt 命令:

(myblog_env) D:Djangoprojectsmyblog>
pip freeze > requirements.txt

这时项目根目录下会生成了一个 requirements.txt 的文本文件,其内容记录了项目的全部依赖。由于有一些依赖包也有先后依赖关系,该调整的需要进去txt文件调整一下。

如果上传到服务器后修改,可以使用 'vi (文件名称)' 打开文件,然后点击键盘 'i' 键切换到输入模式。
修改完需要退出,先按键盘 'Esc' 键,然后输入 ':wq' 保存退出。如果不想修改又无法退出可以用 ':q!' 强制退出,这样不会保存你修改的内容
更多的vi、vim命令使用方法可以自行到搜索引擎搜索学习,这里就不一一讲解了。

将代码上传到 GitHub 、 Gitee 、 或者Coding

将代码上传到 GitHub 等代码托管平台,这样我们就可以方便地把代码拉取到服务器了。
如果访问慢或者打不开GitHub的话,可以上传到国内的Gitee或者Coding

Git的安装和上传代码的简单方法

安装Git可以到官网 https://git-scm.com 下载,安装的话可以一直下一步,完成。

首先你需要一个GitHub 、 Gitee 、 或者Coding账号,所以还没有的话先去注册吧!

https://github.com
https://gitee.com
https://coding.net

1.进入Github首页,点击New repository新建一个项目

2.填写相应信息后点击create即可

Repository name: 仓库名称

Description(可选): 仓库描述介绍

Public, Private : 仓库权限(公开共享,私有或指定合作者)

Initialize this repository with a README: 添加一个README.md

gitignore: 不需要进行版本管理的仓库类型,对应生成文件.gitignore

license: 证书类型,对应生成文件LICENSE

一般可以填写项目仓库名称,点击create就可以了。因为免费用户只有 Gitee 才可以创建私有仓库

3.创建好项目仓库后,在项目仓库页面点击Clone or dowload会出现一个地址,copy这个地址备用。

4.接下来就到本地操作了,首先右键你的项目,如果你之前安装git成功的话,右键会出现两个新选项,分别为Git Gui Here,Git Bash Here,这里我们选择Git Bash Here进入界面,我的本地项目名为myblog。

5.接下来输入如下代码(关键步骤),把github上面的仓库克隆到本地

git clone (粘贴上你之前复制的地址)

6.操作步骤5以后你的本地项目文件夹下面就会多出个文件夹,该文件夹名即为你github上面的项目名,如我多出了个myblogsite文件夹,我们把本地项目文件夹下的所有文件(除了新多出的那个文件夹不用),其余都复制到那个新多出的文件夹下。

7.接着继续输入命令 cd myblogsite,进入myblogsite文件夹

8.接下来依次输入以下代码即可完成其他剩余操作:

git add . (注:别忘记后面的.,此操作是把myblogsite文件夹下面的文件都添加进来)
git commit -m "提交信息" (注:“提交信息”里面换成你需要,如“first commit”)
git push -u origin master (注:此操作目的是把本地仓库push到github上面,此步骤需要你输入GitHub帐号和密码)

注意:数据库文件不要上传!要是SQLLITE3里面有你测试的重要数据,将可能会泄露。

设置服务器目录结构

接下来需要把代码上传到服务器了。我服务器上存放代码的目录结构一般是这样的:

/home/markhoo/
    sites/
        markhoo.com/
            myblog_env/
            myblog/

一台服务器可能部署多个网站,所有网站代码都放在 sites/ 目录下。markhoo.com/ 这个文件夹以网站的域名命名,便于区分。myblog_env 是 python 虚拟环境目录。myblog 是 Django 博客项目目录。
创建这个目录结构,注意目录名替换为你自己的域名,以后涉及到 markhoo.com 的地方通常都要替换你自己的域名,后面就不再一一指出了。
备注:上面的我的目录结构.可能会有新手看不懂,解释一下,就像下面这样一直创建下去

/home/markhoo/sites/markhoo.com/

最后的 myblog_env 和 myblog 是同级目录位于markhoo.com下,这里自己先不要创建。

创建目录的命令为: mkdir (文件夹名称)
删除目录的命令为: rmdir (文件夹名称)

安装virtualenv

为了不影响外界环境的清洁,所以我们使用虚拟环境来配置 Django 项目
首先用xshell登录到你的服务器,然后按一下步骤操作

pip3 install virtualenv

接下来创建虚拟环境,先进入到 markhoo.com 目录下,然后运行 virtualenv 命令创建虚拟环境:

[root@instance-pkb22o0h]# cd /home/markhoo/sites/markhoo.com
[root@instance-pkb22o0h markhoo.com]# virtualenv -p /usr/bin/python3 –-no-site-packages myblog_env

命令说明:
-p: 指定你要虚拟的Python版本,这里选择了本地的python3
–-no-site-packages:表示在建立虚拟环境时不将原版本中的第三方库拷贝过来,这样就能获得一个纯净的Python环境。
myblog_env:表明在该目录下,建立一个叫做myblog_env的虚拟环境,这样的命名方式,让你一眼就能看出这个虚拟环境是为谁建立的。

virtualenv的命令使用方法:
创建虚拟环境: $ virtualenv -p /usr/bin/python3.5 –-no-site-packages myblog_env
启动虚拟环境: $ source myblog_env/bin/activate 
退出虚拟环境: $ deactivate 
删除虚拟环境: $ rm –r myblog_env

检查一下虚拟环境是否创建成功,运行 ls 命令列出当前目录下的文件和文件夹,看到 myblog_env 这个文件夹说明虚拟环境创建成功。

[root@instance-pkb22o0h markhoo.com]# ls
myblog_env

venv的使用

由于我只是测试项目,所以使用了Python自带的venv。
先进入到 markhoo.com 目录下,然后运行 python3 -m venv myblog_env 创建虚拟环境:

[root@instance-pkb22o0h]# cd /home/markhoo/sites/markhoo.com
[root@instance-pkb22o0h markhoo.com]# python3 -m venv myblog_env

检查一下虚拟环境是否创建成功,运行 ls 命令列出当前目录下的文件和文件夹,看到 myblog_env 这个文件夹说明虚拟环境创建成功。

[root@instance-pkb22o0h markhoo.com]# ls
myblog_env

在虚拟环境中安装 django 以及依赖包并初始化项目

接着再从代码仓库把项目代码拉取过来,把 git clone 后的地址换成你自己的 GitHub 仓库地址!

[root@instance-pkb22o0h markhoo.com]# git clone https://github.com/MarkHoo/myblog.git

运行 ls 命令检查一下是否拉取成功:

[root@instance-pkb22o0h markhoo.com]# ls
myblog myblog_env

多了 myblog 文件夹(文件夹名称由你的 GitHub 仓库名决定),说明拉取成功了。

接下来执行命令,启动虚拟环境

[root@instance-pkb22o0h markhoo.com]# source myblog_env/bin/activate
(myblog_env) [root@instance-pkb22o0h markhoo.com]#

安装项目环境依赖

(myblog_env) [root@instance-pkb22o0h markhoo.com]# cd myblog
(myblog_env) [root@instance-pkb22o0h myblog]# pip3 install -r requirements.txt

收集静态文件
运行 python manage.py collectstatic 命令收集静态文件到 static 目录下

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py collectstatic

生成数据库

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py migrate

创建超级用户

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py createsuperuser

然后就会出现以下内容,第一个是用户名,第二个是邮箱,第三和第四是密码(输入时没有任何显示,实际上已经输入了)。最后显示创建成功!

Username (leave blank to use 'root'): admin
Email address: admin@markhoo.com
Password:
Password (again):
Superuser created successfully.

备注:这里使用的是Django默认生成的sqlite3数据库,我使用了这个,简单写写博客够用了。

启动 Django

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py runserver 0.0.0.0:8000

如果没有报错,就说明 Django 已经安装成功了,打开浏览器输入你的服务器IP:8000,就可以看到你的网站了

退出 Django

按 ctrl+c 退出 Django 服务

安装 Mysql (使用MySQL数据库同学可以借鉴)

安装并启动 mariadb

因为 CentOS 7 之后的版本都不在提供 Mysql 安装源,这里我们使用 mariadb 代替 mysql,依次执行下列命令

yum install mariadb mariadb-server -y
yum install MySQL-python -y
systemctl start mariadb

对 mariadb 进行初始化设置

  • 执行下面命令,根据提示操作
  • 设置新密码为 test
  • 默认密码为空,直接回车即可

mysql_secure_installation

使用设置的密码登陆 mariadb

  • 登陆 db,这里假设密码被设置为 admin123

mysql -uroot -ptest

创建一个数据库

create database myblog;

成功后,输入 exit 命令退出 db

exit

修改配置文件,与 Mysql 数据库相关联
编辑 myblog/settings.py

# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myblog',
        'PASSWORD':'admin123',
        'USER': 'root',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    }
}

创建 Django 数据库

(myblog_env) [root@instance-pkb22o0h myblog]# cd /home/markhoo/sites/markhoo.com/myblog
(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py migrate

创建超级用户

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py createsuperuser

然后就会出现以下内容,第一个是用户名,第二个是邮箱,第三和第四是密码(输入时没有任何显示,实际上已经输入了)。最后显示创建成功!

Username (leave blank to use 'root'): admin
Email address: admin@markhoo.com
Password:
Password (again):
Superuser created successfully.

启动 Django

(myblog_env) [root@instance-pkb22o0h myblog]# python manage.py runserver 0.0.0.0:8000

如果没有报错,就说明 Django 已经安装成功了,并且跟 Mysql 的连接正常。打开浏览器输入你的服务器IP:8000,就可以看到你的网站了

退出 Django

按 ctrl+c 退出 Django 服务

使用 Gunicorn

Gunicorn 一般用来管理多个进程,有进程挂了Gunicorn 可以把它拉起来,防止服务器长时间停止服务,还可以动态调整 worker 的数量,请求多的时候增加 worker 的数量,请求少的时候减少。

在虚拟环境下,安装 Gunicorn:

(myblog_env) [root@instance-pkb22o0h myblog]# pip3 install gunicorn

测试Gunicorn是否能启动你的项目服务

(myblog_env) [root@instance-pkb22o0h myblog]# gunicorn --bind 0.0.0.0:8000 myblog.wsgi:application

注意:myblog.wsgi:application这里的myblog对应的是 /home/markhoo/sites/markhoo.com/myblog/myblog, 根据自己的修改。浏览器输入域名,可以看到访问成功了!

访问ip地址看浏览器是否能正常查看内容(此时没有退出虚拟环境)
完成测试后,按CTRL-C 停止 Gunicorn 运行

退出虚拟环境

deactivate

创建一个 Gunicorn Systemd Service 文件,直接运行以下命令

vim /etc/systemd/system/gunicorn.service

修改内容如下:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=nginx
WorkingDirectory=/home/markhoo/sites/markhoo.com/myblog
ExecStart=/home/markhoo/sites/markhoo.com/myblog_env/bin/gunicorn --workers 3 --bind unix:/home/markhoo/sites/markhoo.com/myblog/myblog.sock myblog.wsgi:application

[Install]
WantedBy=multi-user.target

一定要注意自己的项目路径和虚拟环境路径
WorkingDirectory与ExecStart 修改为自己的路径

开启Gunicorn服务并开机自启,运行以下命令

systemctl start gunicorn
systemctl enable gunicorn

配置 Nginx

接下是配置 Nginx 来处理用户请求

配置nginx代理通过Gunicorn
依次运行以下命令

(myblog_env) [root@instance-pkb22o0h myblog]# cd /etc/nginx/
(myblog_env) [root@instance-pkb22o0h nginx]# ls
conf.d fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi
default.d fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi
(myblog_env) [root@instance-pkb22o0h nginx]# vi nginx.conf

或者直接运行

vim /etc/nginx/nginx.conf

打开后默认的内容如下:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

找到server内容进行修改,具体内容如下:

server {
    listen 80;
    server_name  markhoo.com 0.0.0.0;

        location = /favicon.ico { access_log off; log_not_found off; }
        location /static/ {
        root /home/markhoo/sites/markhoo.com/myblog;
        }

        location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/home/markhoo/sites/markhoo.com/myblog/myblog.sock;
        }

    }

注意修改自己的IP地址或域名,还有文件路径
server_domain_or_IP 代表你的IP地址或域名

  • 这里的域名为 markhoo.com,其次一定要添加 0.0.0.0 否则无法访问,两个之间用空格隔开。
  • 所有URL 带有 /static 的请求均由 Nginx 处理,alias 指明了静态文件的存放目录。
  • 其它请求转发给 Django 处理。proxy_pass 后面使用了 unix 套接字,其作用是防止端口冲突,这里就不再详述。

修改所涉及到的vim命令使用方法:使用 'vi (文件名称)' 是打开文件,然后点击键盘 'i' 键切换到输入模式。修改完需要退出vim编辑器,先按键盘 'Esc' 键,然后输入 ':wq' 保存退出。如果不想修改又无法退出可以用 ':q!' 强制退出,这样不会保存你修改的内容。
更多的vi、vim命令的具体使用方法可以自行到搜索引擎搜索学习,这里也不一一讲解了。

修改nginx的权限

usermod -a -G root nginx
chmod 710 /home/
nginx -t

如果没有报错,就行下一步操作

开启nginx服务并开机自启

systemctl start nginx
systemctl enable nginx

现在,一切配置完成!你可以访问你的域名了!

于6.20号写的文章相呼应。
新blog主要部分于2018.8.6开发完成,并于今日晚上成功上线测试【http://test.markhoo.com】,部署在百度云服务器。具体上线部署细节已用sublime记录700多行,等整理好发布分享。
最后,欢迎大家访问体验并找bug,提出建议。

环境管理

管理 Python 版本和环境的工具

  • p:非常简单的交互式 python 版本管理工具。官网

  • pyenv:简单的 Python 版本管理工具。官网

  • Vex:可以在虚拟环境中执行命令。官网

  • virtualenv:创建独立 Python 环境的工具。官网

  • virtualenvwrapper:virtualenv 的一组扩展。官网

包管理

管理包和依赖的工具。

  • pip:Python 包和依赖关系管理工具。官网

  • pip-tools:保证 Python 包依赖关系更新的一组工具。官网

  • pipenv:Pyhton 官方推荐的新一代包管理工具。官网

  • conda:跨平台,Python 二进制包管理工具。官网

  • Curdling:管理 Python 包的命令行工具。官网

  • wheel:Python 分发的新标准,意在取代 eggs。官网

包仓库

本地 PyPI 仓库服务和代理。

  • warehouse:下一代 PyPI。官网

  • bandersnatch:PyPA 提供的 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(多用途的网际邮件扩充协议)类型检测。

  • aiofiles:基于 asyncio,提供文件异步操作。官网

  • 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 中有关日期处理的棘手问题的库。官网

  • maya:人性化的时间处理库。官网

  • moment:一个用来处理时间和日期的 Python 库。灵感来自于 Moment.js。官网

  • pendulum:一个比 arrow 更具有明确的,可预测的行为的时间操作库。官网

  • PyTime:一个简单易用的 Python 模块,用于通过字符串来操作日期/时间。官网

  • pytz:现代以及历史版本的世界时区定义。将时区数据库引入 Python。官网

  • when.py:提供用户友好的函数来帮助用户进行常用的日期和时间操作。官网

文本处理

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

  • 通用

  • chardet:字符编码检测器,兼容 Python2 和 Python3。官网

  • difflib:(Python 标准库)帮助我们进行差异化比较。官网

  • ftfy:让 Unicode 文本更完整更连贯。官网

  • fuzzywuzzy:模糊字符串匹配。官网

  • Levenshtein:快速计算编辑距离以及字符串的相似度。官网

  • pangu.py:在中日韩语字符和数字字母之间添加空格。官网

  • pypinyin:汉字拼音转换工具 Python 版。官网

  • shortuuid:一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。官网

  • simplejson:Python 的 JSON 编码、解码器。官网

  • unidecode:Unicode 文本的 ASCII 转换形式 。官网

  • uniout:打印可读的字符,而不是转义的字符串。官网

  • xpinyin:一个用于把汉字转换为拼音的库。官网

  • yfiglet-figlet:pyfiglet -figlet 的 Python 实现。

  • 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 文件的库。官网

  • pyexcel:一个提供统一 API,用来读写,操作 Excel 文件的库。官网

  • python-docx:读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。官网

  • relatorio:模板化 OpenDocument 文件。官网

  • unoconv:在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。官网

  • XlsxWriter:一个用于创建 Excel .xlsx 文件的 Python 模块。官网

  • xlwings:一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。官网

  • xlwt:读写 Excel 文件的数据和格式信息。官网 / xlrd

  • PDF

  • PDFMiner:一个用于从 PDF 文档中抽取信息的工具。官网

  • PyPDF2:一个可以分割,合并和转换 PDF 页面的库。官网

  • ReportLab:快速创建富文本 PDF 文档。官网

  • Markdown

  • Mistune:快速并且功能齐全的纯 Python 实现的 Markdown 解析器。官网

  • Python-Markdown:John Gruber’s Markdown 的 Python 版实现。官网

  • Python-Markdown2:纯 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。官网

  •   thulac:清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包官网

文档

用以生成项目文档的库。

  • Sphinx:Python 文档生成器。官网

  • awesome-sphinxdoc:官网

  • MkDocs:对 Markdown 友好的文档生成器。官网

  • pdoc:一个可以替换 Epydoc 的库,可以自动生成 Python 库的 API 文档。官网

  • Pycco:文学编程(literate-programming)风格的文档生成器。官网

  • readthedocs:一个基于 Sphinx/MkDocs 的在线文档托管系统,对开源项目免费开放使用。官网

配置

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

  • 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:一个用于构建强大的交互式命令行程序的库。官网

  • python-fire:Google 出品的一个基于 Python 类的构建命令行界面的库。官网

  • Pythonpy:在命令行中直接执行任何 Python 指令。官网

  • 生产力工具

  • aws-cli:Amazon Web Services 的通用命令行界面。官网

  • bashplotlib:在终端中进行基本绘图。官网

  • caniusepython3:判断是哪个项目妨碍你你移植到 Python3。官网

  • cookiecutter:从 cookiecutters(项目模板)创建项目的一个命令行工具。官网

  • doitlive:一个用来在终端中进行现场演示的工具。官网

  • pyftpdlib:一个速度极快和可扩展的 Python FTP 服务库。官网

  • 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 。官网

  • face_recognition:简单易用的 python 人脸识别库。官网

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 的库。

  • aiohttp:基于 asyncio 的异步 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 系列

  • aiomysql:基于 asyncio 的异步 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

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

  • 关系型数据库

  • awesome-sqlalchemy 系列

  • 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 框架。官网

  • awesome-django 系列

  • Flask:一个 Python 微型框架。官网

  • awesome-flask 系列

  • pyramid:一个小巧,快速,接地气的开源 Python web 框架。

  • awesome-pyramid 系列

  • Bottle:一个快速小巧,轻量级的 WSGI 微型 web 框架。官网

  • CherryPy:一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有 WSGI 线程池。官网

  • TurboGears:一个可以扩展为全栈解决方案的微型框架。官网

  • web.py:一个 Python 的 web 框架,既简单,又强大。官网

  • web2py:一个全栈 web 框架和平台,专注于简单易用。官网

  • Tornado:一个 web 框架和异步网络库。官网

  • sanic:基于 Python3.5+ 的异步网络框架。官网

权限

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

  • Carteblanche:站在用户和设计者角度开发的一个代码对齐模块,很好地处理了代码导航及权限。官网

  • 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:一个货币类库。带有可选的 CLDR 后端本地化格式,提供可扩展的货币兑换解决方案。官网

  • 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 平台的超高速轻量级模板。官网

队列

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

  • 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。官网

  • requests-html:人性化的,Pythonic 的 HTML 解析库。官网

  • 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:一个映射验证器(mappings-validator)。支持多种规则,提供归一化功能,可以方便地定制为 Python 风格的 schema 定义。官网

  • 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 封装。官网

  • Toapi:一个轻巧,简单,快速的 Flask 库,致力于为所有网站提供 API 服务。官网

  • 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:跨平台用户界面框架 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:实时记录和收集日志的服务器。官网

测试

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

  • 测试框架

  • 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:代码覆盖率测量。官网

  • Codecov:一个代码覆盖率测试工具,为开源项目提供免费代码覆盖率测试服务。官网

  • 伪数据

  • faker:一个 Python 库,用来生成伪数据。官网

  • fake2db:伪数据库生成器。官网

  • radar:生成随机的日期/时间。官网

  • 错误处理

  • FuckIt.py:FuckIt.py 使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。官网

代码分析和 Lint 工具

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

  • 代码分析

  • coala:语言独立和易于扩展的代码分析应用程序。官网

  • code2flow:把你的 Python 和 JavaScript 代码转换为流程图。官网

  • pycallgraph:这个库可以把你的 Python 应用的流程(调用图)进行可视化。官网

  • pysonar2:Python 类型推断和检索工具。官网

  • Lint 工具

  • Flake8:模块化源码检查工具: pep8, pyflakes 以及 co。官网

  • Pylint:一个完全可定制的源码分析器。官网

  • YAPF: Google 的 Python 代码格式化工具。官网

  • pylama:Python 和 JavaScript 的代码审查工具。官网

  • 代码格式化

  • autopep8:自动格式化 Python 代码,以使其符合 PEP8 规范。官网

  • black:一个坚定的 Python 代码格式化工具。官网

调试工具

用来进行代码调试的库。

  • 调试器

  • 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 版。官网

  • 性能分析器

  • lineprofiler:逐行性能分析。官网

  • Memory Profiler:监控 Python 代码的内存使用。官网内存

  • profiling:一个交互式 Python 性能分析工具。官网

  • 其他

  • pyelftools:解析和分析 ELF 文件以及 DWARF 调试信息。官网

  • python-statsd:statsd 服务器的 Python 客户端。官网

科学计算和数据分析

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

  • 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:优雅的贝叶斯信念网络框架。官网

数据可视化

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

  • matplotlib:一个 Python 2D 绘图库。官网

  • bokeh:用 Python 进行交互式 web 绘图。官网

  • ggplot:ggplot2 给 R 提供的 API 的 Python 版本。官网

  • plotly:协同 Python 和 matplotlib 工作的 web 绘图库。官网

  • pyecharts:基于百度 Echarts 的数据可视化库。官网

  • pygal:一个 Python SVG 图表创建工具。官网

  • pygraphviz:Graphviz 的 Python 接口。官网

  • PyQtGraph:交互式实时 2D/3D/ 图像绘制及科学/工程学组件。官网

  • SnakeViz:一个基于浏览器的 Python's cProfile 模块输出结果查看工具。官网

  • vincent:把 Python 转换为 Vega 语法的转换工具。官网

  • VisPy:基于 OpenGL 的高性能科学可视化工具。官网

计算机视觉

计算机视觉库。

机器学习

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

  • Caffe: 一个 Caffe 的 python 接口。官网

  • Caffe2:一个轻量级的,模块化的,可扩展的深度学习框架。官网

  • Crab:灵活、快速的推荐引擎。官网

  • gensim:人性化的话题建模库。官网

  • hebel:GPU 加速的深度学习库。官网

  • keras: 以 tensorflow/theano/CNTK 为后端的深度学习封装库,快速上手神经网络。官网

  • MXNet:一个高效和灵活的深度学习框架。官网

  • NuPIC:智能计算 Numenta 平台。官网

  • pattern:Python 网络挖掘模块。官网

  • PyBrain:另一个 Python 机器学习库。官网

  • pydeep:Python 深度学习库。官网

  • Pylearn2:一个基于 Theano 的机器学习库。官网

  • python-recsys:一个用来实现推荐系统的 Python 库。官网

  • Pytorch:一个具有张量和动态神经网络,并有强大 GPU 加速能力的深度学习框架。官网

  • scikit-learn:基于 SciPy 构建的机器学习 Python 模块。官网

  • skflow:一个 TensorFlow 的简化接口(模仿 scikit-learn)。官网

  • TensorFlow:谷歌开源的最受欢迎的深度学习框架。官网

  • Theano:一个快速数值计算库。官网

  • vowpalporpoise:轻量级 Vowpal Wabbit 的 Python 封装。官网

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 库,一致并且可靠。官网 *  AirFlow:Airflow 是Airbnb公司开源的,是一个工作流分配管理系统,通过有向非循环图的方式管理任务流程,设置任务依赖关系和时间调度。官方  

外来函数接口

使用外来函数接口的库。

  • 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。官网

  •   NRU:一个基于组件的软件定义网络框架。官网

硬件

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

  • 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 。

金融数据

  • Tushare :一个可以提供免费股票、基金、期货、港股等金融数据的 Python 开源数据。官网

  • Ta-Lib :金融数据技术分析库,可以依据原始金融数据计算各种技术指标,计算性能比较优异。官网

持续集成

参见: awesome-CIandCD.

  • Travis CI:一个流行的工具,为你的开源和 私人 项目提供持续集成服务。(仅支持 GitHub)官网

  • CircleCI:一个持续集成工具,可以非常快速的进行并行测试。 (仅支持 GitHub)官网

  • Vexor CI:一个为私人 app 提供持续集成的工具,支持按分钟付费。官网

  • Wercker:基于 Docker 平台,用来构建和部署微服务。官网

代码质量

  • Codacy:自动化代码审查,更加快速的发布高质量代码。对于开源项目是免费的。官网

  • QuantifiedCode:一个数据驱动、自动、持续的代码审查工具。官网

官网太慢甚至打不开,所以干脆转载转来,方便学习。

|xadmin| 插件制作

插件原理

|xadmin| 的插件系统架构设计一定程度上借鉴了 wordpress 的设计。 想要了解 |xadmin| 的插件系统架构首先需要了解 |xadmin| AdminView 的概念。
简单来说,就是 |xadmin| 系统中每一个页面都是一个 AdminView 对象返回的 HttpResponse 结果。|xadmin| 的插件系统做的事情其实就是在 AdminView
运行过程中改变其执行的逻辑, 或是改变其返回的结果,起到修改或增强原有功能的效果。下面让我们看看整个插件从制作完成到实际运行的整个过程。

首先需要创建自己的插件类, 插件类继承 :class:~xadmin.views.BaseAdminPlugin ::


class HelloWorldPlugin(BaseAdminPlugin):
    ...

开发好的插件首先要注册到 |xadmin| 中, 示例代码如下::


# ListAdminView 是 Model 列表页面
xadmin.site.register_plugin(HelloWorldPlugin, ListAdminView)

其中插件的注册和使用可以参看 :meth:xadmin.sites.AdminSite.register_plugin

当将插件注册到 |xadmin| 后, |xadmin| 在创建 AdminView 实例的时候会将该插件放入实例的 :attr:plugins 属性。当 AdminView 在处理请求
时,会首先逐个调用 :attr:plugins 中插件的 :meth:~xadmin.views.BaseAdminPlugin.init_request 方法,插件在该方法中一般进行初始化的操作并且返回一个 Boolean 值告诉 AdminView
是否需要加载该插件。当 :meth:~xadmin.views.BaseAdminPlugin.init_request 方法返回值为 False 时, AdminView 不会加载该插件。实例如下::


class HelloWorldPlugin(BaseAdminPlugin):
    say_hello = False
    # 初始化方法根据 ``say_hello`` 属性值返回
    def init_request(self, *args, **kwargs):
        return bool(self.say_hello)

在以上实例中,插件根据自身的 say_hello 属性来决定是否让自己被加载。您可能会迷惑, say_hello 属性看起来一直会是 False 呀,那样这个插件不是永远不会被加载?
其实 |xadmin| 在创建插件实例的时候会将 OptionClass 的同名属性替换插件的属性。这样,在不同的 OptionClass 下会有不同的插件结果,实例如下::


class SomeModelAdmin(object):
    say_hello = True
    ...
site.register(SomeModel, SomeModelAdmin)

理解以上内容后,让我们再看看插件具体是如何起作用的。在 AdminView 的执行过程中,可以被插件截获或修改的方法使用 :func:~xadmin.views.base.filter_hook 装饰,实例如下::

class ListAdminView(ModelAdminView):
    # 可以被插件截获或修改的方法使用该装饰器装饰
    @filter_hook
    def get_context(self):
        ...

使用 :func:~xadmin.views.base.filter_hook 装饰的方法执行过程中会根据一定原则执行插件中的同名方法,具体信息查考该装饰器的文档内容。

.. autofunction:: xadmin.views.base.filter_hook

根据该装饰器的执行原则,如果我们想修改上面示例中 ListAdminViewget_context 的返回值,可以在插件中实现如下代码::


class HelloWorldPlugin(BaseAdminPlugin):
    # 在插件中加入同名方法,修改 ``ListAdminView`` 的 ``get_context`` 返回的值
    def get_context(self, context):
        context.update({'hello_target': 'World!!'})
        return context

如果我们希望插件在 AdminView 的方法前执行,或是完全使用自己的方法替代 AdminView 的方法可以这样::


class HelloWorldPlugin(BaseAdminPlugin):
    # 第一个参数为 ``__`` 。这样 ``__`` 即为 ``ListAdminView`` 的 ``get_context`` 方法本身,注意,这时还没有执行这个方法。
    def get_context(self, __):
        context = {'hello_target': 'World!!'}
        #我们可以在任何时候执行 ``AdminView`` 的方法,或是根本不执行
        context.update(__())
        return context

至此,加入的插件就实现了对 AdminView 方法的完全控制。

模板插件

我们知道,Django 中一个完整的 View 是包含模板的,模板用来生成 View 最终返回的 HTML 内容。当然,插件也可以在模板中插入自己的内容。我们来看看具体如何实现。

首先让我们来看看 |xadmin| 中的模板代码示例片段 (change_list.html):

.. code-block:: html


{% load xadmin %}
...
<form id="changelist-form" action="" method="post"{% view_block 'result_list_form' %}>{% csrf_token %}
  {% view_block 'results_top' %}
  <div class="results">
    {% if results %}
    ...

其中的 view_block Tag 即为插件的 插入点 。插件可以在自己的插件类中使用 block_ + 插入点名称 方法将 HTML 片段插入到页面的这个位置,示例如下:

.. code-block:: python


class HelloWorldPlugin(BaseAdminPlugin):
    
    # context 即为 TemplateContext, nodes 参数包含了其他插件的返回内容。
    # 您可以直接返回 HTML 片段,或是将内容加入到 nodes 参数中
    def block_results_top(self, context, nodes):
        return s"<div class='info'>Hello %s</div>" % context['hello_target']

插件实例

下面让我们来看一个 |xadmin| 中完整的插件实例::


from django.template import loader

from xadmin.sites import site
from xadmin.views import BaseAdminPlugin, ListAdminView

REFRESH_VAR = '_refresh'

# 该插件实现了一个列表页面刷新器的效果
class RefreshPlugin(BaseAdminPlugin):

    # 用户可以定制刷新的频率,可以传入多个值。该属性会被 ``OptionClass`` 的同名属性替换
    refresh_times = []
    
    def init_request(self, *args, **kwargs):
        # 根据用户是否制定了刷新器来决定是否启动该插件
        return bool(self.refresh_times)

    # 插件拦截了返回 Media 的方法,加入自己需要的 js 文件。
    def get_media(self, media):
        if self.request.GET.get(REFRESH_VAR):
            # 放页面处于自动刷新状态时,加入自己的 js 制定刷新逻辑
            media.add_js([self.static('xadmin/js/refresh.js')])
        return media

    # Block Views
    # 在页面中插入 HTML 片段,显示刷新选项。
    def block_top_toolbar(self, context, nodes):
        current_refresh = self.request.GET.get(REFRESH_VAR)
        context.update({
            'has_refresh': bool(current_refresh),
            'clean_refresh_url': self.admin_view.get_query_string(remove=(REFRESH_VAR,)),
            'current_refresh': current_refresh,
            'refresh_times': [{
                'time': r,
                'url': self.admin_view.get_query_string({REFRESH_VAR: r}),
                'selected': str(r) == current_refresh,
            } for r in self.refresh_times],
        })
        # 可以将 HTML 片段加入 nodes 参数中
        nodes.append(loader.render_to_string('xadmin/blocks/refresh.html', context_instance=context))
# 注册插件
site.register_plugin(RefreshPlugin, ListAdminView)

最后不要忘记在适当的地方加载该代码, 让其执行。一般情况下,你可以将其写到 adminx.py 文件中,这样,只要您的 APP 加入到 Django Settings 的 INSTALL_APPS 中,
|xadmin| 就会自动执行 app 下的 adminx.py 文件。

插件开发

了解了插件的运行原理后我们就可以开发自己的插件了。首先我们需要了解插件类中的实用方法。因为插件是继承 :class:~xadmin.views.BaseAdminPlugin 类,而该类继承自
:class:~xadmin.views.BaseAdminObject,所以这两个类的方法都可以在插件中使用。

|xadmin| 在创建插件时会自动注入以下属性到插件实例中:


* request : Http Request

* user : 当前 User 对象

* args : View 方法的 args 参数

* kwargs : View 方法的 kwargs 参数

* admin_view : ``AdminView`` 实例

* admin_site : |xadmin| 的 ``admin_site`` 对象实例

如果 AdminView 是 :class:~xadmin.views.ModelAdminView 的子类,还会自动注入以下属性:


* model : Model 对象

* opts : Model 的 _meta 属性

接下来您应该考虑打算制作什么功能的插件了。不同功能的插件额能需要注册到不同的 AdminView 上,|xadmin| 系统中
主要的 AdminView 有:


* :class:`~xadmin.views.BaseAdminView` : 所有 ``AdminView`` 的基础类,注册在该 View 上的插件可以影响所有的 ``AdminView``

* :class:`~xadmin.views.CommAdminView` : 用户已经登陆后显示的 View,也是所有登陆后 View 的基础类。该 View主要作用是创建了 |xadmin| 的通用元素,例如:系统菜单,用户信息等。插件可以通过注册该 View 来修改这些信息。

* :class:`~xadmin.views.ModelAdminView` : 基于 Model 的 ``AdminView`` 的基础类,注册的插件可以影响所有基于 Model 的 View。

* :class:`~xadmin.views.ListAdminView` : Model 列表页面 View。

* :class:`~xadmin.views.ModelFormAdminView` : Model 编辑页面 View。

* :class:`~xadmin.views.CreateAdminView` : Model 创建页面 View。

* :class:`~xadmin.views.UpdateAdminView` : Model 修改页面 View。

* :class:`~xadmin.views.DeleteAdminView` : Model 删除页面 View。

* :class:`~xadmin.views.DetailAdminView` : Model 详情页面 View。

选择好目标 AdminView 后就要在自己的插件中编写方法来修改或增强这些 AdminView 。其中每个 AdminView 可以
拦截的方法及其介绍请参看各 AdminView 的文档。

插件规范

文档模板::

"""
Name
======

作者
----

该插件的作者信息

功能
----

描述插件的主要功能

截图
----

.. image:: /images/plugins/action.png

使用
----

描述插件的使用方法,  以及使用示例.

版本
----

描述插件的版本信息

API
---
.. autoclass:: XXX

"""