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()? ;-)
|