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

Reply via email to