This post originated from an RSS feed registered with Python Buzz
by Baiju M.
Original Post: Why Zope community use namespace packages ?
Feed Title: Programming life without Python(?)
Feed URL: http://baijum81.livejournal.com/data/rss
Feed Description: Programming life without Python(?)
Zope project and the community in general use lots of namespaces packages. Though, we have some non-namespace packages like ZODB3,ZConfig etc. Zope community has created many namespaces for packages like `zope`, `zope.app`, `zc`, `z3c`, `lovely` etc. Here `zc` stands for Zope Corporation, `z3c` for Zope 3 Community and lovely for Lovely Systems' packages.
Python is a language with namespace support at many levels. Remember, the last line of Zen of Python reads like this: "Namespaces are one honking great idea -- let's do more of those!" Take it positively, don't interpret it more ;)
A namespace package will not have any method,class or any other objects defined in that level. So a normal namespace package will be only having an empty `__init__.py` file. Eggs and setuptools provides some new advantages for the distribution of namespace packages. So, normally a namespace package's `__init__.py` file will contain something like this:
That's all you required to put in your namespace package's `__init__.py` file. But you also will be required to add one more keyword argument for `setup` function in your `setup.py` script like this:
namespace_packages=['zope']
You can even have nested namespace packages, in that case you have to add it like this:
namespace_packages=['zope', 'zope.app'],
Remember, Zen of Python also says: "Flat is better than nested." . Even though Zope use `zope.app` nested namespace package, Zope community discourage nested namespace packages. The `zope.app` namespace may be consider as a mistake of Zope project.
The `zope` and `zope.app` were the first namespace packages used by Zope. I still remember the appraisal I got from Jim Fulton after implementing his proposal for making `zope.app` a pure namespace package.
Here I will list some advantages of namespace packages. Feel free to add/explain anything you found. :)
Better grouping for projects/community/companies
Better name for packages and don't worry about a name conflict
Re-use package name in different namespaces
Easy distribution as eggs
I think the last point requires bit explanation. Consider two packages in same namespace, `zope.interface` and `zope.testbrowser`. In Python, package name is tied to directory structure. So, in normal distutils based distribution both `interface` and `testbrowser` should be under `zope` directory. But setuptools and eggs allows you to install both separately and still use both.
Let's save some names for new generation smart Python programmers ! Don't pollute top-level names, use namespace packages !!