Q on naming nested packages/modules

Terry Reedy tjreedy at udel.edu
Tue Sep 1 21:05:35 CEST 2009

kj wrote:
> But now suppose that I want to factor out some code in spam/ham.py
> to a helper module.  (The reason behind factoring out this new
> module is to "declutter" spam/ham.py, and improve its readibility.)
> My instinct (from my Perl past) is to put this factored-out code
> in a file spam/ham/eggs.py, i.e. to create the "nested" module
> spam.ham.eggs, which requires expanding the tree as follows
>   spam/
>   |-- ham/
>   |   |-- eggs.py
>   |   `-- __init__.py
>   |-- ham.py
>   `-- __init__.py
> ...and adding the following spam/ham.py to
> # spam/ham.py
> from . import eggs
> This doesn't work so well, because now spam/ham.py is not read.
> It seems that adding the spam/ham directory, or maybe adding the
> file spam/ham/__init__.py, causes spam/ham.py to be overlooked.
> Clearly, I'm not playing this game right...

One way is the __init__.py answer you have already. Another is to put 
eggs.py (or _eggs.py to indicate that it is private) in spam and skip 
the ham directory.



More information about the Python-list mailing list