Lipp, Wolfgang
w.lipp at bgbm.org
Mon Feb 16 10:00:17 EST 2004
i would like to briefly share my experiences with installing mod_python on a w2000 box. i must say that i believe the installation process to be unnecessarily complicated by the simple fact that the installer itself seems to be buggy -- in my case, no combination of mod_python 3.0.4, 3.1.2b and python 2.2.3, 2.3.3 ever came to completion. rather, the installer would exit -- after an initial declaration of having successfully found python in the registry -- with the words that it 'could not load python'. i now believe this may be due to python being absent from ``path`` and a missing value in ``pythonhome`` (see below), but on the other hand, all my other package installations with this particular installer brand had never given me any troubles. it would be a nice thing if the installer was smart enough to dispense some hints in such a case. it is important to check that the correct python version is selected for the respective version of mod_python -- as far as i can see, both 3.0.4 and 3.1.2b are built for python 2.3, which at least in the former case is not so clear from descriptions or filenames. whatever version you downloaded, you can quickly check this by 1) unpacking the ``*.exe`` file with a zip tool, 2) go to the contained folder ``DATA``, open the binary ``mod_python.so`` in any text editor, and 3) search for the string ``python2``. this should yield a single hit, from which you can glean the expected version of the python dll. since i never managed to finish the installation process with the installer, i think it is the best idea to then proceed like this: 1) simply grab that ``python_mod.so`` file and drop it in the ``apache/modules`` folder; likewise, go to the directory ``PURELIB/mod_python`` in the executable archive and copy it as ``python/Lib/site- packages/mod_python``. 2) in apaches ``httpd.conf``, do a test configuration like this:: # NB.: When setting an alias, both the alias # and the aliased location should end in a # slash or avoid it. Alias /mod_python0 "drive:/some/path/mod_python/test0" <Directory "drive:/some/path/mod_python/test0"> Options Indexes AddHandler python-program .py PythonHandler myhandler PythonDebug On </Directory> observe that ``.py`` does start with a dot -- this does not seem to be essential, though. one important point is that you had better make sure that python scripts are not declared as cgi scripts in a parent directory. if you absolutely need this, try later, but for the moment it is important to understand that the ``ExecCGI`` and the ``python-program`` declarations are enemies. -- restart apache (must be version 2, btw, afaics), either from the services management console, or, much better, from a terminal window by saying apache.exe -k restart (if you have your apache installed as a service). the terminal window method has the distinct advantage that any error messages due to problems with the httpd.conf do appear right in front of your eyes, instead of being silently swallowed by the system. of course, you can also simply start apache as an ordinary program with a line like :: apache -w -f drive:\path\to\apache\conf\httpd.conf 3) create .../mod_python/test0/myhandler.py and make it contain something like this:: # # -*- coding: utf-8 -*- from mod_python import apache def handler(req): req.content_type = "text/plain" req.write("Hello World!") return apache.OK observe that the ``import`` statement prohibits the execution of this snippet as a script, since it causes the import of a module that is only available from ``mod_python.so`` -- maybe someone can come up with a good idea how to make mod_python web scripts executable from the command line some day; developers will love that. 4) in case the directory where the pythonXX.dll is to be found should *not* appear on the environment variable ``path``, apache will refuse to start and issue the following message:: Cannot load drive/dir/Apache2/modules/mod_python.so into server: The specified module could not be found. this may be a problem with per-user python installations that put the dll into the python directory, not into the windows directory. 5) you also may want to consider setting the ``pythonhome`` environment variable -- while experimenting, this solved my problems in one case, but for some reason, i found myself unable to reproduce the behavior later. anyhow, you'd simply type :: set pythonhome=drive:\path\to\python or create an entry in ``autoexec.bat``, or set the variable in the system administration. 6) one user also mentioned insufficient access rights in the scripts directory as a potential cause of malfunction -- apache does ordinarily not run as a common user, but under a special account that must be granted execution access to the directories where you deploy your web application (i did not have his problem, but may be this is due to apache running with administrator rights, which is not a brilliant idea to boot). 7) enjoy. greetings, _wolf ps. i should add that one must make sure that sufficient rights are granted to whatever account the apache service is run under to read and execute not only in the web application directory, but also *in the python directory* -- i guess this point is easily missed. as a quick check whether this may be one of your problems (which normally results in the message ``could not import mod_python.apache`` in the apache errors log file) you can =either= temporarily set the apache service account to administrator (provided you have the rights to do so) =or=, alternatively, go to the python directory and grant the ``SYSTEM`` account execution rights. of course, this does not work on fat32 volumes. -- hope these tips in conjunction with my preceding posting help people fly their apps, -- _w
|