blob: d84b654757669ef9320012108fca798cd0069397 [file] [log] [blame]
Fred Drake3adf79e2001-10-12 19:01:43 +00001\chapter{Introduction \label{intro}}
2
3
4The Application Programmer's Interface to Python gives C and
5\Cpp{} programmers access to the Python interpreter at a variety of
Fred Drakec37b65e2001-11-28 07:26:15 +00006levels. The API is equally usable from \Cpp, but for brevity it is
Fred Drake3adf79e2001-10-12 19:01:43 +00007generally referred to as the Python/C API. There are two
8fundamentally different reasons for using the Python/C API. The first
9reason is to write \emph{extension modules} for specific purposes;
10these are C modules that extend the Python interpreter. This is
11probably the most common use. The second reason is to use Python as a
12component in a larger application; this technique is generally
13referred to as \dfn{embedding} Python in an application.
14
15Writing an extension module is a relatively well-understood process,
16where a ``cookbook'' approach works well. There are several tools
17that automate the process to some extent. While people have embedded
18Python in other applications since its early existence, the process of
19embedding Python is less straightforward than writing an extension.
20
21Many API functions are useful independent of whether you're embedding
22or extending Python; moreover, most applications that embed Python
23will need to provide a custom extension as well, so it's probably a
24good idea to become familiar with writing an extension before
25attempting to embed Python in a real application.
26
27
28\section{Include Files \label{includes}}
29
30All function, type and macro definitions needed to use the Python/C
31API are included in your code by the following line:
32
33\begin{verbatim}
34#include "Python.h"
35\end{verbatim}
36
37This implies inclusion of the following standard headers:
38\code{<stdio.h>}, \code{<string.h>}, \code{<errno.h>},
39\code{<limits.h>}, and \code{<stdlib.h>} (if available).
Fred Drake34c43202004-03-31 07:45:46 +000040
41\begin{notice}[warning]
42 Since Python may define some pre-processor definitions which affect
43 the standard headers on some systems, you \emph{must} include
44 \file{Python.h} before any standard headers are included.
45\end{notice}
Fred Drake3adf79e2001-10-12 19:01:43 +000046
47All user visible names defined by Python.h (except those defined by
48the included standard headers) have one of the prefixes \samp{Py} or
49\samp{_Py}. Names beginning with \samp{_Py} are for internal use by
50the Python implementation and should not be used by extension writers.
51Structure member names do not have a reserved prefix.
52
53\strong{Important:} user code should never define names that begin
54with \samp{Py} or \samp{_Py}. This confuses the reader, and
55jeopardizes the portability of the user code to future Python
56versions, which may define additional names beginning with one of
57these prefixes.
58
59The header files are typically installed with Python. On \UNIX, these
60are located in the directories
61\file{\envvar{prefix}/include/python\var{version}/} and
62\file{\envvar{exec_prefix}/include/python\var{version}/}, where
63\envvar{prefix} and \envvar{exec_prefix} are defined by the
64corresponding parameters to Python's \program{configure} script and
65\var{version} is \code{sys.version[:3]}. On Windows, the headers are
66installed in \file{\envvar{prefix}/include}, where \envvar{prefix} is
67the installation directory specified to the installer.
68
69To include the headers, place both directories (if different) on your
70compiler's search path for includes. Do \emph{not} place the parent
71directories on the search path and then use
72\samp{\#include <python\shortversion/Python.h>}; this will break on
73multi-platform builds since the platform independent headers under
74\envvar{prefix} include the platform specific headers from
75\envvar{exec_prefix}.
76
77\Cpp{} users should note that though the API is defined entirely using
78C, the header files do properly declare the entry points to be
79\code{extern "C"}, so there is no need to do anything special to use
80the API from \Cpp.
81
82
83\section{Objects, Types and Reference Counts \label{objects}}
84
85Most Python/C API functions have one or more arguments as well as a
86return value of type \ctype{PyObject*}. This type is a pointer
87to an opaque data type representing an arbitrary Python
88object. Since all Python object types are treated the same way by the
89Python language in most situations (e.g., assignments, scope rules,
90and argument passing), it is only fitting that they should be
91represented by a single C type. Almost all Python objects live on the
92heap: you never declare an automatic or static variable of type
93\ctype{PyObject}, only pointer variables of type \ctype{PyObject*} can
94be declared. The sole exception are the type objects\obindex{type};
95since these must never be deallocated, they are typically static
96\ctype{PyTypeObject} objects.
97
98All Python objects (even Python integers) have a \dfn{type} and a
99\dfn{reference count}. An object's type determines what kind of object
100it is (e.g., an integer, a list, or a user-defined function; there are
101many more as explained in the \citetitle[../ref/ref.html]{Python
102Reference Manual}). For each of the well-known types there is a macro
103to check whether an object is of that type; for instance,
104\samp{PyList_Check(\var{a})} is true if (and only if) the object
105pointed to by \var{a} is a Python list.
106
107
108\subsection{Reference Counts \label{refcounts}}
109
110The reference count is important because today's computers have a
111finite (and often severely limited) memory size; it counts how many
112different places there are that have a reference to an object. Such a
113place could be another object, or a global (or static) C variable, or
114a local variable in some C function. When an object's reference count
115becomes zero, the object is deallocated. If it contains references to
116other objects, their reference count is decremented. Those other
117objects may be deallocated in turn, if this decrement makes their
118reference count become zero, and so on. (There's an obvious problem
119with objects that reference each other here; for now, the solution is
120``don't do that.'')
121
122Reference counts are always manipulated explicitly. The normal way is
123to use the macro \cfunction{Py_INCREF()}\ttindex{Py_INCREF()} to
124increment an object's reference count by one, and
125\cfunction{Py_DECREF()}\ttindex{Py_DECREF()} to decrement it by
126one. The \cfunction{Py_DECREF()} macro is considerably more complex
127than the incref one, since it must check whether the reference count
128becomes zero and then cause the object's deallocator to be called.
129The deallocator is a function pointer contained in the object's type
130structure. The type-specific deallocator takes care of decrementing
131the reference counts for other objects contained in the object if this
132is a compound object type, such as a list, as well as performing any
133additional finalization that's needed. There's no chance that the
134reference count can overflow; at least as many bits are used to hold
135the reference count as there are distinct memory locations in virtual
136memory (assuming \code{sizeof(long) >= sizeof(char*)}). Thus, the
137reference count increment is a simple operation.
138
139It is not necessary to increment an object's reference count for every
140local variable that contains a pointer to an object. In theory, the
141object's reference count goes up by one when the variable is made to
142point to it and it goes down by one when the variable goes out of
143scope. However, these two cancel each other out, so at the end the
144reference count hasn't changed. The only real reason to use the
145reference count is to prevent the object from being deallocated as
146long as our variable is pointing to it. If we know that there is at
147least one other reference to the object that lives at least as long as
148our variable, there is no need to increment the reference count
149temporarily. An important situation where this arises is in objects
150that are passed as arguments to C functions in an extension module
151that are called from Python; the call mechanism guarantees to hold a
152reference to every argument for the duration of the call.
153
154However, a common pitfall is to extract an object from a list and
155hold on to it for a while without incrementing its reference count.
156Some other operation might conceivably remove the object from the
157list, decrementing its reference count and possible deallocating it.
158The real danger is that innocent-looking operations may invoke
159arbitrary Python code which could do this; there is a code path which
160allows control to flow back to the user from a \cfunction{Py_DECREF()},
161so almost any operation is potentially dangerous.
162
163A safe approach is to always use the generic operations (functions
164whose name begins with \samp{PyObject_}, \samp{PyNumber_},
165\samp{PySequence_} or \samp{PyMapping_}). These operations always
166increment the reference count of the object they return. This leaves
167the caller with the responsibility to call
168\cfunction{Py_DECREF()} when they are done with the result; this soon
169becomes second nature.
170
171
172\subsubsection{Reference Count Details \label{refcountDetails}}
173
174The reference count behavior of functions in the Python/C API is best
Martin v. Löwis5ce2fec2003-11-06 21:08:11 +0000175explained in terms of \emph{ownership of references}. Ownership
176pertains to references, never to objects (objects are not owned: they
177are always shared). "Owning a reference" means being responsible for
178calling Py_DECREF on it when the reference is no longer needed.
179Ownership can also be transferred, meaning that the code that receives
180ownership of the reference then becomes responsible for eventually
181decref'ing it by calling \cfunction{Py_DECREF()} or
Georg Brandl4caeff92006-02-18 22:55:59 +0000182\cfunction{Py_XDECREF()} when it's no longer needed---or passing on
Martin v. Löwis5ce2fec2003-11-06 21:08:11 +0000183this responsibility (usually to its caller).
184When a function passes ownership of a reference on to its caller, the
Fred Drake3adf79e2001-10-12 19:01:43 +0000185caller is said to receive a \emph{new} reference. When no ownership
186is transferred, the caller is said to \emph{borrow} the reference.
187Nothing needs to be done for a borrowed reference.
188
189Conversely, when a calling function passes it a reference to an
190object, there are two possibilities: the function \emph{steals} a
Georg Brandl4caeff92006-02-18 22:55:59 +0000191reference to the object, or it does not. \emph{Stealing a reference}
192means that when you pass a reference to a function, that function
193assumes that it now owns that reference, and you are not responsible
194for it any longer.
195
196Few functions steal references; the two notable exceptions are
Fred Drake3adf79e2001-10-12 19:01:43 +0000197\cfunction{PyList_SetItem()}\ttindex{PyList_SetItem()} and
198\cfunction{PyTuple_SetItem()}\ttindex{PyTuple_SetItem()}, which
199steal a reference to the item (but not to the tuple or list into which
200the item is put!). These functions were designed to steal a reference
201because of a common idiom for populating a tuple or list with newly
202created objects; for example, the code to create the tuple \code{(1,
2032, "three")} could look like this (forgetting about error handling for
204the moment; a better way to code this is shown below):
205
206\begin{verbatim}
207PyObject *t;
208
209t = PyTuple_New(3);
210PyTuple_SetItem(t, 0, PyInt_FromLong(1L));
211PyTuple_SetItem(t, 1, PyInt_FromLong(2L));
212PyTuple_SetItem(t, 2, PyString_FromString("three"));
213\end{verbatim}
214
Georg Brandl4caeff92006-02-18 22:55:59 +0000215Here, \cfunction{PyInt_FromLong()} returns a new reference which is
216immediately stolen by \cfunction{PyTuple_SetItem()}. When you want to
217keep using an object although the reference to it will be stolen,
218use \cfunction{Py_INCREF()} to grab another reference before calling the
219reference-stealing function.
220
Fred Drake3adf79e2001-10-12 19:01:43 +0000221Incidentally, \cfunction{PyTuple_SetItem()} is the \emph{only} way to
222set tuple items; \cfunction{PySequence_SetItem()} and
223\cfunction{PyObject_SetItem()} refuse to do this since tuples are an
224immutable data type. You should only use
225\cfunction{PyTuple_SetItem()} for tuples that you are creating
226yourself.
227
228Equivalent code for populating a list can be written using
229\cfunction{PyList_New()} and \cfunction{PyList_SetItem()}. Such code
230can also use \cfunction{PySequence_SetItem()}; this illustrates the
231difference between the two (the extra \cfunction{Py_DECREF()} calls):
232
233\begin{verbatim}
234PyObject *l, *x;
235
236l = PyList_New(3);
237x = PyInt_FromLong(1L);
238PySequence_SetItem(l, 0, x); Py_DECREF(x);
239x = PyInt_FromLong(2L);
240PySequence_SetItem(l, 1, x); Py_DECREF(x);
241x = PyString_FromString("three");
242PySequence_SetItem(l, 2, x); Py_DECREF(x);
243\end{verbatim}
244
245You might find it strange that the ``recommended'' approach takes more
246code. However, in practice, you will rarely use these ways of
247creating and populating a tuple or list. There's a generic function,
248\cfunction{Py_BuildValue()}, that can create most common objects from
249C values, directed by a \dfn{format string}. For example, the
250above two blocks of code could be replaced by the following (which
251also takes care of the error checking):
252
253\begin{verbatim}
254PyObject *t, *l;
255
256t = Py_BuildValue("(iis)", 1, 2, "three");
257l = Py_BuildValue("[iis]", 1, 2, "three");
258\end{verbatim}
259
260It is much more common to use \cfunction{PyObject_SetItem()} and
261friends with items whose references you are only borrowing, like
262arguments that were passed in to the function you are writing. In
263that case, their behaviour regarding reference counts is much saner,
264since you don't have to increment a reference count so you can give a
265reference away (``have it be stolen''). For example, this function
266sets all items of a list (actually, any mutable sequence) to a given
267item:
268
269\begin{verbatim}
Fred Drake847c51a2001-10-25 15:53:44 +0000270int
271set_all(PyObject *target, PyObject *item)
Fred Drake3adf79e2001-10-12 19:01:43 +0000272{
273 int i, n;
274
275 n = PyObject_Length(target);
276 if (n < 0)
277 return -1;
278 for (i = 0; i < n; i++) {
279 if (PyObject_SetItem(target, i, item) < 0)
280 return -1;
281 }
282 return 0;
283}
284\end{verbatim}
285\ttindex{set_all()}
286
287The situation is slightly different for function return values.
288While passing a reference to most functions does not change your
289ownership responsibilities for that reference, many functions that
Raymond Hettinger68804312005-01-01 00:28:46 +0000290return a reference to an object give you ownership of the reference.
Fred Drake3adf79e2001-10-12 19:01:43 +0000291The reason is simple: in many cases, the returned object is created
292on the fly, and the reference you get is the only reference to the
293object. Therefore, the generic functions that return object
294references, like \cfunction{PyObject_GetItem()} and
295\cfunction{PySequence_GetItem()}, always return a new reference (the
296caller becomes the owner of the reference).
297
298It is important to realize that whether you own a reference returned
299by a function depends on which function you call only --- \emph{the
Neal Norwitz7decf5e2003-10-13 17:47:30 +0000300plumage} (the type of the object passed as an
Fred Drake3adf79e2001-10-12 19:01:43 +0000301argument to the function) \emph{doesn't enter into it!} Thus, if you
302extract an item from a list using \cfunction{PyList_GetItem()}, you
303don't own the reference --- but if you obtain the same item from the
304same list using \cfunction{PySequence_GetItem()} (which happens to
305take exactly the same arguments), you do own a reference to the
306returned object.
307
308Here is an example of how you could write a function that computes the
309sum of the items in a list of integers; once using
310\cfunction{PyList_GetItem()}\ttindex{PyList_GetItem()}, and once using
311\cfunction{PySequence_GetItem()}\ttindex{PySequence_GetItem()}.
312
313\begin{verbatim}
Fred Drake847c51a2001-10-25 15:53:44 +0000314long
315sum_list(PyObject *list)
Fred Drake3adf79e2001-10-12 19:01:43 +0000316{
317 int i, n;
318 long total = 0;
319 PyObject *item;
320
321 n = PyList_Size(list);
322 if (n < 0)
323 return -1; /* Not a list */
324 for (i = 0; i < n; i++) {
325 item = PyList_GetItem(list, i); /* Can't fail */
326 if (!PyInt_Check(item)) continue; /* Skip non-integers */
327 total += PyInt_AsLong(item);
328 }
329 return total;
330}
331\end{verbatim}
332\ttindex{sum_list()}
333
334\begin{verbatim}
Fred Drake847c51a2001-10-25 15:53:44 +0000335long
336sum_sequence(PyObject *sequence)
Fred Drake3adf79e2001-10-12 19:01:43 +0000337{
338 int i, n;
339 long total = 0;
340 PyObject *item;
341 n = PySequence_Length(sequence);
342 if (n < 0)
343 return -1; /* Has no length */
344 for (i = 0; i < n; i++) {
345 item = PySequence_GetItem(sequence, i);
346 if (item == NULL)
347 return -1; /* Not a sequence, or other failure */
348 if (PyInt_Check(item))
349 total += PyInt_AsLong(item);
350 Py_DECREF(item); /* Discard reference ownership */
351 }
352 return total;
353}
354\end{verbatim}
355\ttindex{sum_sequence()}
356
357
358\subsection{Types \label{types}}
359
360There are few other data types that play a significant role in
361the Python/C API; most are simple C types such as \ctype{int},
362\ctype{long}, \ctype{double} and \ctype{char*}. A few structure types
363are used to describe static tables used to list the functions exported
364by a module or the data attributes of a new object type, and another
365is used to describe the value of a complex number. These will
366be discussed together with the functions that use them.
367
368
369\section{Exceptions \label{exceptions}}
370
371The Python programmer only needs to deal with exceptions if specific
372error handling is required; unhandled exceptions are automatically
373propagated to the caller, then to the caller's caller, and so on, until
374they reach the top-level interpreter, where they are reported to the
375user accompanied by a stack traceback.
376
377For C programmers, however, error checking always has to be explicit.
378All functions in the Python/C API can raise exceptions, unless an
379explicit claim is made otherwise in a function's documentation. In
380general, when a function encounters an error, it sets an exception,
381discards any object references that it owns, and returns an
382error indicator --- usually \NULL{} or \code{-1}. A few functions
383return a Boolean true/false result, with false indicating an error.
384Very few functions return no explicit error indicator or have an
385ambiguous return value, and require explicit testing for errors with
386\cfunction{PyErr_Occurred()}\ttindex{PyErr_Occurred()}.
387
388Exception state is maintained in per-thread storage (this is
389equivalent to using global storage in an unthreaded application). A
390thread can be in one of two states: an exception has occurred, or not.
391The function \cfunction{PyErr_Occurred()} can be used to check for
392this: it returns a borrowed reference to the exception type object
393when an exception has occurred, and \NULL{} otherwise. There are a
394number of functions to set the exception state:
395\cfunction{PyErr_SetString()}\ttindex{PyErr_SetString()} is the most
396common (though not the most general) function to set the exception
397state, and \cfunction{PyErr_Clear()}\ttindex{PyErr_Clear()} clears the
398exception state.
399
400The full exception state consists of three objects (all of which can
401be \NULL): the exception type, the corresponding exception
402value, and the traceback. These have the same meanings as the Python
403\withsubitem{(in module sys)}{
404 \ttindex{exc_type}\ttindex{exc_value}\ttindex{exc_traceback}}
405objects \code{sys.exc_type}, \code{sys.exc_value}, and
406\code{sys.exc_traceback}; however, they are not the same: the Python
407objects represent the last exception being handled by a Python
408\keyword{try} \ldots\ \keyword{except} statement, while the C level
409exception state only exists while an exception is being passed on
410between C functions until it reaches the Python bytecode interpreter's
411main loop, which takes care of transferring it to \code{sys.exc_type}
412and friends.
413
414Note that starting with Python 1.5, the preferred, thread-safe way to
415access the exception state from Python code is to call the function
416\withsubitem{(in module sys)}{\ttindex{exc_info()}}
417\function{sys.exc_info()}, which returns the per-thread exception state
418for Python code. Also, the semantics of both ways to access the
419exception state have changed so that a function which catches an
420exception will save and restore its thread's exception state so as to
421preserve the exception state of its caller. This prevents common bugs
422in exception handling code caused by an innocent-looking function
423overwriting the exception being handled; it also reduces the often
424unwanted lifetime extension for objects that are referenced by the
425stack frames in the traceback.
426
427As a general principle, a function that calls another function to
428perform some task should check whether the called function raised an
429exception, and if so, pass the exception state on to its caller. It
430should discard any object references that it owns, and return an
431error indicator, but it should \emph{not} set another exception ---
432that would overwrite the exception that was just raised, and lose
433important information about the exact cause of the error.
434
435A simple example of detecting exceptions and passing them on is shown
436in the \cfunction{sum_sequence()}\ttindex{sum_sequence()} example
437above. It so happens that that example doesn't need to clean up any
438owned references when it detects an error. The following example
439function shows some error cleanup. First, to remind you why you like
440Python, we show the equivalent Python code:
441
442\begin{verbatim}
443def incr_item(dict, key):
444 try:
445 item = dict[key]
446 except KeyError:
447 item = 0
448 dict[key] = item + 1
449\end{verbatim}
450\ttindex{incr_item()}
451
452Here is the corresponding C code, in all its glory:
453
454\begin{verbatim}
Fred Drake847c51a2001-10-25 15:53:44 +0000455int
456incr_item(PyObject *dict, PyObject *key)
Fred Drake3adf79e2001-10-12 19:01:43 +0000457{
458 /* Objects all initialized to NULL for Py_XDECREF */
459 PyObject *item = NULL, *const_one = NULL, *incremented_item = NULL;
460 int rv = -1; /* Return value initialized to -1 (failure) */
461
462 item = PyObject_GetItem(dict, key);
463 if (item == NULL) {
464 /* Handle KeyError only: */
465 if (!PyErr_ExceptionMatches(PyExc_KeyError))
466 goto error;
467
468 /* Clear the error and use zero: */
469 PyErr_Clear();
470 item = PyInt_FromLong(0L);
471 if (item == NULL)
472 goto error;
473 }
474 const_one = PyInt_FromLong(1L);
475 if (const_one == NULL)
476 goto error;
477
478 incremented_item = PyNumber_Add(item, const_one);
479 if (incremented_item == NULL)
480 goto error;
481
482 if (PyObject_SetItem(dict, key, incremented_item) < 0)
483 goto error;
484 rv = 0; /* Success */
485 /* Continue with cleanup code */
486
487 error:
488 /* Cleanup code, shared by success and failure path */
489
490 /* Use Py_XDECREF() to ignore NULL references */
491 Py_XDECREF(item);
492 Py_XDECREF(const_one);
493 Py_XDECREF(incremented_item);
494
495 return rv; /* -1 for error, 0 for success */
496}
497\end{verbatim}
498\ttindex{incr_item()}
499
500This example represents an endorsed use of the \keyword{goto} statement
501in C! It illustrates the use of
502\cfunction{PyErr_ExceptionMatches()}\ttindex{PyErr_ExceptionMatches()} and
503\cfunction{PyErr_Clear()}\ttindex{PyErr_Clear()} to
504handle specific exceptions, and the use of
505\cfunction{Py_XDECREF()}\ttindex{Py_XDECREF()} to
506dispose of owned references that may be \NULL{} (note the
507\character{X} in the name; \cfunction{Py_DECREF()} would crash when
508confronted with a \NULL{} reference). It is important that the
509variables used to hold owned references are initialized to \NULL{} for
510this to work; likewise, the proposed return value is initialized to
511\code{-1} (failure) and only set to success after the final call made
512is successful.
513
514
515\section{Embedding Python \label{embedding}}
516
517The one important task that only embedders (as opposed to extension
518writers) of the Python interpreter have to worry about is the
519initialization, and possibly the finalization, of the Python
520interpreter. Most functionality of the interpreter can only be used
521after the interpreter has been initialized.
522
523The basic initialization function is
524\cfunction{Py_Initialize()}\ttindex{Py_Initialize()}.
525This initializes the table of loaded modules, and creates the
526fundamental modules \module{__builtin__}\refbimodindex{__builtin__},
527\module{__main__}\refbimodindex{__main__}, \module{sys}\refbimodindex{sys},
528and \module{exceptions}.\refbimodindex{exceptions} It also initializes
529the module search path (\code{sys.path}).%
530\indexiii{module}{search}{path}
531\withsubitem{(in module sys)}{\ttindex{path}}
532
533\cfunction{Py_Initialize()} does not set the ``script argument list''
534(\code{sys.argv}). If this variable is needed by Python code that
535will be executed later, it must be set explicitly with a call to
536\code{PySys_SetArgv(\var{argc},
537\var{argv})}\ttindex{PySys_SetArgv()} subsequent to the call to
538\cfunction{Py_Initialize()}.
539
540On most systems (in particular, on \UNIX{} and Windows, although the
541details are slightly different),
542\cfunction{Py_Initialize()} calculates the module search path based
543upon its best guess for the location of the standard Python
544interpreter executable, assuming that the Python library is found in a
545fixed location relative to the Python interpreter executable. In
546particular, it looks for a directory named
547\file{lib/python\shortversion} relative to the parent directory where
548the executable named \file{python} is found on the shell command
549search path (the environment variable \envvar{PATH}).
550
551For instance, if the Python executable is found in
552\file{/usr/local/bin/python}, it will assume that the libraries are in
553\file{/usr/local/lib/python\shortversion}. (In fact, this particular path
554is also the ``fallback'' location, used when no executable file named
555\file{python} is found along \envvar{PATH}.) The user can override
556this behavior by setting the environment variable \envvar{PYTHONHOME},
557or insert additional directories in front of the standard path by
558setting \envvar{PYTHONPATH}.
559
560The embedding application can steer the search by calling
561\code{Py_SetProgramName(\var{file})}\ttindex{Py_SetProgramName()} \emph{before} calling
562\cfunction{Py_Initialize()}. Note that \envvar{PYTHONHOME} still
563overrides this and \envvar{PYTHONPATH} is still inserted in front of
564the standard path. An application that requires total control has to
565provide its own implementation of
566\cfunction{Py_GetPath()}\ttindex{Py_GetPath()},
567\cfunction{Py_GetPrefix()}\ttindex{Py_GetPrefix()},
568\cfunction{Py_GetExecPrefix()}\ttindex{Py_GetExecPrefix()}, and
569\cfunction{Py_GetProgramFullPath()}\ttindex{Py_GetProgramFullPath()} (all
570defined in \file{Modules/getpath.c}).
571
572Sometimes, it is desirable to ``uninitialize'' Python. For instance,
573the application may want to start over (make another call to
574\cfunction{Py_Initialize()}) or the application is simply done with its
575use of Python and wants to free all memory allocated by Python. This
576can be accomplished by calling \cfunction{Py_Finalize()}. The function
577\cfunction{Py_IsInitialized()}\ttindex{Py_IsInitialized()} returns
578true if Python is currently in the initialized state. More
579information about these functions is given in a later chapter.