(重定向自 Develop.Python)
On this page... (hide)
- 1. 基本安装
- 2. Python文档
- 3. 常用工具
- 3.1 环境管理
- 3.2 Python IDE
- 3.3 有意思的东西
- 3.4 普通但没准有用的东西
- 4. 内置类库使用参考
- 5. 常用第三方类库
1. 基本安装
- http://www.python.org/ 官方标准Python开发包和支持环境,同时也是Python的官方网站;
- http://www.activestate.com/ 集成多个有用插件的强大非官方版本,特别是针对Windows环境有不少改进;
2. Python文档
学习资料:
- Python 简介、资源和常见问题 (英文)
- Python 2.7 Tutorial 中文版(有可能需翻墙)(Python 其他版本的教程翻译见译者主页)
- Byte of Python 可以代替Tutorial使用,有中文译版的入门书籍。
- Dive into Python 一本比较全面易懂的入门书,中文版翻译最近进步为很及时的5.4了。英文版则正在写针对Python 3.x的版本。
- 缺点是此书针对的Python版本比较陈旧,会给出一些过时的优化建议,建议同时阅读赖勇浩的<Dive into Python>大补贴。
- 《深入 Python 3》中文版
- The Hacker's Guide to Python:Python 进阶使用的好书,关于编码风格、最佳实践、系统设计等一切实操。
编码风格:
- Python社区官方建议采用的Python编码风格(啄木鸟社区上的中文译文)。相关的代码检查工具,参考:用PEP 8检查Python Coding风格。
- Google SoC 建议的 Python 编码风格 (Python 编码风格指南中译版(Google SOC))
- Google 原版的 Python 编码风格指南 SoC 的那个指南基本上是在这个上面做的修改和增补。
- Google SoC 建议的 Python 编码风格 (Python 编码风格指南中译版(Google SOC))
- Zoom.Quiet的文档集(包括大量Python内容)
- 豆瓣上的Python相关书籍推荐
- Pythonic到底是什么玩意儿?
培训素材:
- March Liu 的《Python速成指南》
- 简单介绍类的可参考:IntroPy和在公司推广python
- 实际编程能力培训可参考沈仙人对他公司内部的Python培训素材:前言、基础篇、面向对象、图形界面编程、网络编程
- 深刻理解Python中的元类(metaclass):其实元类主要是用来创建程序库的 api 的,99% 的情况用不到。这篇文档的英文原文见What is a metaclass in Python?
训练题:
其他:
- Hacking with Python – 6 best online courses for ethical hackers:教授如何利用 Python 做白帽黑客的教程(需要翻墙访问、全英文、有些部分需付费),话题比较珍惜,因此放在这儿供参考。
- 在系统运维中使用 Python 的技巧
2.1 推荐资源站点
- 啄木鸟社区上的Python资源索引 (啄木鸟 Pythonic 开源社区 著名的(也可以说是最好的)国内Python开源社区。)
- Parnassus山的拱顶 巨大的Python代码库,包罗万象。既可以从上面下载代码参考学习,同时也是与Python有关程序的大列表。
- Python号星际旅行船 著名Python社区,代码、文档、高人这里都有。
- faqts.com的Python程序设计知识数据库 Python程序设计知识库,都是与Python有关的程序设计问题及解决方法。
2.2 其他参考资料
具体技巧:
Web 框架:
- Pythonic Web 应用平台对比 现在个人对TurboGears 2和Pylons
web.py(大致和KARRIGELL类似,都是类似于PHP那样比较简单的Python Web应用框架)和web2py非常感兴趣。近来Zope社区又出现了repoze.bfg这个解决方案,于是做应用时可以自由选用Zope中的合适部分了( Zope 社区的另一个发展方向是Grok,目标是敏捷易用又强大)。轻量级的除原来的web.py之外又有了Flask等等实现。另外还有Paste这样的 WSGI 参考实现来帮助做自己的框架,比如Bottle就是一个基于 WSGI 的 Web 开发框架。- My Exit from Zope:Grok 和 Five 的作者 Martijn Faassen 写的 Zope 系列故事。社区有句名言——Web 开发发生的一切都在 Zope 身上发生过。那么了解 Zope ,就是在了解 Web 开发的历史。
- TurboGears2 要点笔记
- Flask 要点笔记
Web 应用部署:
- 近年来比较流行的部署组合似乎是 Nginx + Gunicorn + Gevent + umysqldb 。比 fcgi 快,比 uWSGI 灵活。
并发处理:
图形界面:
- 在wxPython下进行图像处理的经验 (其实,仅使用wxPython也可以完成很多比较基础的图像处理工作,具体可以参照《wxPython in Action》一书的第12节)
工具配置:
2.3 代码示例
- http://newedit.tigris.org/technical.htm Limodou的NewEdit编辑器的技术手册,讨论了一些关于插件接口实现、i18实现、wxPython使用有关的问题,值得参考。
- 关于插件扩展机制:
- A Simple Plugin Framework 讲解了一种非常聪明而简单的办法来为代码提供插件接口。如果参考Java社区的类似框架,则有Java Plug-in Framework (JPF)以及OSGi标准。
- 另外limodou先生在Ulipad中实现插件和MixIn的机制也十分简单有效,见[NewEdit]设计说明(一)--概述,当然在UliPad最新版本的代码中对这个机制的实现又有实用的改进。(发布插件则有不少项目采用Python Eggs)
- 比较复杂的应用程序则可以使用Zope Component Architecture这样的机制来实现灵活易用的扩展接口(注意:zca虽然是Zope平台的一个组成部分,但其自身是不需要依赖Zope平台即可使用的)。
3. 常用工具
- Python Sidebar for Mozilla FireFox的一个插件,提供一个用来查看Python文档、函数库的侧边栏。
- IPython 很好用的Python Shell。
- Fabric:Fabric 是一个自动化工具,它可以完成任意可以由脚本完成的事情,非常适合在本地操作远程——你不需要一次又一次的SSH到远程再进行部署。
- http://www.scons.org/ Java有Ant这个巨火的构建工具,Python的特性允许我们构建更新类型的构建工具,就是scons了。
3.1 环境管理
环境隔离:
- virtualenv:偶尔软件项目的模块依赖比较复杂,极少数情况下还会挑模块版本。所以通常建议在开发和线上部署的时候先用 virtualenv 建一个独立的环境,就可以避免不同项目之间的依赖模块相互影响了。
- 建立新 virtualenv 环境的时候可以加 --system-site-packages 参数,这样建立出来的环境就能默认调用系统中已有的全局模块,在使用只能通过编译安装而且有大量编译依赖的库的时候比较有用(比如 MySQL)。
- OSX 下的 virtualenv 环境默认无法与图形界面交互(比如会导致 Matplotlib 显示不出图像来),其中一种绕过方法是建立一个 PATHTOVENV/bin/frameworkpython 文件,用这个脚本来代替标准的 python 执行指令就可以了,其文件内容为:(也有其他的处理办法,参考 Working with Matplotlib on OSX )
#!/bin/bash
# what real Python executable to use
PYVER=2.7
PATHTOPYTHON=/usr/local/bin/
PYTHON=${PATHTOPYTHON}python${PYVER}
# find the root of the virtualenv, it should be the parent of the dir this script is in
ENV=`$PYTHON -c "import os; print(os.path.abspath(os.path.join(os.path.dirname(\"$0\"), '..')))"`
# now run Python with the virtualenv set as Python's HOME
export PYTHONHOME=$ENV
exec $PYTHON "$@"- 如果 Matplotlib 库工作不太正常,可以建立一个 simple_plot.py 文件,其内容为:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1,2,3])
plt.show()python simple_plot.py --verbose-helpful
- 如果 Matplotlib 库工作不太正常,可以建立一个 simple_plot.py 文件,其内容为:
软件包管理:
- pip:在包依赖处理等方面比 easy_install 更好的一个解决方案,现在已经成为 Python 生态的主流方案了。
- 如果在国内下载太慢,可以设置为使用清华的 PyPI 镜像,设置方法见:PyPI 镜像使用帮助。
- 可以通过 pip install -h 指令,看它在 --index-url 参数的说明文字里显示的仓库地址来检查当前仓库设置。
- Easy Install:快速安装Python模块的易用性解决方案(使用这种方式发行的包通常以 Python Eggs 的格式被Easy Install自动处理)。
- Yolk:包信息管理工具,可以把已经安装的包的版本列出来。
- Mac下说setuptools版本过低的问题
3.2 Python IDE
我的IDE选择经验 其实最强大易用的现在是 PyCharm;自己装插件、改配置的话可以选 VS Code 或 Sublime Text。数据研究一般选 Jupyter Lab。当然用 Vim 之类总归永远是可以的。
- Pydev 基于Eclipse的,非常棒的Python环境,改进速度非常快,现在是我最喜欢的IDE。
- http://www.xored.com Trustudio 一个基于Eclipse的、同时支持Python和PHP的插件,曾经是我最喜欢的Python IDE环境,功能相当全了,不过试用时感觉有些细节不完善以致不大好用。
- http://www-900.ibm.com/developerWorks/cn/opensource/os-ecant/index.shtml 用 Eclipse 和 Ant 进行 Python 开发
- ulipad Python+wxPython实现的轻量级全功能跨平台IDE,非常好用。做一些简单小东西的时候我会用这个。
- http://pype.sourceforge.net/ 成熟的Python代码编辑器,号称功能介于EMACS和IDLE之间的编辑器。
- http://www.stani.be/python/spe SPE:号称是一个Full Featured编辑器,集成WxGlade支持GUI设计。
- eggy 用Python和QT实现的Python IDE,据说轻量又好用~
- Eric Python IDE 基于QT实现的非常不错的跨平台PYTHON IDE。支持调试,支持自动补全,甚至也支持重构。如果没有ulipad,并且在我的gnome下基于QT的Eric界面别走形的话,我会选这个。
- Spyder 几乎是个轻量化的 Eric ,也是基于 QT 和 QScintilla2 实现。它是科学计算包 python(x,y) (集成了科学计算常用的python第三方库,有400多M)的一个组成部分。
- http://www.scintilla.org/ 同时支持Win和Linux的源代码编辑器,似乎支持Python文件的编辑。
- http://boa-constructor.sourceforge.net/ 著名的基于WxPython的GUI快速生成用的Python IDE,但是开发进度实在太不积极了……
3.3 有意思的东西
- Cowsay:著名 Linux 命令行程序 cowsay 的 Python 移植。大致功能是生成一个动物说话的字符画,过去被广泛用在 IRC 类的网络环境里。
- Pyodide:在浏览器中运行的 Python 命令行终端。而且这个方案还移植了大量第三方类库的包。
- Howie:用Python实现的MSN对话机器人。
- Cankiri:用一个Python脚本实现的屏幕录像机。
3.4 普通但没准有用的东西
- pyForum:纯Python实现的论坛程序中最接近实用程度的一个,基于web2py实现。
4. 内置类库使用参考
- Python正则表达式操作指南
- ProcessPoolExecutor in Python: The Complete Guide:要有效利用多 CPU 处理计算任务,就得启用多进程机制来绕过 Gil,Python ProcessPoolExecutor 是自带类库中很重要的一个解决方案,但官方文档很难看懂,这篇要直观很多。
- Python: Sort a large list that doesn't fit in memory:官方类库自带了 heapq 模块,可很方便地模拟 Map/Reduce 计算过程的 Reduce 部分,是一个非常有效的处理海量数据的解决方案。
- 类似的一些讨论,也可以参考 How Python Handles Big Files 。
5. 常用第三方类库
5.1 跨语言调用
- JPype Python里调用Java类库、Java代码的桥接解决方案(因Limodou在ChinaUnix上提及而得知)。JPype使用要点 和其他语言调用 JNI 接口的方案一样,JPype 也常有内存泄露。
- ctype 和 CFFI 都是在 Python 里头调 C 函数库的方案,不过使用风格不太一样。
5.2 高并发架构
- PEAK提供一些用于实现自动化集群测试的重要基础类库,比如超轻量线程框架、分布式代码执行等。
- greenlet 是PEAK给出的一种进程内的线程模型实现,自称是Stackless项目的副产品。其实这是一种伪线程,也就是说greenlet间切换需要明确指定下一步切换到哪块指令继续执行,而没有被执行的代码就被暂时挂起了。这里面greenlet间的执行顺序是完全确定的,并且是非并发的,就不能解决长时间大量资源占用的操作会导致程序无响应的问题。但greenlet可以用来减少资源死锁、互斥造成的资源消耗(代码被阻塞时,可以切换先去执行其他未被阻塞的部分),因此用来响应按钮点击等是挺好用的。
- greenlet 现在不再是 pylib 的组成部分了,而是一个独立的名为 greenlet 的 pypi 包,可以通过 easy_install 安装。
- Eventlet 是基于 greenlet 完成的一个高并发网络库,提供“线程”池、消息队列等许多非常方便的机制,比直接用 greenlet 要方便得多。并且 Eventlet 源自著名的虚拟现实项目——第二人生,是经过现实考验的可靠解决方案。
- greenlet 是PEAK给出的一种进程内的线程模型实现,自称是Stackless项目的副产品。其实这是一种伪线程,也就是说greenlet间切换需要明确指定下一步切换到哪块指令继续执行,而没有被执行的代码就被暂时挂起了。这里面greenlet间的执行顺序是完全确定的,并且是非并发的,就不能解决长时间大量资源占用的操作会导致程序无响应的问题。但greenlet可以用来减少资源死锁、互斥造成的资源消耗(代码被阻塞时,可以切换先去执行其他未被阻塞的部分),因此用来响应按钮点击等是挺好用的。
5.3 网络抓取
- Requests:HTTP 协议访问封装库,接口界面设计比 Python 自带的 urllib 之类要简洁方便无数~
- requests 库有个坑,它的 get 、 post 等请求默认的 timeout 参数都是 None,表示当服务器关闭连接时才超时,有可能导致程序卡死,因此建议使用时每次都单独设置明确的 timeout 取值。
- PycURL 传说这是实现Python下多线程网页抓取的效率最高的解决方案,本质是对libcurl C语言库的封装。其实Twisted也可以定制成为一个网页抓取工具的。
- Scrapy 是一个网络爬虫框架,可以非常容易地通过定制规则得到所需的爬网器。基于 Twisted 实现。
- Larbin:似乎是 C++ 语言实现的一个多用途爬虫,号称性能很强,但目前不确定是否有 Python 封装。
- Python 可以通过 pamie 控制 IE 浏览器,通过 jssh 控制 Firefox ,主要目的是能比较完善地处理 Javascript 等。
- Spynner:操控一个无 GUI 的 Webkit 实现 http 访问的模块。因为依靠 Webkit ,所以它能提供 AJAX 支持~
- PhantomJS:同样是个无界面 Webkit ,只不过提供的 API 不是 Python 的,而是 Javascript 的。
- Zombie.js:也可以作为无头浏览器使用,但无需浏览器进程支持,而是依赖 Node.js ,接口也就自然是 Javascript 的。
- 更多关于操作无界面浏览器后端的讨论参考 Headless Browser for Python (Javascript support REQUIRED!)
- twill:Web 访问的自动化工具,有命令行界面和 Python API 。可以填写表单、支持 cookies 等,因此可以用作 Web 的自动化测试工具。
- mechanize是一个与之类似的东西,不过似乎使用起来比 twill 复杂一些,并且即使是这东西也仍然不支持 Javascript 的执行。
- pyv8:这是 Google V8 Javascript 引擎的 Python 封装,也就是说可以利用这个桥接器在 Python 里头运行 Javascript 代码。
5.4 网页解析
- chardet 一个猜测网页编码(比如utf-8还是gb18030)的库,会根据HTTP参数、HTML标签、XML标签中的相关声明来进行猜测。另有一个非Python实现的Enca也可以提供类似的功能。
- µTidylib 著名html整理、排错、自动修正工具HTML Tidy Library的Python封装。通常在正式开始分析html之前,先用这个东西预处理一下,后面的工作会轻松、准确得多~
- pyquery:在 Python 中以 jquery 风格书写代码来解析网页架构,比较符合前端的常见工作习惯。
5.5 多语言支持
- Python for CJK 提供与python有关的CJK语言支持功能:转码、显示之类。
5.6 网络服务
- Tornado 非阻塞、高性能、可扩展的 Web Server 实现,源自FriendFeed。
- Scapy:似乎是一个能够控制底层网络封包的交互式Python工具,对网络协议分析应该很有用。
- Socket.io 是 Web 上实时消息传输的可靠解决方案。用它来做聊天室之类的应用体验能够接近桌面软件。Python 在服务器端对这个协议的实现有以下几种方案:
- gevent-socketio:这是基于 Gevent 的实现方案。
- Realtime Web Chat with Socket.io and Gevent:Gevent 实现方案的一些要点。
- tornadio2:这是基于 Tornado 的实现方案。
- gevent-socketio:这是基于 Gevent 的实现方案。
代理调用:
- socksipy-branch:socks4/socks5 代理调用的封装库,支持 socket、urlib2、ftplib、telnetlib 等等这些模块的无缝调用。
5.7 协议封装
- Crypto python的加解密扩展模块;
- 另外还有 Google 发起的 Keyczar 加密库项目。
- simpleapi:特别简单好用的用来生成 json 等格式网络服务的一个框架,支持与 Flask 、 Django 等集成。
- Protocol Buffers Google提供的高效数据序列化解决方案,比基于XML的数据序列化方案在数据大小和编解码效率上都大约高一个数量级。当然,Google自己也说这种办法也不是用哪都合适,一来Protocol Buffers不大适合用来处理格式化的文本,另一方面其本质是一个传输协议的生成语言,可能在传输的内容相对固定时,才值得专门生成一套这样的解析器。
- Thrift:Facebook 开源出来的一个类似解决方案,优点是能支持更多平台和更多语言,形成一个更通用的二进制网络服务接口。豆瓣在逐步转向服务化,据称大量使用了 Thrift ,并利用Paste Script简化 Thrift 的使用、管理和部署。
- pyzmq:消息队列 zerozmq 的 Python 封装,基本上这是一个追求性能为主的消息队列实现,全部数据在内存中保存。如果担心数据持久化的问题,可以考虑 RabbitMQ 等类似方案。另据传闻,Twitter已经由RabbitMQ转换到Kestrel。
- Blinker:对象间消息解耦解决方案。具体情况还没研究。。
- NSQ:一个分布式实时消息处理系统,bitly 创建的,用 go 语言实现,有各种语言的客户端接口。框架特点参见“NSQ: realtime distributed message processing at scale”。
- Mulib 和 restish 都是基于 Python 实现的 REST 风格网络服务框架。
5.8 数据存储
- 嵌入式数据库:BerkeleyDB的Python版,当然还有其他的好多。
- RocksDB:Key/Value 风格的嵌入式数据库的最高峰,可以作为各种数据管理系统的底层存储部分,比如 MySQL 就有基于 RocksDB 的实现版本。
- 如果需要 SQL 能力,面向数据管理的话,一般是用 Sqlite;面向数据分析的话,一般使用 DuckDB(因为底层是基于列存储引擎,而且支持压缩);
- Pyro 一个Python的分布式对象系统,提供面向对象风格的RPC功能。
- Durus:Python的对象数据库,当然也可以作为一种对象实例持久化的机制来使用;这是一个开源的纯Python实现,并提供一个可选的C语言插件来大幅提高运行效率。
- Missile DB:一种 Python 的、简洁高效的 DBMS,自称是Durus的一种衍生品,更能够适应Stackless Python环境。同时也是并发性能极高的Eurasia3项目的一个子项目。
- ey-lessql:收集的各种分布式键值数据库的Python版驱动。如果不考虑Python驱动的问题,A Yes for a NoSQL Taxonomy是一个非常完整的非SQL数据存储引擎列表。
- NoSQL数据库探讨之一 - 为什么要用非关系数据库?
- NOSQL Patterns
- 目前我最感兴趣的键值数据库是MongoDB,有人认为它基本上已经可以替代MySQL所能提供的功能,并且性能更高!
- Ming可能是类似 ORM 对关系数据库所起作用的 MongoDB 的 Python 封装?
- pymodels MongoDB 的轻量级 ORM 封装,它本来是用于 Tokyo Tyrant 和 Tokyo Cabinet 的。
- MongoEngine:Quora 上有人推荐说这个是 Django ORM 风格的 MongoDB Python 封装,可是其官网上怎么说这是一个 object-document mapper ?
5.9 科学计算与数据挖掘
- NumPy:Python的数学运算库,有时候一些别的库也会调用里面的一些功能,比如数组什么的。
- SimPy:利用Python进行仿真、模拟的解决方案。
- Matplotlib:据说是一个用来绘制二维图形的Python模块,它克隆了许多Matlab中的函数, 用以帮助Python用户轻松获得高质量(达到出版水平)的二维图形。
5.10 并行计算
- Faust:流计算解决方案,可以用 Python 来定义流处理任务。
- Dask:对 Pandas 风格的各种 DataFrame 操作自动拆解成并行计算任务来处理,这样有效利用多 CPU 甚至多主机来快速计算超大数据集。
- pyre:使用Python完成高性能计算需求的包,真的可以做到么?还没研究。
- Parallel Python:纯Python的并行计算解决方案。相关中文参考页面
5.11 分布式任务队列
- Celery:可能是 Python 领域最著名的分布式任务队列解决方案了,简单易用又稳定,可以轻松帮助 Web 应用处理类似秒杀、资源排队这类复杂的多用户互斥情形。
- Blinker:应该是一个分布式消息分发的解决方案。
5.12 图像处理
5.13 游戏开发
- pygame:用Python帮助开发游戏的库,也可以用这个来播放视频或者音频什么的,大概依靠的是SDL;pygame 的 2D 性能比较不错,硬件兼容性也比较好。
- pyglet:这个背后依赖的是 OpenGL ,所以硬件兼容性不如 pygame 。但是在有强力显卡支持的情况下,3D 性能就要比 pygame 靠谱很多了。
5.14 系统工具
- pyinotify 利用操作系统自身提供的Notify机制以最高的效率监控文件变化。
- Pexpect:用Python作为外壳控制其他命令行程序的工具(比如Linux下标准的ftp、telnet程序什么的),还没有测试可用程度如何。
5.15 服务管理
- daemonize:支持让 Python 代码在 Unix-like 系统上以 daemon 守护进程的方式工作。这样写出来的服务程序就更像一个真正的“服务”了~
- Supervisor:用这个其实也能实现把一个普通进程封装成系统服务的功能。
- 更详细的使用说明,参考 Supervisor 使用笔记 。
5.16 图形界面
- PySimpleGUI:极其简单易学的图形界面库,而且可以选择不同的底层后端,所以观感也可以弄到挺不错。我认为做软件时可以先拿这个试试看。
- Tk:这个本来是 Python 默认自带的图形界面库,简单好用但是大家总觉得丑。
- 其实加上它的外观扩展Tk Themed Widgets (ttk)会好看很多很多,这样既不损失任何 Tk 的特性,而且代码改动量也非常小。不过我在 OSX 下试验,ttk 弄出来的界面不支持中文输入法。。
- Kivy:跨平台的解决方案,也能支持制作 iOS 和 Android 应用。
- wxPython 基于wxWindows的易用且强大的图形界面开发包wxPython;wxPython发行版还自带了PyCrust、PyShell、PyAlaCarte和PyAlaMode等几个工具,分别是图形界面Shell和代码编辑器等,分别具有不同特点可以根据自己的需要选用。
- PyQt 一般认为综合各平台上的表现,PyQt比wxPython能提供更为可靠的表现,较少遇到稀奇古怪的Bug。只是Qt虽然LGPL了,可是PyQt对商业软件仍然是收费的,Nokia刚开始做LGPL的Qt绑定——PySide,但是还谈不上成熟。
- 在Mac上安装PyQt的详细步骤 PyQt在Win和Linux上都有可直接安装的二进制包,只有Mac没有。不过按照这篇文档来做,也是不难(我已试过,一切靠谱)。
- PyGtk Qt永远的竞争者,在Win和Linux下表现都还不错,Mac下新的本地化移植绕过了系统自带的X11服务,性能大为提升,只是对输入法和字体支持等还有欠缺。
- 先按照Building GTK-OSX安装GTK-OSX,然后按照Gtk+ Python页的说明安装PyGtk即可,非常容易。
- PyObjC:这个专用于 Mac OS X 平台,调用原生 Cocoa GUI 框架的。
- Python bindings for Sciter:GUI 界面也可以不用原生的,而是基于 HTML5 来生成。Sciter 是其中一个比较成熟的解决方案,Norton 杀毒软件的界面就是用这个来实现的。
- NiceGUI:同样是以 Web 作为界面,但对网页的编程细节封装得非常好,更像是在写 Python 代码。界面的体验观感也非常好。总体挺适合用来创建人工智能场景的使用界面的。
- http://avc.inrim.it/html/ 比MVC模式更方便易用的开发框架,主要是帮助透明地完成界面控件与后台数据之间的内容绑定。该框架支持GTK、QT、TK、wxWidgets等主要具有Python封装的GUI开发框架。
- TraitsUI:也是一个虚拟封装层,底层可以是 QT 或者 wx。经常作为数据分析应用的界面创建器。
- Enaml:在 QT 基础上定义的界面描述语言,风格相当于于是 Python 语言的扩展。
- pyjamas:Google GWT的Python克隆,还处在早期版本阶段。
5.17 程序调试
- Loguru:标准库的 logging 用起来实在太麻烦了,Loguru 的易用性要好太多了,强烈推荐使用。
5.18 性能调优
- Psyco、Pyrex:两个用于提高Python代码运行效率的解决方案;如果对性能还不满意,可以试试这样:用 Python 写自己的 C Module。
- Heapy 对 Python 程序进行内存占用剖析的模块,Guppy-PE 项目的组成部分之一,被 Scrapy 等项目用作内存泄露的调试工具。类似的还有:
- Gluttony Python 模块之间依赖关系图的自动生成工具。
5.19 检查与测试
- Pyflakes、PyChecker、PyLint:都是用来做Python代码语法检查的工具。
- Fudge 被HD的项目组认为是最好的Python Mock模块(也即冒烟测试)。
- nose 测试脚本自动发现、自动执行辅助工具。文档见nose documentation。
- Coverage.py Python 测试代码覆盖率统计工具,已经内置于 nose 。
5.20 程序发布
- Nuitka:真正的二进制发布神器,不但支持整个程序打包,还可以单独加密某个模块,从而实现源代码保护。
- PyInstaller:比 py2exe 更好用,而且支持 Win、Mac、Linux 三个平台。最新版本的易用性已经非常好了。
- py2exe win下将Python程序编译为可执行程序的工具,是一个让程序脱离Python运行环境的办法,也可以生成Windows服务或者COM组件。其他能完成Python脚本到可执行文件这个工作的还有Gordon McMillan's Installer、Linux/Unix专用的freeze、Mac专用的py2app,另外setuptools可能也能帮上点。不过此类工具难免与一些模块有一些兼容性的问题,需要现用现测一下。总之这个主题可以参考How to Distribute Commercial Python Applications。
5.21 移动终端支持
- http://www.forum.nokia.com/main/0,,034-821,00.html Nokia居然发布了在Series 60系统上运行Python程序(图形界面用wxPython)的库,还有一个Wiki页是关于这个的:http://www.postneo.com/postwiki/moin.cgi/PythonForSeries60 。Python4Symbian这个页面是记录的我的使用经验。
5.22 Excel 读写
- xlwt:可以在任意平台上支持 Excel 97-2003 版本文件的读写,通常功能已经够用了。