On Sep 1, 8:58 am, kj <no.em...@please.post> wrote: > 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? > > Suppose I have a module (I'm not even sure this is the right word) > called spam.ham, so I start out with the following file structure: > > spam/ > |-- ham.py > `-- __init__.py > > With this arrangement, the line > > import spam.ham > > ...in client code works as expected. > > 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.
There's a hint here. You can move the contents of ham.py into ham/__init__.py, and it'll work the way you want, maybe with only a minor change or two. > Clearly, I'm not playing this game right... > > What is considered "best practice" for the use case sketched above? > Should I, e.g. rename the directory spam/ham something like spam/ham_ > and refer to the helper module as spam.ham_.eggs? Or is some other > convention preferred? The way you were intending is often the approach people use. I doubt there are any detailed consensus recommendations about this in the Python community. > I consulted PEP 8, but besides recommending "short, all-lowercase > names" for modules, it gives little guidance on the situation > described above. Of course it doesn't, PEP 8 is a style guide, not a project organization guide. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list