Running script in module initialization

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Feb 24 09:25:50 EST 2009


En Mon, 23 Feb 2009 05:51:27 -0200, Kom2 <kom2 at centrum.cz> escribió:

> On 20 Ún, 16:27, Steve Holden <st... at holdenweb.com> wrote:
>> Kom2 wrote:
>> > Hello,
>> > I'm trying to convert my project from python 2.5 to python 3.0 and I
>> > have the following problem. My project is PYD library written in C++.
>> > So I have this PyInit_ModuleName function containing PyModule_Create
>> > call and this function also call some script with declarations:
>>
>> >    PyObject* m;
>>
>> >    m = PyModule_Create(&PyVRDAModule);
>> >    if (m == NULL) {
>> >       return NULL;
>> >    }
>> >    PyObject *d, *v;
>> >    d = PyModule_GetDict(m);
>> >    v = PyRun_StringFlags(txtPyPredefinedConstants), Py_file_input, d,
>> > d, NULL);
>> >    ......
>>
>> > txtPyPredefinedConstants is string with this content:
>>
>> > class CursorMoveType:
>> >    First = 0
>> >    Last = 1
>> >    Next = 2
>> >    Previous = 3
>> >    Bookmark = 4
>> >    NewRecord = 5
>>
>> > In Python 2.5 everything works fine, now in python3.0
>> > PyRun_StringFlags returns NULL and I get error "__build_class__ not
>> > found".

__build_class__ is a (hidden?) function in the builtins module.
Your module isn't completely created yet, it lacks the __builtins__  
attribute, so you can't execute any Python code that calls a builtin  
function. In 2.5 the class statement was a lot simpler, but in 3.0 it  
requires an auxiliary function (implemented as builtins.__build_class__)
You may try setting __builtins__ to the current builtins  
(PyEval_GetBuiltins) before executing Python code.
Or, if those 7 lines are all you need, you may just write the equivalent C  
code.

-- 
Gabriel Genellina




More information about the Python-list mailing list