|
Martin MOKREJŠ
mmokrejs at ribosome.natur.cuni.cz
Mon Jul 4 19:52:06 EDT 2005
Graham Dumpleton wrote:
>
> On 05/07/2005, at 8:15 AM, Martin MOKREJŠ wrote:
>
>> Graham Dumpleton wrote:
>>
>>> Enable mod_python handler inside the context of a "Directory" directive
>>> and not at global scope within Apache configuration file.
>>> <Directory /home/mmokrejs/public_html/IRES2>
>>> AddHandler mod_python .py
>>> PythonHandler mod_python.publisher
>>> PythonDebug On
>>> </Directory>
>>> If web_settings is in that actual directory, it should then be found.
>>
>>
>> Well, you are right I have it at the moment in the "global scope".
>> I used to have it under the "Directory" directive. why doesn't that
>> approach work?
>
>
> If the PythonHandler directive appears at global scope or within the
> context of a Location directory, there is no relationship to a physical
> directory. When there is a relationship to a physical directory, then
> mod_python will add the root directory where PythonHandler is specified
> for automatically into the Python module search path.
>
> Having done this, if any publisher module uses the "import" statement
> explicitly to import a module where the module is in that root directory
> where PythonHandler was specified for, the module will be found okay.
>
> Note that this only applies for child modules in the root directory where
> PythonHandler directive was specified. If you had publisher modules in
> a subdirectory and it used "import" to get to a child module in the sub
> directory, it will not work as the subdirectory isn't added to the
> Python module search path.
>
> Because of problems with mixing "import" with the mod_python module
> loader, you are actually better of using:
>
> from mod_python import apache
> import os
>
> directory = os.path.dirname(__file__)
>
> web_settings = apache.import_module("web_settings",path=[directory])
>
> Here you are explicitly telling it which directory to get the module
> from and avoid all problems with things not being found in the Python
> module search path. You should only use this for loading in your own
> modules though, not standard Python modules.
Graham, how can I fork the code so that for normal "console" use it would do
normal import and that when running under mod_apache it would run this trick?
I use the modules also for command-line tests and some utilities.
What variable should I look for in __dict__.keys()? ;-)
|