Hi all,
I have a Python class and methods that I want to call from Perl.
My test script works fine, executed as me. The _Inline directory is created and
the Python module is imported and calls to the Python methods from Perl work as
expected.
The Python module itself is in another directory which is listed in the
PYTHONPATH shell environment variable. It would seem that the Python
interpreter indeed uses PYTHONPATH to find the location of the module, when the
parent script is executed as myself.
When I place the same Perl code in the codebase that it will execute in, run by
Apache, the method py_eval, called from the load method in Inline::Python,
fails to find the python module. Adding a declaration of PYTHONPATH in the
Perl code to include the directory where the python module is located did no
good.
I did have to specify the directory where _Inline should be located, and I made
that owned by Apache (www). That part worked.
Here is a snippet of the Perl code:
package X::Y::Z::Core;
... other use statements and comments...
use Inline::Files;
use Inline (Python => 'file', directory => '/tmp/_Inline');
use Inline::Python;
... lots of other Perl statements
my $pyobj = VSO_WS->new();
$pyobj->{'dbquery'} = $block;
$query = $pyobj->get_data();
... more processing statements
____PYTHON__
from VSO import VSO_WS
Here is the error I see in the Apache log file:
Traceback (most recent call last):
File "<string>", line 2, in <module>
ImportError: No module named VSO
Error -- py_eval raised an exception at
/Library/Perl/5.8.6/darwin-thread-multi-2level/Inline/Python.pm line 221.
I could place all the Python code in the __PYTHON__ section, but I would prefer
to keep it in a separate module VSO.py
Any ideas on getting the Python interpreter to find my Python module would be
greatly appreciated.
Thanks,
--Ed