On Nov 28, 3:24 am, Viktor Kerkez <[EMAIL PROTECTED]> wrote: > On Nov 28, 9:35 am, Carl Banks <[EMAIL PROTECTED]> wrote: > > > However, I'm not so sure the effect of os.chdir() on the import path > > is a good idea. > > I'm not actually using os.chidir(), I just used it here to create a > clearer example. > > Here is the simplest representation of the problem: > > http://www.ninjashare.com/904415 > > $ cd singleton_test > $ export PYTHONPATH=. > $ python application/main_script.py > Creating class Singleton > Creating class MySingleton > Creating class Singleton > Creating class MySingleton > $
Ah ha. That's a slightly different issue. Here's the problem: when you type "python application/main_script.py", Python doens't call the module it runs "application,main_script" like you'd expect. Instead it calls the module "__main__". Thus, when you later import "application.main_script", Python doesn't see any already-loaded modules called application.main_script, so it imports the file again (this time calling the module "application.main_script"). Try it this way: python -c 'import application.main_script' In this example, Python the string passed to "-c" is considered the __main__ module, so when you import application.main_script it calls the module it imports "application.main_script", so you will get the behavior you expect. The thing you have to remember is, "Never try to reimport the main script; it just won't work." If you find yourself doing that, create a tiny script whose sole job is to import the real main script (and maybe set up sys.path), and run that. (Also, some people consider reciprocal imports to be bad style. I'm not one of them per se but I find that it's worth the effort to avoid them if it's easy to do so.) Carl Banks -- http://mail.python.org/mailman/listinfo/python-list
