[Python-Dev] Improve Python for embedding
Guido van Rossum
guido at python.org
Mon Dec 22 15:03:40 EST 2003
> [Thomas Heller]
> >> I find the current situation when 'embedding' Python rather unsatisfying.
> [Guido van Rossum]
> > I'm interested in improve it. Can you explain what exactly your
> > 'embedding' requirements are?
> see below.
The only clue I find below is that you're trying to inmprove the error
reporting of pythonw.exe, which is certainly laudable, but hardly
qualifies as "embedding" IMO.
> >> 1. Careful preparation (hacking?) of environment variables is needed to
> >> avoid that Py_Initialize() takes the default actions needed for the
> >> standard Python interpreter (for example, to avoid the default sys.path).
> > I guess it depends on the embedding needs. Some embedded uses would
> > be quite happy with the default sys.path.
> Sure, but others not.
But the only use *you* are interested in is pythonw.exe?
> >> Possible improvements I currently can think of are:
> >> - Provide a function like Py_InitializeEx(), which accepts parameters
> >> specifying an initial sys.path, optimize flag, verbose flag, and so on.
> > Except for sys.path, you can set most flags directly before calling
> > Py_Initialize(), so I'm not sure if there's a need to pass these into
> > Py_Initialize().
> I want to specify the Python path before calling Py_Initialize(), and I
> don't want it to use *any* environment variables which (again) set the
> flags. So I thought of Py_InitializeEx() which would take parameters
> specifying these things, and Py_Initialize() could be changed to call
> Py_InitializeEx(NULL), maybe.
If you don't want the environment to be used, set the global
Py_IgnoreEnvironmentFlag before calling Py_Initialize().
> >> 2. A suggestion from /F on c.l.p was to change pythonw.exe so that
> >> instead of hiding all output to stderr a console window would be opened
> >> to show the tracebacks. This requires to construct an object with a
> >> 'write' method doing all this magic, and it must be done after the call
> >> to Py_Initialize() and before PyRun_SimpleFile(). Now, looking at the
> >> code of Py_Main(), it seems impossible without rewriting most of the
> >> code.
> > I'm not sure what this has to do with embedding -- can you clarify?
> The Python interpreter (dll) embedded into pythonw.exe ;-)
> >> - Split Py_Main() into 2 functions Py_Main_Prepare() and Py_Main_Run(),
> >> or let Py_Main() accept a callback function which will be called jsut
> >> after Py_Initialize() has been run.
> > OK, now I'm confused. If you're embedding Python, why would you be
> > using Py_Main() at all?
> I'm probably not good at explaining these things.
> I was thinking of pythonw.exe (WinMain.c). I want to create a Python
> object (an stderr writer), and assign this to sys.stderr, without
> changing too much code.
> Does it make more sense now?
Not quite -- I don't understand why *you* don't want the environment
variables to be used, if all you want is a better pythonw.exe.
If that's your only experience with embedding Python, you can't really
speak for other embedders.
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev