|
Graham Dumpleton
grahamd at dscpl.com.au
Wed Jul 12 07:14:28 EDT 2006
On 12/07/2006, at 6:47 PM, apocalypznow wrote:
> Module importing with mod_vampire is not working. I get one of
> several old copies of the python program I am importing!
>
> Here is the relevant section of my httpd.conf file:
> Alias /forums "/var/www/mod_python/forums"
> <Directory /var/www/mod_python/forums>
> SetHandler python-program
> PythonHandler vampire
> PythonDebug On
> Options -MultiViews -Indexes
> PythonPath "['/var/www/mod_python/lib','/var/www/mod_python/
> forums']+sys.path"
> PythonOption VampireImportHooks On
> </Directory>
>
> The python program in question "ticket.py" is in the /var/www/
> mod_python/lib folder. I have also moved it to the /var/www/
> mod_python/forums folder. The results are the same no matter where
> it is. The calling program is in the /var/www/mod_python/forums
> folder, and it does this:
>
> import ticket
> d = ticket.getData()
This is nothing to do with Vampire, it is how builtin Python "import"
behaves
in mod_python. Specifically, when you use "import" the module first
loaded
is the one that will be used thereafter. The reason you are seeing
several
old copies is most likely because you are using a version of Apache
running
with the prefork MPM and each request is being served by a different
Apache
child process and which has at different times loaded different
versions of
the module.
If the module the "import" is being done in is the top level handler
module
loaded by Vampire, instead of using "import" use:
ticket = vampire.importModule("ticket")
Vampire's module importer does not look in sys.path though, so if the
"ticket"
module is not in the same directory, you need to specify the path to
get the
module from.
ticket = vampire.importModule("ticket", path=["/some/directory"])
Directories which modules are imported from using Vampire module
loader should
not also be in sys.path as strange things can happen.
BTW, you should also read:
http://www.dscpl.com.au/articles/modpython-003.html
for general background information on problems with the module
importer in
mod_python.
Graham
|