Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

MOD_PYTHON + packages reloading

0 views
Skip to first unread message

lukas...@gmail.com

unread,
Oct 18, 2007, 4:06:06 AM10/18/07
to
Hello,

I came across annoying problem during my fun with mod_python. I turned
out that mod_python load package only onca and don't care about any
changes to it. Obviously it makes sense on production server but
during development is more then annoying. I find a way to reload my
module:

m = apache.import_module(name)
reload(m)

But this solution doesn't satisfy my. Is there any way to use old good
import x.x.x or from x.x.x import y and somehow set mod_python to
autoreload packages? apache.import_module(name,autoreload=1) didn't
work.
What is more interesting if a file is in the same directory (no in the
package) i don't need to wory about reloading, python doesn't cache
it.

Please help me :)

Duncan Booth

unread,
Oct 18, 2007, 4:55:27 AM10/18/07
to
lukas...@gmail.com wrote:

> I came across annoying problem during my fun with mod_python. I turned
> out that mod_python load package only onca and don't care about any
> changes to it. Obviously it makes sense on production server but
> during development is more then annoying.

Have you read the mod_python manual?

http://www.modpython.org/live/current/doc-html/dir-other-par.html

5.4.8 PythonAutoReload

Syntax: PythonAutoReload {On, Off}
Default: PythonAutoReload On
Context: server config, virtual host, directory, htaccess
Override: not None
Module: mod_python.c

If set to Off, instructs mod_python not to check the modification date
of the module file.

By default, mod_python checks the time-stamp of the file and reloads the
module if the module's file modification date is later than the last
import or reload. This way changed modules get automatically reimported,
eliminating the need to restart the server for every change.

Disabling autoreload is useful in production environment where the
modules do not change; it will save some processing time and give a
small performance gain.

lukas...@gmail.com

unread,
Oct 18, 2007, 5:21:18 AM10/18/07
to
On 18 Oct, 09:55, Duncan Booth <duncan.bo...@invalid.invalid> wrote:

Yes I have read it. This is my config file
<VirtualHost *:80>
ServerName info
DocumentRoot D:/web/info/
<Directory "D:/web/info/">
AddHandler mod_python .py
PythonHandler index
PythonDebug On
PythonAutoReload On
AllowOverride All
Allow from All
AllowOverride All
</Directory>
</VirtualHost>

Even when autoreload is ON mod_python doesn't care about any changes
if I import something from package in traditional way :(

Graham Dumpleton

unread,
Oct 18, 2007, 7:08:10 AM10/18/07
to
On Oct 18, 6:55 pm, Duncan Booth <duncan.bo...@invalid.invalid> wrote:

Have you read the other document:

http://www.modpython.org/live/current/doc-html/pyapi-apmeth.html

In particular read the documentation for the import_module() function.
It clearly describes in what limited cases module reloading is
performed. It does not do it for all modules as many mistakenly
believe. It does not do any form of module reloading on Python
packages because it is impossible to do properly due to the fact that
cyclic dependencies can occur with how packages are generally
structured.

For a description of some of the issues and why mod_python 3.3 works
like it does, see the big list of problems related to module reloading
in older versions of mod_python:

http://www.dscpl.com.au/wiki/ModPython/Articles/ModuleImportingIsBroken

So, what is in 3.3 as described in documentation for import_module()
is as good as it gets. As long as you work within the constraints it
imposes you can go a long way, but don't expect miracles.

Graham

0 new messages