Python参考资料大全

摘要:
Diveinto Python是一本全面易懂的入门书。中文版本的翻译最近已提高到5.4。英语版本是为Python 3编写的。x、 缺点是,本书针对的Python版本相对较旧,它会给出一些过时的优化建议。建议同时阅读赖永浩的“Diveinto Python”补贴。有关相关代码检查工具,请参阅:使用PEP8检查Python编码样式。您可以从上面下载代码参考学习,它也是与Python相关的大量程序列表。Python星际旅行中著名的Python社区有代码、文档和专家。

Python参考资料

1.  基本安装

2.  Python文档

学习资料:

编码风格:

培训素材:

训练题:

2.1  推荐资源站点

2.2  其他参考资料

具体技巧:

Web 框架:

并发处理:

图形界面:

工具配置:

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。
  • Easy Install 快速安装Python模块的易用性解决方案(使用这种方式发行的包通常以Python Eggs的格式被Easy Install自动处理)。
    • 一般推荐先用 virtualenv 建个虚拟python环境再使用 easy_install (之后就不用加 --prefix参数了)(而且可以避免包与包之间相互影响)。
    • pip:在包依赖处理等方面比 easy_install 更好的一个解决方案。
    • Yolk:包信息管理工具,可以把已经安装的包的版本列出来。
    • Mac下说setuptools版本过低的问题
  • Fabric:Fabric 是一个自动化工具,它可以完成任意可以由脚本完成的事情,非常适合在本地操作远程——你不需要一次又一次的SSH到远程再进行部署。
    • http://www.scons.org/ Java有Ant这个巨火的构建工具,Python的特性允许我们构建更新类型的构建工具,就是scons了。

3.1  Python IDE

我的IDE选择经验 其实我现在只用Vim和Pydev了

  • Pydev 基于Eclipse的,非常棒的Python环境,改进速度非常快,现在是我最喜欢的IDE。
  • ulipad Python+wxPython实现的轻量级全功能跨平台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.2  有意思的东西

  • Howie:用Python实现的MSN对话机器人。
  • Cankiri:用一个Python脚本实现的屏幕录像机。

3.3  普通但没准有用的东西

  • pyForum:纯Python实现的论坛程序中最接近实用程度的一个,基于web2py实现。

4.  内置类库使用参考

  • Python正则表达式操作指南
    • 为方便调试正则表达式,可以用KODOS(基于 PyQT )、kiki(基于 wxPython )、Pyreb(基于 wxPython )中的任何一个来辅助。
    • 我目前用的是 kiki,但最近它的官方网站登陆不上去,我从 Debian 包把它的源码扒出来,应用了 stani 做的wxPython 2.8 兼容性补丁,并且用py2app把它封装成 Mac 应用程序供 QuickSilver 调用。修改以后的源代码包下载

5.  常用第三方类库

5.1  跨语言调用

  • JPype Python里调用Java类库、Java代码的桥接解决方案(因Limodou在ChinaUnix上提及而得知)。JPype使用要点 和其他语言调用 JNI 接口的方案一样,JPype 也常有内存泄露。

5.2  并发架构

  • PEAK提供一些用于实现自动化集群测试的重要基础类库,比如超轻量线程框架、分布式代码执行等。
    • greenlet 是PEAK给出的一种进程内的线程模型实现,自称是Stackless项目的副产品。其实这是一种伪线程,也就是说greenlet间切换需要明确指定下一步切换到哪块指令继续执行,而没有被执行的代码就被暂时挂起了。这里面greenlet间的执行顺序是完全确定的,并且是非并发的,就不能解决长时间大量资源占用的操作会导致程序无响应的问题。但greenlet可以用来减少资源死锁、互斥造成的资源消耗(代码被阻塞时,可以切换先去执行其他未被阻塞的部分),因此用来响应按钮点击等是挺好用的。
      • greenlet 现在不再是 pylib 的组成部分了,而是一个独立的名为 greenlet 的 pypi 包,可以通过 easy_install 安装。
    • Eventlet 是基于 greenlet 完成的一个高并发网络库,提供“线程”池、消息队列等许多非常方便的机制,比直接用 greenlet 要方便得多。并且 Eventlet 源自著名的虚拟现实项目——第二人生,是经过现实考验的可靠解决方案。

5.3  网络抓取

  • Requests:HTTP 协议访问封装库,接口界面设计比 Python 自带的 urllib 之类要简洁方便无数~
  • 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之前,先用这个东西预处理一下,后面的工作会轻松、准确得多~

5.5  多语言支持

  • Python for CJK 提供与python有关的CJK语言支持功能:转码、显示之类。

5.6  网络服务

  • Tornado 非阻塞、高性能、可扩展的 Web Server 实现,源自FriendFeed
  • Scapy:似乎是一个能够控制底层网络封包的交互式Python工具,对网络协议分析应该很有用。

5.7  协议封装

  • Crypto python的加解密扩展模块;
    • 另外还有 Google 发起的 Keyczar 加密库项目。
  • Protocol Buffers Google提供的高效数据序列化解决方案,比基于XML的数据序列化方案在数据大小和编解码效率上都大约高一个数量级。当然,Google自己也说这种办法也不是用哪都合适,一来Protocol Buffers不大适合用来处理格式化的文本,另一方面其本质是一个传输协议的生成语言,可能在传输的内容相对固定时,才值得专门生成一套这样的解析器。
    • Thrift:Facebook 开源出来的一个类似解决方案,优点是能支持更多平台和更多语言,形成一个更通用的二进制网络服务接口。豆瓣在逐步转向服务化,据称大量使用了 Thrift ,并利用Paste Script简化 Thrift 的使用、管理和部署。
  • pyzmq:消息队列 zerozmq 的 Python 封装,基本上这是一个追求性能为主的消息队列实现,全部数据在内存中保存。如果担心数据持久化的问题,可以考虑 RabbitMQ 等类似方案。另据传闻,Twitter已经由RabbitMQ转换到Kestrel
    • Blinker:对象间消息解耦解决方案。具体情况还没研究。。
  • Mulib 和 restish 都是基于 Python 实现的 REST 风格网络服务框架。

5.8  数据存储

  • 嵌入式数据库:BerkeleyDB的Python版,当然还有其他的好多。
  • 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 风格的 MongoDBPython 封装,可是其官网上怎么说这是一个 object-document mapper ?

5.9  科学计算与数据挖掘

  • NumPy Python的数学运算库,有时候一些别的库也会调用里面的一些功能,比如数组什么的;
  • SimPy 利用Python进行仿真、模拟的解决方案;
  • Matplotlib 据说是一个用来绘制二维图形的Python模块,它克隆了许多Matlab中的函数, 用以帮助Python用户轻松获得高质量(达到出版水平)的二维图形;
    • Graphviz 与 Matplotlib 不同,这个东西能画:有向图、网络结构、有限状态机等等。本身不是 Python 实现的,但是能找到 Python 封装。

5.10  并行处理

5.11  图像处理

  • Pil Python下著名的图像处理库Pil;

5.12  游戏开发

  • pygame 用Python帮助开发游戏的库,也可以用这个来播放视频或者音频什么的,大概依靠的是SDL;

5.13  系统工具

  • pyinotify 利用操作系统自身提供的Notify机制以最高的效率监控文件变化。
  • Pexpect:用Python作为外壳控制其他命令行程序的工具(比如Linux下标准的ftp、telnet程序什么的),还没有测试可用程度如何。

5.14  图形界面

  • Tk:这个本来是 Python 默认自带的图形界面库,简单好用但是大家总觉得丑。其实加上它的外观扩展Tk Themed Widgets (ttk)会好看很多很多,这样既不损失任何 Tk 的特性,而且代码改动量也非常小。
  • wxPython 基于wxWindows的易用且强大的图形界面开发包wxPython;wxPython发行版还自带了PyCrustPyShellPyAlaCartePyAlaMode等几个工具,分别是图形界面Shell和代码编辑器等,分别具有不同特点可以根据自己的需要选用。
  • PyQt 一般认为综合各平台上的表现,PyQt比wxPython能提供更为可靠的表现,较少遇到稀奇古怪的Bug。只是Qt虽然LGPL了,可是PyQt对商业软件仍然是收费的,Nokia刚开始做LGPL的Qt绑定——PySide,但是还谈不上成熟。
    • 在Mac上安装PyQt的详细步骤 PyQt在Win和Linux上都有可直接安装的二进制包,只有Mac没有。不过按照这篇文档来做,也是不难(我已试过,一切靠谱)。
  • PyGtk Qt永远的竞争者,在Win和Linux下表现都还不错,Mac下新的本地化移植绕过了系统自带的X11服务,性能大为提升,只是对输入法和字体支持等还有欠缺。
  • http://avc.inrim.it/html/ 比MVC模式更方便易用的开发框架,主要是帮助透明地完成界面控件与后台数据之间的内容绑定。该框架支持GTK、QT、TK、wxWidgets等主要具有Python封装的GUI开发框架。
  • pyjamas:Google GWT的Python克隆,还处在早期版本阶段。

5.15  性能调优

  • Psyco、Pyrex:两个用于提高Python代码运行效率的解决方案;如果对性能还不满意,可以试试这样:用 Python 写自己的 C Module
  • Heapy 对 Python 程序进行内存占用剖析的模块,Guppy-PE 项目的组成部分之一,被 Scrapy 等项目用作内存泄露的调试工具。类似的还有:
    • PySizer,感觉已经太旧了。
    • Dowser,和 Heapy 特点不太一样,并且使用CheeryPy作为调试结果的输出界面。
  • Gluttony Python 模块之间依赖关系图的自动生成工具。

5.16  检查与测试

  • PyflakesPyCheckerPyLint:都是用来做Python代码语法检查的工具。
  • Fudge 被HD的项目组认为是最好的Python Mock模块(也即冒烟测试)。
  • nose 测试脚本自动发现、自动执行辅助工具。文档见nose documentation
  • Coverage.py Python 测试代码覆盖率统计工具,已经内置于 nose 。

5.17  程序发布

  • py2exe win下将Python程序编译为可执行程序的工具,是一个让程序脱离Python运行环境的办法,也可以生成Windows服务或者COM组件。其他能完成Python脚本到可执行文件这个工作的还有Gordon McMillan's Installer、Linux/Unix专用的freeze、Mac专用的py2app,另外setuptools可能也能帮上点。不过此类工具难免与一些模块有一些兼容性的问题,需要现用现测一下。总之这个主题可以参考How to Distribute Commercial Python Applications

5.18  移动终端支持

免责声明:文章转载自《Python参考资料大全》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转帖]ArcGIS标注 [VBScript] Joe如何实现跨域cookie共享下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python multiprocessing使用详解

multiprocessing包是Python中的多进程管理包。与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程。该进程可以运行在Python程序内部编写的函数。该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法。此外multiproc...

聊聊 Python 数据处理全家桶(Sqlite篇)

1. 前言 上篇文章 聊到 Python 处理 Mysql 数据库最常见的两种方式,本篇文章继续说另外一种比较常用的数据库:Sqlite Sqlite 是一种 嵌入式数据库,数据库就是一个文件,体积很小,底层由 C 语言编写,经常被集成到移动应用程序中 事实上,Python 内置了 sqlite3 模块,不需要安装任何依赖,就可以直接操作 Sqlite...

lua 代码加密方案

require 实现 require函数在实现上是依次调用package.searchers(lua51中是package.loaders)中的载入函数,成功后返回。在loadlib.c文件里有四个载入函数的实现,分别为searcher_preload, searcher_Lua, searcher_C, searcher_Croot。 searche...

Python中的MySQL接口:PyMySQL & MySQLdb

MySQLdb模块只支持MySQL-3.23到5.5之间的版本,只支持Python-2.4到2.7之间的版本 PyMySQL支持 Python3.0以后的版本 PyMySQL https://pypi.python.org/pypi/PyMySQL https://github.com/PyMySQL/PyMySQL/blob/master/README...

python netifaces模块

简介 在Linux系统中,我们可以通过ifconfig,route等shell命令来查看系统接口配置,网关和路由等信息。通过shell的正则表达式功能,通过系列复杂操作,我们可以从字符串中提取出相关的信息。现在,通过Python的netifaces模块,可以很容易的获取这些信息。本文主要介绍netifaces的使用。 安装 可以在Python官网上去下...

CSDN博客专栏文章批量下载脚本[python实现]

    最近发现CSDN的blog专栏还是很给力的,毕竟这是一整个系列的文章,学习某方面知识比较容易形成体系,而且前人的经验还是相当有参考价值的。     原先也开了两个,只是工作比较忙,加之lz比较懒,所以没啥人气,囧。     最近看书之余,也会去看看别人的专栏,虽然你看或不看,文章就在那里,但是不能上网的时候还是很蛋疼的     so,花了一个小时...