Donn Ingle a écrit : > Hi, I'm sure this is a FAQ, but I have just not found clarity on the > web/docs. > > (using monospaced type to show the tree) > trunk:$ tree > . > fp > |-- fontypython > | |-- __init__.py > | |-- cli.py > | |-- config.py > > (I start it all with ./fp) > > fp says: > import cli > > cli.py says: > import os > import config > > config.py says: > print os.environ['HOME'] > > I get a NameError in config.py > > If I add 'import os' to config.py all is well. > > So, I guess I am confused about the 'scope' of what gets imported where. I > am thinking that if one module (py file) does *import os* something and > *then* imports another module - the second module should have access to os > too?
Definitively no. This would make the second module dependent on the context in which it is used, which would be a VeryBadThing(tm). Each Python module is it's own _distinct_ namespace, and only depend on the name it explicitely imports or defines. FWIW, it's the whole point of *modules* (by opposition to 'includes' à la PHP). > I imagine myself "standing" inside cli.py at this point and saying "well I > can see os, and I'm bringing config *into* this space, so they should be > able to see os too." I can tell you from experience (with languages that work that way, cf above) that this usually leads to the worst possible mess, even if you're being careful. > How do I structure things so that I don't have endless repetitions of import > in every py file within my package directory? Having explicits imports in each module is good wrt/ readability. Now if you have a huge common set of imports in each and every submodule of a package, you can of course factor them out in a distinct submodule and just do a 'from myimports import *' at the top of the others submodules... -- http://mail.python.org/mailman/listinfo/python-list