Feb
26
1. 概述
“工欲善其事,必先利其器”,如果说编程是程序员的手艺,那么IDE就是程序员的吃饭家伙了。
IDE的全称是Integration Development Environment(集成开发环境),一般以代码编辑器为核心,包括一系列周边组件和附属功能。一个优秀的IDE,最重要的就是在普通文本编辑之外,提供针对特定语言的各种快捷编辑功能,让程序员尽可能快捷、舒适、清晰的浏览、输入、修改代码。对于一个现代的IDE来说,语法着色、错误提示、代码折叠、代码完成、代码块定位、重构,与调试器、版本控制系统(VCS)的集成等等都是重要的功能。以插件、扩展系统为代表的可定制框架,是现代IDE的另一个流行趋势。
IDE并非功能越多越好,因为更多的功能往往意味着更大的复杂度,这不但会分散程序员本来的精力,而且还可能带来更多的错误。只要基本功能满足需要,符合自己使用习惯的IDE才是最好的IDE。程序员的逻辑永远是:用最合适的工具做最合适的事情。
正因为此,比起大而全的IDE,以单纯的文本编辑器结合独立的调试器、交互式命令行等外部小工具也是另一种开发方式。由于python本身的简洁,因此在写小的代码片段以及通过示例代码学习时这种方式尤其适合。
2. 常用IDE简介
这里简单介绍Python程序员中最流行的若干IDE。
2.1. 内置IDE
Python的各个常见发行版都有内置的IDE,虽然它们的功能一般不够强大完整,但简便易得就是最大的优势。 对于初学者来说,它们也是上手的最好选择,可以让你更专注于语言本身而不会被繁复的IDE分散精力。
2.1.1. IDLE
IDLE是Python标准发行版内置的一个简单小巧的IDE,包括了交互式命令行、编辑器、调试器等基本组件,足以应付大多数简单应用。 IDLE是用纯Python基于Tkinter编写的的,最初的作者正是Python之父Guido van Rossum本人。
http://hkn.eecs.berkeley.edu/~dyoo/python/idle_intro/index.html -- 《One Day of IDLE Toying》,图文并茂的入门文章
http://hkn.eecs.berkeley.edu/~dyoo/python/idle_intro/IDLE-chinese.htm -- 《One Day of IDLE Toying》中文版
2.1.2. PythonWin
PythonWin是Python Win32 Extensions(半官方性质的python for win32增强包)的一部分,也包含在ActivePython的windows发行版中。如其名字所言,只针对win32平台。
总体来说,PythonWin是一个增强版的IDLE,尤其是易用性方面(就像windows本身的风格一样)。除了易用性和稳定性之外,(简单的)代码完成和更强的调试器都是相对于IDLE的明显优势。
Python Win32 Extensions的下载页:http://sourceforge.net/projects/pywin32/
ActivePython的主页:http://www.activestate.com/Products/ActivePython/
2.1.3. MacPython IDE
MacPythonIDE是Python的Mac OS发行版内置的IDE,可以看作是PythonWin的Mac对应版本,由Guido的哥哥Just van Rossum编写。
2.2. Emacs和Vim
Emacs和Vim号称是这个星球上最强大(以及第二强大)的文本编辑器,对于许多程序员来说是万能IDE的不二(三?)选择。 比起同类的通用文本编辑器如UltraEdit,Emacs和Vim由于扩展功能的强大,可以针对性地搭建出更为完整便利的IDE。
*
Emacs -- Emacs及python-mode的简介
*
Vim -- Vim 通用编辑环境使用技巧推介
*
PyIDEguider、VimPython、VimPythonTDD -- 社区内几篇介绍在Vim环境下进行Python开发的文章
虽然二者掌握之后可以说是终身受益,但学习曲线都比较陡峭。由于历史原因,它们的设计理念都是基于纯ascii字符环境,GUI相对来说不是支持的重点,大量使用快捷键才能带来最大的便利。对于初学者来说,相对而言Vim更简洁一些,但Emacs的GUI与一般编辑器的习惯更接近些。
2.3. Eclipse + PyDev
Eclipse是新一代的优秀泛用型IDE,虽然是基于Java技术开发的,但出色的架构使其具有不逊于Emacs和Vim的可扩展性,现在已经成为了许多程序员最爱的瑞士军刀。
*
Eclipse -- Eclipse集成开发环境使用说明,简略介绍了Eclipse插件开发的基础知识
PyDev是Eclipse上的Python开发插件中最成熟完善的一个,而且还在持续的活跃开发中。除了 Eclipse平台提供的基本功能之外,PyDev的代码完成、语法查错、调试器、重构等功能都相当出色,可以说在开源产品中是最为强大的一个,许多贴心的小功能也很符合编辑习惯,用起来相当顺手。
速度和资源占用是致命伤,在低配置机器上跑起来比较吃力。
*
PyDev -- PyDev开发环境简介
Eclipse的主页:http://www.eclipse.org/
PyDev的主页:http://pydev.sourceforge.net/
PyDev使用手册:http://www.fabioz.com/pydev/manual_101_root.html (Eng) 此入门手册从安装到开发过程中的使用,并且是图文显示,推荐大家使用.
技术开发参考: 用 Eclipse,PyDev 和 Ant 进行 Python 开发,http://www-128.ibm.com/developerworks/cn/opensource/os-ecant/index.html
2.4. UliPad
UliPad是国内知名pythoner,也是PythonCN社区核心成员limodou开发的IDE。
2.5. SPE (Stani's Python Editor)
很有特色的一个轻量级python IDE,功能很全面而不失小巧轻便,特别适合写小的脚本。
即时生成代码的UML类图是独此一家的功能,此外还特别注重与外部工具的集成。例如,集成了wxGlade作为所见即所得的GUI开发环境,集成了Winpdb作为调试器,甚至还能与3D建模工具Blender集成。
SPE没有管理Project的概念,这样开发多文件多目录组成的项目时会不太方便。此外界面设计相对来说不够细致,也算是瑕疵。
SPE的主页:http://stani.be/python/spe/
2.6. Boa Constructor
专为快速开发基于wxPython的GUI程序而设计的IDE,支持“所见即所得”的控件拖放式开发,被称为Python世界中的Delphi。
曾被sourceforge推选为"Project of the Month",不过最近开发速度趋于缓慢。
Boa Constructor的主页:http://boa-constructor.sourceforge.net/
2.7. Eric3
Eric3的主页:http://www.die-offenbachs.de/detlev/eric3.html
2.8. WingIDE
Wingware公司开发的商业产品,总体来说是目前最为强大专业的Python IDE,开源项目可以申请到免费的license。
最大的缺点和PyDev一样,速度较慢,资源占用多。
Wingware的主页:http://wingware.com/
2.9. Komodo
另一个优秀的商业产品,由ActiveState公司开发,是一个泛用的脚本语言IDE,除了Python外还支持javascript、perl、php、ruby、tcl等多种语言。
Komodo的主页:http://www.activestate.com/Products/Komodo/
2.10. Textmate
Textmate是Mac OSX平台的Cocoa原生程序,类似UltraEdit。以灵活的Bundles和Code Snippets著称,支持大多数的脚本语言。Rails的全体开发团队都用这个Editor。类似Emacs/vi,需要配合ctags分析 python代码结构,可以很容易的做unittest等功能。需要特别指出的是它对于Django的model和template、以及Zope都有专门的支持。
Textmate的主页:http://macromates.com/
2.11. 综合比较
swordsp的个人建议:
*
初学者首选IDLE / PythonWin / MacPython
*
Emacs / Vim / Eclipse+PyDev是强大且通用的解决方案,取决于你更熟悉哪个环境,如果都没有基础,更推荐Eclipse+PyDev。
* SPE是纯Python实现的简洁型IDE中功能最完善的,写小脚本的时候很方便。
*
Boa长处在基于wxPython的快速GUI开发。
* 如果有条件选择商业工具,WingIDE或者Komodo都是优秀的产品。
其它比较Python IDE的文章:
http://www-128.ibm.com/developerworks/cn/linux/sdk/python/charm-14/index.html
"Charming Python"专栏作者David Mertz的测评文章,写于2001年,许多内容已经过于陈旧了,但仍有参考价值。
http://spyced.blogspot.com/2005/09/review-of-6-python-ides.html -- review-of-6-python-ides.html
http://spyced.blogspot.com/2006/02/pycon-python-ide-review.html -- pycon-python-ide-review.html
较新的两篇Python IDE测评文章(原地址需代理才能访问,后一个附件链接是本地的备份),分别比较了PyDev、Eric3、Boa Constructor、BlackAdder、Komodo、WingIDE、SPE。
3. IDE之外的工具
3.1. 交互式命令行(interactive console)
3.1.1. IPython
IPython的主页:http://ipython.scipy.org/
3.2. 调试工具(Debugger)
3.2.1. Winpdb
Winpdb的主页:http://www.digitalpeers.com/pythondebugger/
3.3. 其它支持 Python 的编辑器
3.3.1. Leo
基于全新的Literate Programming(文学化编程)理念的开发工具,详细的介绍参见:LeoEnvironment
Leo的主页:http://webpages.charter.net/edreamleo/front.html
3.3.2. Bluefish
Bluefish 通常被认为是一个类似 Homesite 的网页编辑器,但事实上它不仅如此。它应该是一个通用的文本编辑器,支持 C、PHP、Python、Ruby、Perl、Java、Shell、Tcl 等许多种编程语言,支持语法高亮、自动换行、自动关闭 HTML 标签等,可同时编辑多个文档。
Bluefish 当然不能算是一款 Python 的 IDE 工具,但如果做 Web 相关的开发( DjanGo、TurboGears 等),用它来写程序显然很方便。而且 Bluefish 相当友好,基本上不用学就会用,可以使我等菜鸟尽快将精力转移到 Python 的学习上来。
Bluefish 官方站在 http://bluefish.openoffice.nl/index.html 目前可以运行在大多数类 UNIX 操作系统上
“工欲善其事,必先利其器”,如果说编程是程序员的手艺,那么IDE就是程序员的吃饭家伙了。
IDE的全称是Integration Development Environment(集成开发环境),一般以代码编辑器为核心,包括一系列周边组件和附属功能。一个优秀的IDE,最重要的就是在普通文本编辑之外,提供针对特定语言的各种快捷编辑功能,让程序员尽可能快捷、舒适、清晰的浏览、输入、修改代码。对于一个现代的IDE来说,语法着色、错误提示、代码折叠、代码完成、代码块定位、重构,与调试器、版本控制系统(VCS)的集成等等都是重要的功能。以插件、扩展系统为代表的可定制框架,是现代IDE的另一个流行趋势。
IDE并非功能越多越好,因为更多的功能往往意味着更大的复杂度,这不但会分散程序员本来的精力,而且还可能带来更多的错误。只要基本功能满足需要,符合自己使用习惯的IDE才是最好的IDE。程序员的逻辑永远是:用最合适的工具做最合适的事情。
正因为此,比起大而全的IDE,以单纯的文本编辑器结合独立的调试器、交互式命令行等外部小工具也是另一种开发方式。由于python本身的简洁,因此在写小的代码片段以及通过示例代码学习时这种方式尤其适合。
2. 常用IDE简介
这里简单介绍Python程序员中最流行的若干IDE。
2.1. 内置IDE
Python的各个常见发行版都有内置的IDE,虽然它们的功能一般不够强大完整,但简便易得就是最大的优势。 对于初学者来说,它们也是上手的最好选择,可以让你更专注于语言本身而不会被繁复的IDE分散精力。
2.1.1. IDLE
IDLE是Python标准发行版内置的一个简单小巧的IDE,包括了交互式命令行、编辑器、调试器等基本组件,足以应付大多数简单应用。 IDLE是用纯Python基于Tkinter编写的的,最初的作者正是Python之父Guido van Rossum本人。
http://hkn.eecs.berkeley.edu/~dyoo/python/idle_intro/index.html -- 《One Day of IDLE Toying》,图文并茂的入门文章
http://hkn.eecs.berkeley.edu/~dyoo/python/idle_intro/IDLE-chinese.htm -- 《One Day of IDLE Toying》中文版
2.1.2. PythonWin
PythonWin是Python Win32 Extensions(半官方性质的python for win32增强包)的一部分,也包含在ActivePython的windows发行版中。如其名字所言,只针对win32平台。
总体来说,PythonWin是一个增强版的IDLE,尤其是易用性方面(就像windows本身的风格一样)。除了易用性和稳定性之外,(简单的)代码完成和更强的调试器都是相对于IDLE的明显优势。
Python Win32 Extensions的下载页:http://sourceforge.net/projects/pywin32/
ActivePython的主页:http://www.activestate.com/Products/ActivePython/
2.1.3. MacPython IDE
MacPythonIDE是Python的Mac OS发行版内置的IDE,可以看作是PythonWin的Mac对应版本,由Guido的哥哥Just van Rossum编写。
2.2. Emacs和Vim
Emacs和Vim号称是这个星球上最强大(以及第二强大)的文本编辑器,对于许多程序员来说是万能IDE的不二(三?)选择。 比起同类的通用文本编辑器如UltraEdit,Emacs和Vim由于扩展功能的强大,可以针对性地搭建出更为完整便利的IDE。
*
Emacs -- Emacs及python-mode的简介
*
Vim -- Vim 通用编辑环境使用技巧推介
*
PyIDEguider、VimPython、VimPythonTDD -- 社区内几篇介绍在Vim环境下进行Python开发的文章
虽然二者掌握之后可以说是终身受益,但学习曲线都比较陡峭。由于历史原因,它们的设计理念都是基于纯ascii字符环境,GUI相对来说不是支持的重点,大量使用快捷键才能带来最大的便利。对于初学者来说,相对而言Vim更简洁一些,但Emacs的GUI与一般编辑器的习惯更接近些。
2.3. Eclipse + PyDev
Eclipse是新一代的优秀泛用型IDE,虽然是基于Java技术开发的,但出色的架构使其具有不逊于Emacs和Vim的可扩展性,现在已经成为了许多程序员最爱的瑞士军刀。
*
Eclipse -- Eclipse集成开发环境使用说明,简略介绍了Eclipse插件开发的基础知识
PyDev是Eclipse上的Python开发插件中最成熟完善的一个,而且还在持续的活跃开发中。除了 Eclipse平台提供的基本功能之外,PyDev的代码完成、语法查错、调试器、重构等功能都相当出色,可以说在开源产品中是最为强大的一个,许多贴心的小功能也很符合编辑习惯,用起来相当顺手。
速度和资源占用是致命伤,在低配置机器上跑起来比较吃力。
*
PyDev -- PyDev开发环境简介
Eclipse的主页:http://www.eclipse.org/
PyDev的主页:http://pydev.sourceforge.net/
PyDev使用手册:http://www.fabioz.com/pydev/manual_101_root.html (Eng) 此入门手册从安装到开发过程中的使用,并且是图文显示,推荐大家使用.
技术开发参考: 用 Eclipse,PyDev 和 Ant 进行 Python 开发,http://www-128.ibm.com/developerworks/cn/opensource/os-ecant/index.html
2.4. UliPad
UliPad是国内知名pythoner,也是PythonCN社区核心成员limodou开发的IDE。
2.5. SPE (Stani's Python Editor)
很有特色的一个轻量级python IDE,功能很全面而不失小巧轻便,特别适合写小的脚本。
即时生成代码的UML类图是独此一家的功能,此外还特别注重与外部工具的集成。例如,集成了wxGlade作为所见即所得的GUI开发环境,集成了Winpdb作为调试器,甚至还能与3D建模工具Blender集成。
SPE没有管理Project的概念,这样开发多文件多目录组成的项目时会不太方便。此外界面设计相对来说不够细致,也算是瑕疵。
SPE的主页:http://stani.be/python/spe/
2.6. Boa Constructor
专为快速开发基于wxPython的GUI程序而设计的IDE,支持“所见即所得”的控件拖放式开发,被称为Python世界中的Delphi。
曾被sourceforge推选为"Project of the Month",不过最近开发速度趋于缓慢。
Boa Constructor的主页:http://boa-constructor.sourceforge.net/
2.7. Eric3
Eric3的主页:http://www.die-offenbachs.de/detlev/eric3.html
2.8. WingIDE
Wingware公司开发的商业产品,总体来说是目前最为强大专业的Python IDE,开源项目可以申请到免费的license。
最大的缺点和PyDev一样,速度较慢,资源占用多。
Wingware的主页:http://wingware.com/
2.9. Komodo
另一个优秀的商业产品,由ActiveState公司开发,是一个泛用的脚本语言IDE,除了Python外还支持javascript、perl、php、ruby、tcl等多种语言。
Komodo的主页:http://www.activestate.com/Products/Komodo/
2.10. Textmate
Textmate是Mac OSX平台的Cocoa原生程序,类似UltraEdit。以灵活的Bundles和Code Snippets著称,支持大多数的脚本语言。Rails的全体开发团队都用这个Editor。类似Emacs/vi,需要配合ctags分析 python代码结构,可以很容易的做unittest等功能。需要特别指出的是它对于Django的model和template、以及Zope都有专门的支持。
Textmate的主页:http://macromates.com/
2.11. 综合比较
swordsp的个人建议:
*
初学者首选IDLE / PythonWin / MacPython
*
Emacs / Vim / Eclipse+PyDev是强大且通用的解决方案,取决于你更熟悉哪个环境,如果都没有基础,更推荐Eclipse+PyDev。
* SPE是纯Python实现的简洁型IDE中功能最完善的,写小脚本的时候很方便。
*
Boa长处在基于wxPython的快速GUI开发。
* 如果有条件选择商业工具,WingIDE或者Komodo都是优秀的产品。
其它比较Python IDE的文章:
http://www-128.ibm.com/developerworks/cn/linux/sdk/python/charm-14/index.html
"Charming Python"专栏作者David Mertz的测评文章,写于2001年,许多内容已经过于陈旧了,但仍有参考价值。
http://spyced.blogspot.com/2005/09/review-of-6-python-ides.html -- review-of-6-python-ides.html
http://spyced.blogspot.com/2006/02/pycon-python-ide-review.html -- pycon-python-ide-review.html
较新的两篇Python IDE测评文章(原地址需代理才能访问,后一个附件链接是本地的备份),分别比较了PyDev、Eric3、Boa Constructor、BlackAdder、Komodo、WingIDE、SPE。
3. IDE之外的工具
3.1. 交互式命令行(interactive console)
3.1.1. IPython
IPython的主页:http://ipython.scipy.org/
3.2. 调试工具(Debugger)
3.2.1. Winpdb
Winpdb的主页:http://www.digitalpeers.com/pythondebugger/
3.3. 其它支持 Python 的编辑器
3.3.1. Leo
基于全新的Literate Programming(文学化编程)理念的开发工具,详细的介绍参见:LeoEnvironment
Leo的主页:http://webpages.charter.net/edreamleo/front.html
3.3.2. Bluefish
Bluefish 通常被认为是一个类似 Homesite 的网页编辑器,但事实上它不仅如此。它应该是一个通用的文本编辑器,支持 C、PHP、Python、Ruby、Perl、Java、Shell、Tcl 等许多种编程语言,支持语法高亮、自动换行、自动关闭 HTML 标签等,可同时编辑多个文档。
Bluefish 当然不能算是一款 Python 的 IDE 工具,但如果做 Web 相关的开发( DjanGo、TurboGears 等),用它来写程序显然很方便。而且 Bluefish 相当友好,基本上不用学就会用,可以使我等菜鸟尽快将精力转移到 Python 的学习上来。
Bluefish 官方站在 http://bluefish.openoffice.nl/index.html 目前可以运行在大多数类 UNIX 操作系统上
Feb
26
所谓工欲善其事,必先利其器。Python开发有很多工具,其中Eclipse+Pydev就是其中比较常见的一种。
下面将开发环境的安装配置过程写下来,供后来者参考。
一、安装Eclipse SDK。
到 http://download.eclipse.org/eclipse/downloads/ 找SDK最新的Release版本,最新的版本是 3.5.1
下载。一开始我选择的是台湾的[Taiwan] National Center for High-Performance Computing (http) ,速度只有5kB/s,还是小日本的快,118kB/S,, Japan Advanced Institute of Science and Technology (http) ,做事情应该也这样,一个明显很缓慢,就要当即力断换其他的。
下载完毕之后,将eclipse SDK解压到某个目录下,我的放在e:\eclipse就可以了。
如果要使用中文的,最好是使用跟SDK配套的语言包,否则也不能完全汉化(最后我选择了纯英文的,没汉化)。根据网上的资料,汉化前不要启动Eclipse,否则不能完全汉化。将语言包也解压到同一目录下即可。
二、安装Pydev
到 http://sourceforge.net/projects/pydev/ 这里找最新版本下载,最新版本是: 1.5.4
下载后解压,将plugins目录下所有文件挪到Eclipse的相应目录下,将feature目录下所有文件挪到Eclipse的相应目录下,最后启动 Eclipse,在Help-》Software Upates-》Manage Configuration,然后弹出的界面即可看到pydev的插件。
另一种安装插件的方法是:Help-》Software Upates-》Find and Install-》Search for new features to install-》New remote site-》随便起个name如pydev,url填 http://pydev.org/updates -》然后照着提示下载安装即可。
这里要注意,官方文档写了一个sf镜像可以用 实际上是不可以用的。
推荐我选择的是后一种方法。
三 、Pydev的配置
在Eclipse IDE 下, 打开 Window->Preferences... 对话框,从右侧的树形列表中选择“ PyDev”->“Interpreter Python”, 点击New按钮,从Python的安装路径下选择Python.exe,然后会弹出一个对话框让你勾选System PYTHONPATH,我是都选了,应该无所谓。最后点Ok,退出。
四、进行Django项目开发
1、建立PyDev Project
Eclipse IDE-》File-》New-》Other-》Pydev-》选择Pydev Project-》起一个项目的名称(例如demo)-》选择路径,如E:\work-》选择适合你的Python版本(我的是2.5)-》将下面的勾去掉,不要建立src文件-》Finish
2、建立Django Project
(1)django-admin.py startproject demo。
(2)把生成的Django项目目录拷贝到Eclipse刚刚建立的项目下的目录里。回到刚才的Elicpse IDE-》在PyDev Package视图中右键单击新建的项目,从弹出的菜单中选择“Refresh”,即可看到Django的项目工程。添加、删除文件和目录的操作都可以通过右键菜单来完成。
(3)右键单击PyDev项目-》属性-》选择PyDev-》PYTHONPATH-》然后将src目录 (项目文件路径) 添加到项目代码中去-》确定
(4)对Pydev项目进行配置:选择Pydev的项目名称-》Run菜单-》Open Run Dialog-》Python Run-》右键New-》在Main面板中写入项目名称,通过Browse载入项目名称和Main Module,Main Module选择manage.py-》在Augement面板中,argument必须是 runserver --noreload,下面的working directory加入你的base directory。
打完收工,接下来开始写Django应用吧。
最后补一个用SourceInsight看Python工程的方法:
1、到http://www.sourceinsight.com/public/languages/下载Python.CLF文件,这是python的语言支持包。
2、打开SourceInsight->Options > Preferences -> Languages -> Import -> Select (.CLF)
3、再做的:-> Document Types - > Add Type (Give it a name : 填Python->.给出类型名:我填的是*.py ) 在下面的下拉框里面选择之前导入的文件,然后确定。Source Insight 就可以识别该类型的文件了。
下面将开发环境的安装配置过程写下来,供后来者参考。
一、安装Eclipse SDK。
到 http://download.eclipse.org/eclipse/downloads/ 找SDK最新的Release版本,最新的版本是 3.5.1
下载。一开始我选择的是台湾的[Taiwan] National Center for High-Performance Computing (http) ,速度只有5kB/s,还是小日本的快,118kB/S,, Japan Advanced Institute of Science and Technology (http) ,做事情应该也这样,一个明显很缓慢,就要当即力断换其他的。
下载完毕之后,将eclipse SDK解压到某个目录下,我的放在e:\eclipse就可以了。
如果要使用中文的,最好是使用跟SDK配套的语言包,否则也不能完全汉化(最后我选择了纯英文的,没汉化)。根据网上的资料,汉化前不要启动Eclipse,否则不能完全汉化。将语言包也解压到同一目录下即可。
二、安装Pydev
到 http://sourceforge.net/projects/pydev/ 这里找最新版本下载,最新版本是: 1.5.4
下载后解压,将plugins目录下所有文件挪到Eclipse的相应目录下,将feature目录下所有文件挪到Eclipse的相应目录下,最后启动 Eclipse,在Help-》Software Upates-》Manage Configuration,然后弹出的界面即可看到pydev的插件。
另一种安装插件的方法是:Help-》Software Upates-》Find and Install-》Search for new features to install-》New remote site-》随便起个name如pydev,url填 http://pydev.org/updates -》然后照着提示下载安装即可。
这里要注意,官方文档写了一个sf镜像可以用 实际上是不可以用的。
推荐我选择的是后一种方法。
三 、Pydev的配置
在Eclipse IDE 下, 打开 Window->Preferences... 对话框,从右侧的树形列表中选择“ PyDev”->“Interpreter Python”, 点击New按钮,从Python的安装路径下选择Python.exe,然后会弹出一个对话框让你勾选System PYTHONPATH,我是都选了,应该无所谓。最后点Ok,退出。
四、进行Django项目开发
1、建立PyDev Project
Eclipse IDE-》File-》New-》Other-》Pydev-》选择Pydev Project-》起一个项目的名称(例如demo)-》选择路径,如E:\work-》选择适合你的Python版本(我的是2.5)-》将下面的勾去掉,不要建立src文件-》Finish
2、建立Django Project
(1)django-admin.py startproject demo。
(2)把生成的Django项目目录拷贝到Eclipse刚刚建立的项目下的目录里。回到刚才的Elicpse IDE-》在PyDev Package视图中右键单击新建的项目,从弹出的菜单中选择“Refresh”,即可看到Django的项目工程。添加、删除文件和目录的操作都可以通过右键菜单来完成。
(3)右键单击PyDev项目-》属性-》选择PyDev-》PYTHONPATH-》然后将src目录 (项目文件路径) 添加到项目代码中去-》确定
(4)对Pydev项目进行配置:选择Pydev的项目名称-》Run菜单-》Open Run Dialog-》Python Run-》右键New-》在Main面板中写入项目名称,通过Browse载入项目名称和Main Module,Main Module选择manage.py-》在Augement面板中,argument必须是 runserver --noreload,下面的working directory加入你的base directory。
打完收工,接下来开始写Django应用吧。
最后补一个用SourceInsight看Python工程的方法:
1、到http://www.sourceinsight.com/public/languages/下载Python.CLF文件,这是python的语言支持包。
2、打开SourceInsight->Options > Preferences -> Languages -> Import -> Select (.CLF)
3、再做的:-> Document Types - > Add Type (Give it a name : 填Python->.给出类型名:我填的是*.py ) 在下面的下拉框里面选择之前导入的文件,然后确定。Source Insight 就可以识别该类型的文件了。
Feb
26
import os
import unittest # 包含单元测试模块
import sqlite3 as sqlite # 包含sqlite3模块
def get_db_path():
return "sqlite_testdb"
class TransactionTests(unittest.TestCase): # 单元测试第一步: 由TestCase派生类
def setUp(self): # 单元测试环境配置
try:
os.remove(get_db_path())
except:
pass
self.con1 = sqlite.connect(get_db_path(), timeout=0.1) # 连接数据库
self.cur1 = self.con1.cursor() # 获取游标
self.con2 = sqlite.connect(get_db_path(), timeout=0.1)
self.cur2 = self.con2.cursor()
def tearDown(self): # 单元测试环境清除
self.cur1.close() # 关闭游标
self.con1.close() # 关闭连接
self.cur2.close()
self.con2.close()
os.unlink(get_db_path())
def CheckDMLdoesAutoCommitBefore(self):
self.cur1.execute("create table test(i)") # 执行SQL查询
self.cur1.execute("insert into test(i) values (5)")
self.cur1.execute("create table test2(j)")
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 1) # 测试
def CheckInsertStartsTransaction(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 0)
def CheckUpdateStartsTransaction(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
self.con1.commit()
self.cur1.execute("update test set i=6")
self.cur2.execute("select i from test")
res = self.cur2.fetchone()[0]
self.failUnlessEqual(res, 5)
def CheckDeleteStartsTransaction(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
self.con1.commit()
self.cur1.execute("delete from test")
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 1)
def CheckReplaceStartsTransaction(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
self.con1.commit()
self.cur1.execute("replace into test(i) values (6)")
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 1)
self.failUnlessEqual(res[0][0], 5)
def CheckToggleAutoCommit(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
self.con1.isolation_level = None
self.failUnlessEqual(self.con1.isolation_level, None)
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 1)
self.con1.isolation_level = "DEFERRED"
self.failUnlessEqual(self.con1.isolation_level , "DEFERRED")
self.cur1.execute("insert into test(i) values (5)")
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 1)
def CheckRaiseTimeout(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
try:
self.cur2.execute("insert into test(i) values (5)")
self.fail("should have raised an OperationalError")
except sqlite.OperationalError:
pass
except:
self.fail("should have raised an OperationalError")
class SpecialCommandTests(unittest.TestCase):
def setUp(self):
self.con = sqlite.connect(":memory:")
self.cur = self.con.cursor()
def CheckVacuum(self):
self.cur.execute("create table test(i)")
self.cur.execute("insert into test(i) values (5)")
self.cur.execute("vacuum")
def CheckDropTable(self):
self.cur.execute("create table test(i)")
self.cur.execute("insert into test(i) values (5)")
self.cur.execute("drop table test")
def CheckPragma(self):
self.cur.execute("create table test(i)")
self.cur.execute("insert into test(i) values (5)")
self.cur.execute("pragma count_changes=1")
def tearDown(self):
self.cur.close()
self.con.close()
def suite(): # 单元测试第二步
default_suite = unittest.makeSuite(TransactionTests, "Check")
special_command_suite = unittest.makeSuite(SpecialCommandTests, "Check")
return unittest.TestSuite((default_suite, special_command_suite)) # 用例
def test(): # 单元测试第三步
runner = unittest.TextTestRunner()
runner.run(suite()) # 运行单元测试
if __name__ == "__main__":
test()
import unittest # 包含单元测试模块
import sqlite3 as sqlite # 包含sqlite3模块
def get_db_path():
return "sqlite_testdb"
class TransactionTests(unittest.TestCase): # 单元测试第一步: 由TestCase派生类
def setUp(self): # 单元测试环境配置
try:
os.remove(get_db_path())
except:
pass
self.con1 = sqlite.connect(get_db_path(), timeout=0.1) # 连接数据库
self.cur1 = self.con1.cursor() # 获取游标
self.con2 = sqlite.connect(get_db_path(), timeout=0.1)
self.cur2 = self.con2.cursor()
def tearDown(self): # 单元测试环境清除
self.cur1.close() # 关闭游标
self.con1.close() # 关闭连接
self.cur2.close()
self.con2.close()
os.unlink(get_db_path())
def CheckDMLdoesAutoCommitBefore(self):
self.cur1.execute("create table test(i)") # 执行SQL查询
self.cur1.execute("insert into test(i) values (5)")
self.cur1.execute("create table test2(j)")
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 1) # 测试
def CheckInsertStartsTransaction(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 0)
def CheckUpdateStartsTransaction(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
self.con1.commit()
self.cur1.execute("update test set i=6")
self.cur2.execute("select i from test")
res = self.cur2.fetchone()[0]
self.failUnlessEqual(res, 5)
def CheckDeleteStartsTransaction(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
self.con1.commit()
self.cur1.execute("delete from test")
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 1)
def CheckReplaceStartsTransaction(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
self.con1.commit()
self.cur1.execute("replace into test(i) values (6)")
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 1)
self.failUnlessEqual(res[0][0], 5)
def CheckToggleAutoCommit(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
self.con1.isolation_level = None
self.failUnlessEqual(self.con1.isolation_level, None)
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 1)
self.con1.isolation_level = "DEFERRED"
self.failUnlessEqual(self.con1.isolation_level , "DEFERRED")
self.cur1.execute("insert into test(i) values (5)")
self.cur2.execute("select i from test")
res = self.cur2.fetchall()
self.failUnlessEqual(len(res), 1)
def CheckRaiseTimeout(self):
self.cur1.execute("create table test(i)")
self.cur1.execute("insert into test(i) values (5)")
try:
self.cur2.execute("insert into test(i) values (5)")
self.fail("should have raised an OperationalError")
except sqlite.OperationalError:
pass
except:
self.fail("should have raised an OperationalError")
class SpecialCommandTests(unittest.TestCase):
def setUp(self):
self.con = sqlite.connect(":memory:")
self.cur = self.con.cursor()
def CheckVacuum(self):
self.cur.execute("create table test(i)")
self.cur.execute("insert into test(i) values (5)")
self.cur.execute("vacuum")
def CheckDropTable(self):
self.cur.execute("create table test(i)")
self.cur.execute("insert into test(i) values (5)")
self.cur.execute("drop table test")
def CheckPragma(self):
self.cur.execute("create table test(i)")
self.cur.execute("insert into test(i) values (5)")
self.cur.execute("pragma count_changes=1")
def tearDown(self):
self.cur.close()
self.con.close()
def suite(): # 单元测试第二步
default_suite = unittest.makeSuite(TransactionTests, "Check")
special_command_suite = unittest.makeSuite(SpecialCommandTests, "Check")
return unittest.TestSuite((default_suite, special_command_suite)) # 用例
def test(): # 单元测试第三步
runner = unittest.TextTestRunner()
runner.run(suite()) # 运行单元测试
if __name__ == "__main__":
test()
Feb
26
1.首先去www.sqlite.org下载一个sqlite,它是一个嵌入式数据库,没有服务器的概念,windows版的就是一个exe,自己把它放到一个合适的目录里,然后把这个目录加入系统的path变量.
2.然后去找个pysqlite,这是python访问sqlite的接口,地址在这里 : http://initd.org/tracker/pysqlite
目前针对不同的python版本,pysqlite有两个版本:2.3和2.4,请根据自己的python版本选用.
3.然后就可以打开自己喜欢的编辑器,写一段测试代码了.
4.中文处理要注意的是sqlite默认以utf-8编码存储.
5.另外要注意sqlite仅支持文件锁,换句话说,它对并发的处理并不好,不推荐在网络环境使用,适合单机环境.
import pysqlite2.dbapi2 as sqlite
def runTest():
cx = sqlite.connect('test.db')
cu = cx.cursor()
#create
cu.execute('''create table catalog(
id integer primary key,
pid integer,
name varchar(10) unique
)''')
#insert
cu.execute('insert into catalog values(0,0,"张小山")')
cu.execute('insert into catalog values(1,0,"hello")')
cx.commit()
#select
cu.execute('select * from catalog')
print '1:',
print cu.rowcount
rs = cu.fetchmany(1)
print '2:',
print rs
rs = cu.fetchall()
print '3:',
print rs
#delete
cu.execute('delete from catalog where id = 1 ')
cx.commit()
cu.execute('select * from catalog')
rs = cu.fetchall()
print '4:',
print rs
#select count
cu.execute("select count(*) from catalog")
rs = cu.fetchone()
print '5:',
print rs
cu.execute("select * from catalog")
cu.execute('drop table catalog')
if __name__ == '__main__':
runTest()
2.然后去找个pysqlite,这是python访问sqlite的接口,地址在这里 : http://initd.org/tracker/pysqlite
目前针对不同的python版本,pysqlite有两个版本:2.3和2.4,请根据自己的python版本选用.
3.然后就可以打开自己喜欢的编辑器,写一段测试代码了.
4.中文处理要注意的是sqlite默认以utf-8编码存储.
5.另外要注意sqlite仅支持文件锁,换句话说,它对并发的处理并不好,不推荐在网络环境使用,适合单机环境.
import pysqlite2.dbapi2 as sqlite
def runTest():
cx = sqlite.connect('test.db')
cu = cx.cursor()
#create
cu.execute('''create table catalog(
id integer primary key,
pid integer,
name varchar(10) unique
)''')
#insert
cu.execute('insert into catalog values(0,0,"张小山")')
cu.execute('insert into catalog values(1,0,"hello")')
cx.commit()
#select
cu.execute('select * from catalog')
print '1:',
print cu.rowcount
rs = cu.fetchmany(1)
print '2:',
print rs
rs = cu.fetchall()
print '3:',
print rs
#delete
cu.execute('delete from catalog where id = 1 ')
cx.commit()
cu.execute('select * from catalog')
rs = cu.fetchall()
print '4:',
print rs
#select count
cu.execute("select count(*) from catalog")
rs = cu.fetchone()
print '5:',
print rs
cu.execute("select * from catalog")
cu.execute('drop table catalog')
if __name__ == '__main__':
runTest()
Feb
26
类型转换、数值操作
关键字: python类型转换、数值操作
python类型转换
Java代码
1. 函数 描述
2. int(x [,base ]) 将x转换为一个整数
3. long(x [,base ]) 将x转换为一个长整数
4. float(x ) 将x转换到一个浮点数
5. complex(real [,imag ]) 创建一个复数
6. str(x ) 将对象 x 转换为字符串
7. repr(x ) 将对象 x 转换为表达式字符串
8. eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
9. tuple(s ) 将序列 s 转换为一个元组
10. list(s ) 将序列 s 转换为一个列表
11. chr(x ) 将一个整数转换为一个字符
12. unichr(x ) 将一个整数转换为Unicode字符
13. ord(x ) 将一个字符转换为它的整数值
14. hex(x ) 将一个整数转换为一个十六进制字符串
15. oct(x ) 将一个整数转换为一个八进制字符串
函数 描述
int(x [,base ]) 将x转换为一个整数
long(x [,base ]) 将x转换为一个长整数
float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
序列支持一下操作:
Python代码
1. 操作 描述
2. s + r 序列连接
3. s * n , n * s s的 n 次拷贝,n为整数
4. s % d 字符串格式化(仅字符串)
5. s[i] 索引
6. s[i :j ] 切片
7. x in s , x not in s 从属关系
8. for x in s : 迭代
9. len(s) 长度
10. min(s) 最小元素
11. max(s) 最大元素
12. s[i ] = x 为s[i]重新赋值
13. s[i :j ] = r 将列表片段重新赋值
14. del s[i ] 删除列表中一个元素
15. del s[i :j ] 删除列表中一个片段
操作 描述
s + r 序列连接
s * n , n * s s的 n 次拷贝,n为整数
s % d 字符串格式化(仅字符串)
s[i] 索引
s[i :j ] 切片
x in s , x not in s 从属关系
for x in s : 迭代
len(s) 长度
min(s) 最小元素
max(s) 最大元素
s[i ] = x 为s[i]重新赋值
s[i :j ] = r 将列表片段重新赋值
del s[i ] 删除列表中一个元素
del s[i :j ] 删除列表中一个片段
数值操作:
Python代码
1. x << y 左移
2. x >> y 右移
3. x & y 按位与
4. x | y 按位或
5. x ^ y 按位异或 (exclusive or)
6. ~x 按位翻转
7. x + y 加
8. x - y 减
9. x * y 乘
10. x / y 常规除
11. x // y 地板除
12. x ** y 乘方 (xy )
13. x % y 取模 (x mod y )
14. -x 改变操作数的符号位
15. +x 什么也不做
16. ~x ~x=-(x+1)
17. abs(x ) 绝对值
18. divmod(x ,y ) 返回 (int(x / y ), x % y )
19. pow(x ,y [,modulo ]) 返回 (x ** y ) x % modulo
20. round(x ,[n]) 四舍五入,n为小数点位数
21. x < y 小于
22. x > y 大于
23. x == y 等于
24. x != y 不等于(与<>相同)
25. x >= y 大于等于
26. x <= y 小于等于
关键字: python类型转换、数值操作
python类型转换
Java代码
1. 函数 描述
2. int(x [,base ]) 将x转换为一个整数
3. long(x [,base ]) 将x转换为一个长整数
4. float(x ) 将x转换到一个浮点数
5. complex(real [,imag ]) 创建一个复数
6. str(x ) 将对象 x 转换为字符串
7. repr(x ) 将对象 x 转换为表达式字符串
8. eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
9. tuple(s ) 将序列 s 转换为一个元组
10. list(s ) 将序列 s 转换为一个列表
11. chr(x ) 将一个整数转换为一个字符
12. unichr(x ) 将一个整数转换为Unicode字符
13. ord(x ) 将一个字符转换为它的整数值
14. hex(x ) 将一个整数转换为一个十六进制字符串
15. oct(x ) 将一个整数转换为一个八进制字符串
函数 描述
int(x [,base ]) 将x转换为一个整数
long(x [,base ]) 将x转换为一个长整数
float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
序列支持一下操作:
Python代码
1. 操作 描述
2. s + r 序列连接
3. s * n , n * s s的 n 次拷贝,n为整数
4. s % d 字符串格式化(仅字符串)
5. s[i] 索引
6. s[i :j ] 切片
7. x in s , x not in s 从属关系
8. for x in s : 迭代
9. len(s) 长度
10. min(s) 最小元素
11. max(s) 最大元素
12. s[i ] = x 为s[i]重新赋值
13. s[i :j ] = r 将列表片段重新赋值
14. del s[i ] 删除列表中一个元素
15. del s[i :j ] 删除列表中一个片段
操作 描述
s + r 序列连接
s * n , n * s s的 n 次拷贝,n为整数
s % d 字符串格式化(仅字符串)
s[i] 索引
s[i :j ] 切片
x in s , x not in s 从属关系
for x in s : 迭代
len(s) 长度
min(s) 最小元素
max(s) 最大元素
s[i ] = x 为s[i]重新赋值
s[i :j ] = r 将列表片段重新赋值
del s[i ] 删除列表中一个元素
del s[i :j ] 删除列表中一个片段
数值操作:
Python代码
1. x << y 左移
2. x >> y 右移
3. x & y 按位与
4. x | y 按位或
5. x ^ y 按位异或 (exclusive or)
6. ~x 按位翻转
7. x + y 加
8. x - y 减
9. x * y 乘
10. x / y 常规除
11. x // y 地板除
12. x ** y 乘方 (xy )
13. x % y 取模 (x mod y )
14. -x 改变操作数的符号位
15. +x 什么也不做
16. ~x ~x=-(x+1)
17. abs(x ) 绝对值
18. divmod(x ,y ) 返回 (int(x / y ), x % y )
19. pow(x ,y [,modulo ]) 返回 (x ** y ) x % modulo
20. round(x ,[n]) 四舍五入,n为小数点位数
21. x < y 小于
22. x > y 大于
23. x == y 等于
24. x != y 不等于(与<>相同)
25. x >= y 大于等于
26. x <= y 小于等于





