Q on naming nested packages/modules

Rami Chowdhury rami.chowdhury at gmail.com
Tue Sep 1 15:21:05 EDT 2009


> An implication of all this is that if now I wanted to create a new
> module x.y.z.w, this means that the previously "leaf"-module x.y.z
> would become "non-leaf".  In other words, I'd have to:
>
> 1. create the new directory x/y/z
> 2. *rename* the file x/y/z.py to x/y/z/__init__.py
> 3. create the file x/y/z/w.py to hold the source for the new x.y.z.w
>    module

With regard to point 2 -- would it be possible to just move z.py into  
x/y/z, and put 'from z import *' into x/y/z/__init__.py, for the same  
effect? Or is that not a good idea?

On Tue, 01 Sep 2009 09:53:08 -0700, kj <no.email at please.post> wrote:

> In <h7jga8$ijj$1 at reader1.panix.com> kj <no.email at please.post> writes:
>
>> I'm having a hard time getting the hang of Python's package/module
>> scheme.  I'd like to find out what's considered best practice when
>> dealing with the scenario illustrated below.
>
>> The quick description of the problem is: how can I have two nested
>> modules, spam.ham and spam.ham.eggs?
>
> Following up my own post...
>
>> From inspecting the directory structure of some of the standard
> Python modules I infer the following rules:
>
> 1. the source for "leaf" modules lives in files named after them
>    (e.g. if x.y.z is a "leaf" module, its source code is in x/y/z.py)
>
> 2. the source for "non-leaf" modules lives in files named __init__.py
>    (e.g. if x.y is a "non-leaf" module, its source code lives in
>    the file x/y/__init__.py)
>
> In the examples above, the module x.y is a "non-leaf" module because
> there is a module x.y.z.
>
> I.e. the "leaf"-ness of a module depends solely on whether other
> modules deeper in the hierarchy are present.
>
> An implication of all this is that if now I wanted to create a new
> module x.y.z.w, this means that the previously "leaf"-module x.y.z
> would become "non-leaf".  In other words, I'd have to:
>
> 1. create the new directory x/y/z
> 2. *rename* the file x/y/z.py to x/y/z/__init__.py
> 3. create the file x/y/z/w.py to hold the source for the new x.y.z.w
>    module
>
> Is the above correct?  (BTW, to my Perl-pickled brain, step 2 above
> is the one that causes most distress...  But I think I can cope.)
>
> kynn



-- 
Rami Chowdhury
"Never attribute to malice that which can be attributed to stupidity" --  
Hanlon's Razor
408-597-7068 (US) / 07875-841-046 (UK) / 0189-245544 (BD)



More information about the Python-list mailing list