Quantcast

embedded python ?

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

embedded python ?

mad city
Just starting out with boost-python. I have a python script that I want to call from C++ code. I have the quickstart example working. I'm running into a problem. The python script I'm calling includes import statements - for example 'import os', and these are causing an exception

ImportError: __import__ not found  

How do I resolve?

_______________________________________________
Cplusplus-sig mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/cplusplus-sig
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: embedded python ?

Stefan Seefeld
mad city wrote:
> Just starting out with boost-python. I have a python script that I
> want to call from C++ code. I have the quickstart example working. I'm
> running into a problem. The python script I'm calling includes import
> statements - for example 'import os', and these are causing an exception
>
> ImportError: __import__ not found  

Not having seen your code, I'd suggest you start by looking at the
existing tests that use the functionality you want. In this case, this
means the 'import' and 'exec' tests in boost/libs/python/test.

It's generally most likely to get help if you provide some details, such
as a chunk of code that we could run to reproduce the issue.

Regards,
       Stefan

--

      ...ich hab' noch einen Koffer in Berlin...

_______________________________________________
Cplusplus-sig mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/cplusplus-sig
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: embedded python ?

mad city
Thanks. Good advice.

From the quickstart project, the embedded.cpp file function


void exec_file_test(std::string const &script)
{
    std::cout << "running file " << script << "..." << std::endl;
   
    // Run a python script in an empty environment.
    python::dict global;
    python::object result = python::exec_file(script.c_str(), global, global);

    // Extract an object the script stored in the global dictionary.
    BOOST_TEST(python::extract<int>(global["number"]) ==  42);
   
    std::cout << "success!" << std::endl;
}

calls my python script file - parseLogs.py which starts with

import os.path
import stat
import csv
import re
import pickle
import operator
import time
import msvcrt
from optparse import OptionParser
import sys

The 'import' call throws the exception - ImportError: __import__ not found. I'm looking into the PyInitialize() and how the interpreter gets loaded.

Thanks.



On Fri, Apr 3, 2009 at 1:55 PM, Stefan Seefeld <[hidden email]> wrote:
mad city wrote:
Just starting out with boost-python. I have a python script that I want to call from C++ code. I have the quickstart example working. I'm running into a problem. The python script I'm calling includes import statements - for example 'import os', and these are causing an exception

ImportError: __import__ not found  

Not having seen your code, I'd suggest you start by looking at the existing tests that use the functionality you want. In this case, this means the 'import' and 'exec' tests in boost/libs/python/test.

It's generally most likely to get help if you provide some details, such as a chunk of code that we could run to reproduce the issue.

Regards,
     Stefan

--

    ...ich hab' noch einen Koffer in Berlin...

_______________________________________________
Cplusplus-sig mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/cplusplus-sig


_______________________________________________
Cplusplus-sig mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/cplusplus-sig
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: embedded python ?

troy d. straszheim
mad city wrote:

> Thanks. Good advice.
>
>  From the quickstart project, the embedded.cpp file function
>
>
> void exec_file_test(std::string const &script)
> {
>     std::cout << "running file " << script << "..." << std::endl;
>    
>     // Run a python script in an empty environment.
>     python::dict global;
>     python::object result = python::exec_file(script.c_str(), global,
> global);
>
>     // Extract an object the script stored in the global dictionary.
>     BOOST_TEST(python::extract<int>(global["number"]) ==  42);
>    
>     std::cout << "success!" << std::endl;
> }
>
> calls my python script file - parseLogs.py which starts with

try something like this.  When you exec the file you have to supply a
globals dictionary that contains whatever globals you want to use (like
import)

     Py_Initialize();

     bp::object main = bp::import("__main__");
     bp::object py_ = main.attr("__dict__");
     bp::exec_file("conf.py", py_, py_);
     int = bp::extract<int>(py_["some_int_is_here"];

-t
_______________________________________________
Cplusplus-sig mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/cplusplus-sig
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: embedded python ?

Stefan Seefeld
In reply to this post by mad city
mad city wrote:

> Thanks. Good advice.
>
> From the quickstart project, the embedded.cpp file function
>
>
> void exec_file_test(std::string const &script)
> {
>     std::cout << "running file " << script << "..." << std::endl;
>    
>     // Run a python script in an empty environment.
>     python::dict global;
>     python::object result = python::exec_file(script.c_str(), global,
> global);

I'm not sure who suggested this, but I don't think this works, if the
script runs anything interesting, as the builtin stuff is missing. (See
the other mail for how to do it right.)

Thanks,
       Stefan


--

      ...ich hab' noch einen Koffer in Berlin...

_______________________________________________
Cplusplus-sig mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/cplusplus-sig
Loading...