I thought I'd just kinda restate my problem from the ground up. Problem: Executing scripts through a Python other than the primary install on my ISPs machine. Conditions: 1. ISP has Python 1.4 installed at /usr/bin. 2. ISP has PyApache 2.25 compiled into Apache server for my domain (Virtual Host). 3. I have installed Python 1.5.2b2 into my home directory. (/home/c/change/local, with bin, lib, etc as it should be. 4. At command line, scripts execute correctly through my Python (I've set path to /home/c/change/local/bin:/usr/bin, etcetera (My notation, not literally "/etcetera" <grin>), so it finds the correct Python, executes environment script and returns everything correctly. 5. When executed through browser (through the Apache server, that is), no matter what I do, Python is either executed from /usr/bin or returns Internal Server Error. (I've tried explicitly stating absolute path to /home/c/change/local/bin/python, /usr/bin/env python, and for confirmation that tthe script is working, /usr/bin/python.) 6. I've also tried installing python in a local/ hierarchy in my cgi-bin and in my htdocs directories. (On a side note, if I could get one of these to work, should I worry about any security issues? They're both deleted now.) 7. I've tried directing python to execute through shell scripts as both .sh and .cgi, setting such paths and other environment variables as I thought prudent. The best I could accomplish was to get python to print (generate to the browser) the text within the '---' below, bypassing the Server Error by including an echo or two before calling python: --- Content-type: text/html </pre> Importing sys Done Importing sys Importing os --- I broke 'import sys,os' into two lines with print flags before and after because with just that line, all I got was: --- Content-type: text/html </pre> --- What I suspect this means is that the wrong python launched with the right sys.path. (Translation: Right: 1.5.2b2 in /home/... Wrong: 1.4 in /usr/...) If I add a 'print "Python %s" % sys.version' following sys import, I get: --- Importing sys Done Importing sys Python 1.4 (Feb 4 1997) [GCC 2.7.2.1] Importing os --- Summary: So, in a nutshell, I'm running in a 'virtual host' environment Apache with the PyApache 2.25 module compiled in. Apache does execute as my username. Apache does not seem to allow me to bypass PyApache (?) _or_ it won't consider (executable) paths not explicitly set somehow, even if executed as username through a shell. No matter where I try to direct execution, I end up with Python 1.4. (Now, This'll sound wonderfully naive, I'm sure, but my scripts to date have executed as #!sh, and the user shell variable used/set by Apache is csh. From all I understand, this should be irrelevant, but I wanna be sure. At this point, I'm rethinking everything I know about unix (linux) (which ain't all _that_ much, but I _had_ thought it was more than I'm realizing). Forgive if I seem to be rambling or missing the obvious. It's difficult to convey the level of my frustration in ascii. I've gone as far as setting 3 scripts calling each other before asking for python. At the moment, I have the two mentioned in Jeff's email (And thanks _again_ for all the help, Jeff!) running, with the added ...PYTHON variables to save typing between experiments. The current versions are listed below. Note that testcgi.cgi declares no #! I'm probably leaving out all sortsa relevant stuff, and/or missing something glaringly obvious, but hey, I'm tired, frustrated and kinda loopy at this point <grin>. Thanks Chris Larson ------------------------ Text of launchpad.cgi ---- #!/bin/sh PYTHONPATH=/home/c/change/local/lib/python1.5/test:/home/c/change/local/lib /python1.5/plat-linux2:/home/c/change/local/lib/python1.5/lib-tk:/home/c/ch ange/local/lib/python1.5/lib-dynload:/home/c/change/local/lib/python1.5/sit e-packages export PYTHONPATH PATH=/home/c/change/local/bin:/usr/local/bin:/bin:/usr/bin export PATH ENVPYTHON=/usr/bin/env python SYSPYTHON=/usr/bin/python MYPYTHON=/home/c/change/local/bin/python MYCGIBIN=/virtual/customer/changeling.com/cgi-bin $MYPYTHON < $MYCGIBIN/testcgi.cgi ---- Text of testcgi.cgi ---- #!$MYPYTHON print "Content-type: text/html" print print "<pre>" print "Importing sys" import sys print "Done Importing sys" print "Importing os" import os print "Done Importing os" print "<strong>Python %s</strong>" % sys.version for (x,y) in os.environ.items(): print "%s\t%s" % (x, y) print "</pre>" ----
participants (1)
-
Chris Larson