One more thing, as much as I hate use of os.environ and
DJANGO_SETTINGS_MODULE, this could be avoided if the point which was
importing 'settings' instead did:

  settings = __import__(os.environ["DJANGO_SETTINGS_MODULE"])

That way it is ensuring that it is importing it via same dotted module
path name as core Django is.

Graham

On Mar 6, 9:57 am, Graham Dumpleton <[EMAIL PROTECTED]>
wrote:
> On Mar 6, 2:45 am, Thomas Guettler <[EMAIL PROTECTED]> wrote:
>
>
>
> > Malcolm Tredinnick schrieb:> On Wed, 2008-03-05 at 15:32 +0100, Thomas 
> > Guettler wrote:
> > > [...]
>
> > >> No, it gets imported more then once: (Answer of Malcolm):
> > >>http://www.mail-archive.com/[EMAIL PROTECTED]/msg39061.html
>
> > > Read that carefully and you'll see the answer I have was "maybe, I'm not
> > > sure" and it's only in some circumstances. I haven't done the analysis
> > > to work out if we do reimport as part of the modpython path, although I
> > > can't think why it would be reimporting.
>
> > I had this problem when I used mod_python. Now I use mod_wsgi and it
> > does not
> > happen. But if I run a test it still happens.
>
> > The first time __name__ is 'settings' and the second time it is
> > 'myproj_foo.settings'
>
> In which case it is because of the adding of both the parent directory
> and the project directory to sys.path, plus some module somewhere (not
> in project directory) importing just 'settings', instead of
> 'myproj_foo.settings'.
>
> People who always properly qualify module references in urls.py and
> elsewhere via the name of the project wouldn't have this problem. It
> is only where people try and write code which is somehow independent
> of the project name where it would be an issue.
>
> Graham
>
> > # added to settings.py
> > import datetime
> > import traceback
> > fd=open('/tmp/import-settings.log', 'a')
> > fd.write('%s settings gets imported __name__: %s\n%s' %
> > (datetime.datetime.now(), __name__, ''.join(traceback.format_stack())))
> > fd.close()
> > '''
>
> > # Command:
> > ./manage.py test myproj.ModifyTest.testFoo
>
> > ### output:
> > 2008-03-05 16:38:39.945759 settings gets imported __name__: settings
> >   File "./manage.py", line 4, in <module>
> >     import settings # Assumed to be in the same directory.
> >   File "/localhome/modw/myproj_foo/settings.py", line 148, in <module>
> >     fd.write('%s settings gets imported __name__: %s\n%s' %
> > (datetime.datetime.now(), __name__, ''.join(traceback.format_stack())))
> > 2008-03-05 16:38:39.950503 settings gets imported __name__:
> > myproj_foo.settings
> >   File "./manage.py", line 11, in <module>
> >     execute_manager(settings)
> >   File "/localhome/modw/myproj_foo/django/core/management/__init__.py",
> > line 272, in execute_manager
> >     utility.execute()
> >   File "/localhome/modw/myproj_foo/django/core/management/__init__.py",
> > line 219, in execute
> >     self.fetch_command(subcommand).run_from_argv(self.argv)
> >   File "/localhome/modw/myproj_foo/django/core/management/__init__.py",
> > line 172, in fetch_command
> >     app_name = get_commands(self.user_commands,
> > self.project_directory)[subcommand]
> >   File "/localhome/modw/myproj_foo/django/core/management/__init__.py",
> > line 86, in get_commands
> >     for app_name in settings.INSTALLED_APPS:
> >   File "/localhome/modw/myproj_foo/django/conf/__init__.py", line 28, in
> > __getattr__
> >     self._import_settings()
> >   File "/localhome/modw/myproj_foo/django/conf/__init__.py", line 59, in
> > _import_settings
> >     self._target = Settings(settings_module)
> >   File "/localhome/modw/myproj_foo/django/conf/__init__.py", line 85, in
> > __init__
> >     mod = __import__(self.SETTINGS_MODULE, {}, {}, [''])
> >   File "/localhome/modw/myproj_foo/settings.py", line 148, in <module>
> >     fd.write('%s settings gets imported __name__: %s\n%s' %
> > (datetime.datetime.now(), __name__, ''.join(traceback.format_stack())))
>
> > to Patryk: Look at your code again, it will never raise:
>
> > '''
> > imported = False
> > if imported:
> >     raise Exception, "already imported!"
> > ...
>
> > '''
>
> > --
> > Thomas Guettler,http://www.thomas-guettler.de/
> > E-Mail: guettli (*) thomas-guettler + de
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to