Graham Dumpleton wrote:
> On Jul 6, 2:59 pm, John-Scott <[EMAIL PROTECTED]> wrote:
>> On Jul 6, 12:29 am, Graham Dumpleton <[EMAIL PROTECTED]>
>> wrote:
>>
>>> Hmmm, I'm not sure the documentation is actually accurate. When you
>>> use manage.py to run up development server for Django, it will
>>> automatically add the parent directory of where the manage.py file is
>>> located into sys.path for you. Thus, there isn't strictly a need to
>>> add it to PYTHONPATH to get it to work in the first place.
>>> So, the answer is that YES, for mod_python you must use the PythonPath
>>> directive to specify the parent directory of where manage.py is
>>> located in order for your settings file to be found correctly.
>>> Graham
>> Graham - I was suspicious of that. I remember reading that manage.py
>> took care of setting all the environment variables for the development
>> server and interactive shell. But it didn't seem possible for
>> mod_python to have any idea where our projects are implicitly. Should
>> we file a doc bug?
> 
> Someone can correct me, but I think it gets a bit more confusing than
> that, so there is possibly other changes which should be made to the
> mod_python documentation.
> 
> When using manage.py it imports settings.py explicitly, thus there is
> no need to define DJANGO_SETTINGS_MODULE like with mod_python to say
> what the actual settings module name is. At this point though, only
> the directory containing manage.py is effectively in sys.path. This
> would mean that where you have in urls.py:
> 
>   (r'^mysite1/', include('mysite1.apps.foo.urls.foo')),
> 
> it would actually fail to find the referenced module.
> 
> In searching through Django, the only place it adds the parent
> directory to sys.path so that it might find that referenced module is:
> 
> def setup_environ(settings_mod):
>     """
>     Configure the runtime environment. This can also be used by
> external
>     scripts wanting to set up a similar environment to manage.py.
>     """
>     # Add this project to sys.path so that it's importable in the
> conventional
>     # way. For example, if this file (manage.py) lives in a directory
>     # "myproject", this code would add "/path/to/myproject" to
> sys.path.
>     project_directory = os.path.dirname(settings_mod.__file__)
>     project_name = os.path.basename(project_directory)
>     sys.path.append(os.path.join(project_directory, '..'))
>     project_module = __import__(project_name, {}, {}, [''])
>     sys.path.pop()
> 
> If you look carefully, what it does is append the parent directory to
> sys.path and imports the name of the site directory itself. This has
> the effect of importing the __init__.py in the site directory. It then
> removes the parent directory from sys.path.
> 
> Even though it has removed the parent directory from sys.path, the
> import of the module referenced in urls.py by the site name still
> works because of the presence of the 'mysite1' module in sys.modules.
> Ie., Python sees that module, works out from __file__ of the module
> where it is located and searches for the submodule relative to that
> directory.
> 
> So, importing modules by site package root is okay, but problem is
> that the site directory itself is still in sys.path. This means one
> can actually do:
> 
>   (r'^mysite1/', include('apps.foo.urls.foo')),
> 
> Ie., one can leave out the site name in the module path and it will
> still work.
> 
> Some people do imports this way as it means that if you rename the
> site you don't have to change the urls.py file. Also, easier to
> develop reusable components that you can copy from one project to
> another.
> 
> The problem with this is that if an application which uses these
> imports without the site name in them is hosted on mod_python, it will
> not work. This is because not only do you have to set PythonPath to
> include the parent directory of the site, you also have to list the
> site directory path itself. Ie.,
> 
>   PythonPath "['/path/to/parent','/path/to/parent/mysite1'] +
> sys.path"

"will not work" is alarming, but then you say "also have to..." which makes me 
think it will work.  so only problem is PythonPath having an extra entry, right?

I have been developing my site under the impression that  whatever works with 
./manage.py runserver will work with mod_python without having to touch 'the 
app' (I expect to have to touch httpd.conf files.)

Personally, I am not trilled by some of the search path behavior, but the root 
of that is native python, and so as long as django's behavior is somewhat 
consistent with Python's, I will live with it.   If there is something that 
strays too far and is causing problems, I may get fanatical about it.
I setup

> 
> I am not sure this is clearly mentioned in the mod_python document for
> Django or not.
> 
> Certainly, the need to do this is explained on the mailing list every
> so often, so there must be some confusion about it.

I setup a mod_python server last week, and it did seem like the docs were not 
as 
straight forward as they should be.  my feeling was "you probably should do X 
and Y and maybe Z" when it should be worded "you probably should do X, Y and Z" 
  and some explanation why Z could be optional.  I will be doing it again next 
week and will post something a bit more definitive.

Carl K

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@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-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to