- 浏览: 118742 次
- 性别:
最近访客 更多访客>>
文章分类
最新评论
-
差沙:
应该有django的Model
metaclass in python (part 1) -
beyking:
哈哈,恭喜
老子毕业了 -
towjzhou:
晕死,这种符号能打出来吗?
新的 pep ! -
xlp223:
好,需要这样的例子。自己用只能是从文档中获取一些,高级的用法, ...
SQLAlchemy Examples -
xlp223:
sql是个基础,脱离它去谈orm,有如纸上谈兵。
强大的 sqlalchemy
在 python 社区中 egg 已经是一种广为人知的格式了。众所周知对于 python 来说 egg 是一种用来生小蛇的东西,小蛇自然就是 python 软件包了(纯属瞎扯 ;-)。
简单地说,egg 之于 python 正如 jar 之于 java。是一种软件包打包的格式——要注意的是这个格式并非文件格式,实际上 egg 可以使用多种文件格式,当然最常用的还是 zip ——这里的格式主要是指组织其中包含的文件的格式。
只是把软件包打包成 zip 格式的话,那就不足为奇了。egg 显然不光是用来干这个的,egg 最重要的作用是给软件包增加元数据!而元数据具体包含些什么内容和它的格式几乎没有什么强制的定义,这给基于 egg 的应用提供了大量发挥的空间。
比如做PyPi软件包注册查找的机制、处理软件包之间的依赖关系等等,比如 setuptools 就是定义了一些元数据的格式,然后软件包的开发者只需按照这种格式把相关信息写进 setup.py ,setuptools 读取到这些信息后就可以帮你干这些事情了。
除此以外,我觉的 egg 最有意思的应用莫过于做为插件系统了。相信把 egg 做为插件系统来用的几个框架大家应该都了解,像 turbogears 的模版插件系统,paste 的可扩展的项目模版,还有 trac 的插件系统等。
一个插件系统莫过于这么几个步骤:框架首先定义一个/些插件的接口;第三方插件替你实现这个/些接口;插件注册;框架发现并使用插件。而 setuptools 和 egg 便可以帮你完成后面两个最麻烦的步骤:注册和发现。
先来看个效果,以下代码能帮你找到你安装过的所有 paste 项目模版(下面用到的 pkg_resources 模块安装 setuptools 后就有):
可以看到最后一步我们就在运行时加载了那个实现了 paste 所定义接口的类。
注册的过程就更简单了,setup.py install 一装就 ok 了。
这个过程中使用到的元数据叫做 entry_points ,entry_points 的格式很简单,其实就是 ini 的格式,一个 group 对应多个 name,
现在 setuptools 和 egg 已经帮你干完了这些麻烦事,你还需要做的事情就只剩下:设计你的系统,定义你的插件接口。
简单地说,egg 之于 python 正如 jar 之于 java。是一种软件包打包的格式——要注意的是这个格式并非文件格式,实际上 egg 可以使用多种文件格式,当然最常用的还是 zip ——这里的格式主要是指组织其中包含的文件的格式。
只是把软件包打包成 zip 格式的话,那就不足为奇了。egg 显然不光是用来干这个的,egg 最重要的作用是给软件包增加元数据!而元数据具体包含些什么内容和它的格式几乎没有什么强制的定义,这给基于 egg 的应用提供了大量发挥的空间。
比如做PyPi软件包注册查找的机制、处理软件包之间的依赖关系等等,比如 setuptools 就是定义了一些元数据的格式,然后软件包的开发者只需按照这种格式把相关信息写进 setup.py ,setuptools 读取到这些信息后就可以帮你干这些事情了。
除此以外,我觉的 egg 最有意思的应用莫过于做为插件系统了。相信把 egg 做为插件系统来用的几个框架大家应该都了解,像 turbogears 的模版插件系统,paste 的可扩展的项目模版,还有 trac 的插件系统等。
一个插件系统莫过于这么几个步骤:框架首先定义一个/些插件的接口;第三方插件替你实现这个/些接口;插件注册;框架发现并使用插件。而 setuptools 和 egg 便可以帮你完成后面两个最麻烦的步骤:注册和发现。
先来看个效果,以下代码能帮你找到你安装过的所有 paste 项目模版(下面用到的 pkg_resources 模块安装 setuptools 后就有):
In [3]: import pkg_resources
In [4]: pts = list( pkg_resources.iter_entry_points('paste.paster_create_templat
e') )
In [5]: pts
Out[5]:
[EntryPoint.parse('pylons_minimal = pylons.util:MinimalPylonsTemplate'),
EntryPoint.parse('pylons = pylons.util:PylonsTemplate'),
EntryPoint.parse('myghty_modulecomponents = myghty.paste.templates:MCTemplate')
,
EntryPoint.parse('myghty_simple = myghty.paste.templates:SimpleTemplate'),
EntryPoint.parse('myghty_routes = myghty.paste.templates:RoutesTemplate'),
EntryPoint.parse('basic_package = paste.script.templates:BasicPackage'),
EntryPoint.parse('paste_deploy = paste.deploy.paster_templates:PasteDeploy'),
EntryPoint.parse('toscawidgets = toscawidgets.util:ToscaWidgetsTemplate')]
In [6]: pts[0].name
Out[6]: 'pylons_minimal'
In [7]: pts[0].module_name
Out[7]: 'pylons.util'
In [8]: pts[0].attrs
Out[8]: ('MinimalPylonsTemplate',)
In [9]: pts[0].load()
Out[9]:<class 'pylons.util.MinimalPylonsTemplate'>
可以看到最后一步我们就在运行时加载了那个实现了 paste 所定义接口的类。
注册的过程就更简单了,setup.py install 一装就 ok 了。
这个过程中使用到的元数据叫做 entry_points ,entry_points 的格式很简单,其实就是 ini 的格式,一个 group 对应多个 name,
[group_name]
...
...
pkg_resource 中将 name 的格式定义为:
name = some.module:some.attr [extra1,extra2]而 group_name 则由框架定义,其实就是对应一个接口,插件只需要将自己实现了这个接口的类列在下面,然后 setup.py install 一装,就 ok 了。
现在 setuptools 和 egg 已经帮你干完了这些麻烦事,你还需要做的事情就只剩下:设计你的系统,定义你的插件接口。
发表评论
-
如何在醉酒的情况下编写正确的程序
2007-06-22 09:12 1307答案很简单:Test Driven。哈哈,这个(http:// ... -
Evolution of a Python programmer
2007-05-26 07:51 1379http://dis.4chan.org/read/prog/ ... -
Python and vim: Two great tastes that go great together
2007-05-26 08:29 1710Python and vim: Two great taste ... -
字典与动态语言
2007-03-19 10:18 1392字典(或者叫哈希表、关联数组..)与动态语言的渊源可谓极深。动 ... -
使用 python 模拟 ruby 的 open class
2007-01-27 11:42 1303老早就写了这些代码,但一直懒得为它写篇博客,我觉得我永远也无法 ... -
do it runtime
2007-01-20 11:19 2650第一次从静态语言到动态语言的人肯定在思维上需要 ... -
PLY: 一个以教学为目的的lex、yacc实现
2006-09-16 12:37 3846官方网站 想学或正在学编译原理的同学可不要错过了,要是上个学期 ... -
意外收获:get_caller
2006-09-16 14:01 1240阅读 PLY 的 lex.py 的时候 ... -
python is obvious !
2006-09-18 17:40 1361初识 python 的时候常常会被一些陌生的概念绊倒,而当熟悉 ... -
compatibility of IronPython
2006-09-19 03:58 1765IronPython 1.0 的发布,在邮件列表中引起了很多争 ... -
Be Pythonic
2006-10-19 03:05 1134Be PythonicWhat is PythonicPyth ... -
a python tutorial
2006-12-04 08:01 1491A Very Brief Introduction To Py ... -
metaclass in python (part 1)
2006-12-12 14:15 2671python 的东西虽然概念上容易理解 ,但是实际用起来却也不 ... -
metaclass in python (part 2)
2006-12-12 14:24 1801接着上一篇的讲。 现在我们知道了,metaclass 生 c ... -
python types and objects
2006-12-16 14:02 1337在探寻 metaclass 的过程 ... -
selfless python
2006-12-18 04:07 1093Eliminating self with Metaclass ... -
python virtual machines
2006-12-24 13:22 1488Jython,IronPython,PyPy。 ... -
理解 python 的 method 和 function 兼谈 descriptor
2007-01-01 07:34 4970总是看到有人对 python 中的 method 和 func ... -
写了个方便下载 tudou 网视频的小程序
2007-01-09 12:26 1758http://huangyilib.googlecode.co ...
相关推荐
Beyond BIOS 第三版 Beyond.BIOS.Developing.with.the.Unified.Extensible.Firmware.Interface.3rd.Editio
BIOS Developing with the Unified Extensible Firmware Interface(3rd) 英文mobi 第3版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
BIOS Developing with the Unified Extensible Firmware Interface(3rd) 英文azw3 第3版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
**Python-Emacs Application Framework 深度解析** 在当今的软件开发领域,集成开发环境(IDE)扮演着至关重要的角色。Emacs,一个历史悠久且功能强大的文本编辑器,因其高度可扩展性和自定义性而备受程序员喜爱。...
Although web components are still on the ... With custom components, the Web can finally fulfill its potential as a natively extensible application platform. This book gets you in at the right time.
Beginning with a focus on robustness, packaging, and releasing application code, you’ll move on to focus on improving application lifetime by making code extensible, reusable, and readable....
The Docker-Compose technology is examined and you will learn how it can be used to build a linked system with Python churning data behind the scenes and Jupyter managing these background tasks....
乌云内部渗透测试工具Extensible web attack framework
此外,文件列表中的"characterizing embedded application for instruction-set extensible processor.doc"可能包含更详细的研究报告,而".pdf 的翻译.htm"和".pdf 的翻译_files"则可能提供了PDF文档的中文翻译和...
Xamarin.Forms lets you write shared user-interface code in C# and XAML (the Extensible Application Markup Language) that maps to native controls on these three platforms. This book is a Preview ...
标题 "eXtensible Xml with SimpleXML-开源" 指出的是一个开源项目,它扩展了PHP中的SimpleXML库,使得处理XML文档更加便捷。SimpleXML是PHP的一个内置扩展,用于解析和操作XML文档,而XXS(可能是“Extended XML ...
标题中的“Intel(R)_USB_3.0_eXtensible_Host_Controller_Driver_3.0.4.65下载”表明我们正在讨论的是英特尔公司为USB 3.0扩展主机控制器开发的一个驱动程序,其版本号为3.0.4.65。这个驱动程序是确保计算机系统能够...
BIOS Developing with the Unified Extensible Firmware Interface(3rd) 英文无水印pdf 第3版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn...
"Code+Markup"的概念强调了WPF中代码和标记的结合,通过XAML(eXtensible Application Markup Language)进行界面描述,同时利用C#或VB.NET等编程语言实现逻辑控制,实现了设计与逻辑的分离。 本书的亮点在于: 1....
With AppFW Components you can write Applications with extensible functionalities without worrying about your ideas in the future. Write a container application to host your modules and you're able to ...
3. **XAML语言**:"SilverlightApplication1"中的主要界面设计通常通过Extensible Application Markup Language (XAML)进行。XAML是一种声明性语言,用于描述UI元素的布局和属性。例如,你可以在Page.xaml文件中找到...
AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。它的地址/...
XML:Extensible Markup Language(可扩展标记语言)的缩 写,是用来定义其它语言的一种元语言,其前身是SGML(标准通用标记语言)。它没有标签集(tag set),也没有语法规则(grammatical rule),但 是它有句法规则...
这本书的核心内容是讲解如何将XAML(Extensible Application Markup Language)与C#代码(code-behind)相结合,以创建功能丰富的桌面应用程序。源代码是书中示例和练习的实现,供读者学习和实践。 XAML是一种XML...