|
Graham Dumpleton
grahamd at dscpl.com.au
Mon Oct 24 23:27:46 EDT 2005
The sys.argv array isn't usually available when Python interpreters are
being embedded into a C/C++ program as is the case with mod_python.
I would suggest it is bad for a package to always assume that it will only
ever be used from standard "python" program exclusively.
A quick hack you can use to get around the problem is:
import sys
sys.argv = [ "mod_python" ]
import numarray
This issue with sys.argv has come up before recently. Was thinking at
the time whether mod_python when initialised should setup a bodgy
sys.argv to avoid these problems.
Graham
Patrik Jonsson wrote ..
> hi,
>
> I just started playing with mod_python and I have a problem importing
> the numarray module. it works fine from the command line, but not when
> executed through mod_python. I have the Publisher handler and a very
> basic script:
>
> "
> import numarray
> "
>
> This gives the following output:
>
> Mod_python error: "PythonHandler mod_python.publisher"
>
> Traceback (most recent call last):
>
> File "/usr/lib64/python2.4/site-packages/mod_python/apache.py", line
> 299, in HandlerDispatch
> result = object(req)
>
> File "/usr/lib64/python2.4/site-packages/mod_python/publisher.py",
> line 98, in handler
> path=[path])
>
> File "/usr/lib64/python2.4/site-packages/mod_python/apache.py", line
> 457, in import_module
> module = imp.load_module(mname, f, p, d)
>
> File "/home/www/patrik/simulations/junk.py", line 1, in ?
> import numarray
>
> File "/usr/lib64/python2.4/site-packages/numarray/__init__.py", line
> 42, in ?
> from numarrayall import *
>
> File "/usr/lib64/python2.4/site-packages/numarray/numarrayall.py",
> line 1, in ?
> from numerictypes import *
>
> File "/usr/lib64/python2.4/site-packages/numarray/numerictypes.py",
> line 390, in ?
> from codegenerator.ufunccode import typecode
>
> File
> "/usr/lib64/python2.4/site-packages/numarray/codegenerator/__init__.py",
> line 1, in ?
> from basecode import all_types
>
> File
> "/usr/lib64/python2.4/site-packages/numarray/codegenerator/basecode.py",
> line 20, in ?
> if hasUInt64():
>
> File
> "/usr/lib64/python2.4/site-packages/numarray/codegenerator/basecode.py",
> line 11, in hasUInt64
> return "--hasUInt64" in sys.argv
>
> AttributeError: 'module' object has no attribute 'argv'
>
>
>
>
> This looks like sys.argv doesn't exist from within mod_python? I agree
> this information probably isn't useful in this context, but since all
> documentation I've seen says that sys.argv is defined, it seems bad to
> break existing software that relies on its existence. Shouldn't it just
> be [''] like it is when you run the interpreter from the command line?
>
> Incidentally, if I reload the page, I get instead:
>
> Mod_python error: "PythonHandler mod_python.publisher"
>
> Traceback (most recent call last):
>
> File "/usr/lib64/python2.4/site-packages/mod_python/apache.py", line
> 299, in HandlerDispatch
> result = object(req)
>
> File "/usr/lib64/python2.4/site-packages/mod_python/publisher.py",
> line 98, in handler
> path=[path])
>
> File "/usr/lib64/python2.4/site-packages/mod_python/apache.py", line
> 457, in import_module
> module = imp.load_module(mname, f, p, d)
>
> File "/home/www/patrik/simulations/junk.py", line 1, in ?
> import numarray
>
> File "/usr/lib64/python2.4/site-packages/numarray/__init__.py", line
> 42, in ?
> from numarrayall import *
>
> File "/usr/lib64/python2.4/site-packages/numarray/numarrayall.py",
> line 1, in ?
> from numerictypes import *
>
> File "/usr/lib64/python2.4/site-packages/numarray/numerictypes.py",
> line 168, in ?
> Byte = _register("Byte", Int8)
>
> File "/usr/lib64/python2.4/site-packages/numarray/numerictypes.py",
> line 68, in _register
> raise ValueError("Type %s has already been registered" % name)
>
> ValueError: Type Byte has already been registered
>
>
>
> If anyone has any ideas on how to fix this, I'd much appreciate it!
>
> Thanks,
>
> /Patrik
|