blob: 608d56244a99620f57fa525480fcae264dea3b68 [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
Neal Norwitzac3625f2006-03-17 05:49:33 +0000403result of \code{sys.exc_info()}; however, they are not the same: the Python
Fred Drake3adf79e2001-10-12 19:01:43 +0000404objects represent the last exception being handled by a Python
405\keyword{try} \ldots\ \keyword{except} statement, while the C level
406exception state only exists while an exception is being passed on
407between C functions until it reaches the Python bytecode interpreter's
Neal Norwitzac3625f2006-03-17 05:49:33 +0000408main loop, which takes care of transferring it to \code{sys.exc_info()}
Fred Drake3adf79e2001-10-12 19:01:43 +0000409and friends.
410
411Note that starting with Python 1.5, the preferred, thread-safe way to
412access the exception state from Python code is to call the function
413\withsubitem{(in module sys)}{\ttindex{exc_info()}}
414\function{sys.exc_info()}, which returns the per-thread exception state
415for Python code. Also, the semantics of both ways to access the
416exception state have changed so that a function which catches an
417exception will save and restore its thread's exception state so as to
418preserve the exception state of its caller. This prevents common bugs
419in exception handling code caused by an innocent-looking function
420overwriting the exception being handled; it also reduces the often
421unwanted lifetime extension for objects that are referenced by the
422stack frames in the traceback.
423
424As a general principle, a function that calls another function to
425perform some task should check whether the called function raised an
426exception, and if so, pass the exception state on to its caller. It
427should discard any object references that it owns, and return an
428error indicator, but it should \emph{not} set another exception ---
429that would overwrite the exception that was just raised, and lose
430important information about the exact cause of the error.
431
432A simple example of detecting exceptions and passing them on is shown
433in the \cfunction{sum_sequence()}\ttindex{sum_sequence()} example
434above. It so happens that that example doesn't need to clean up any
435owned references when it detects an error. The following example
436function shows some error cleanup. First, to remind you why you like
437Python, we show the equivalent Python code:
438
439\begin{verbatim}
440def incr_item(dict, key):
441 try:
442 item = dict[key]
443 except KeyError:
444 item = 0
445 dict[key] = item + 1
446\end{verbatim}
447\ttindex{incr_item()}
448
449Here is the corresponding C code, in all its glory:
450
451\begin{verbatim}
Fred Drake847c51a2001-10-25 15:53:44 +0000452int
453incr_item(PyObject *dict, PyObject *key)
Fred Drake3adf79e2001-10-12 19:01:43 +0000454{
455 /* Objects all initialized to NULL for Py_XDECREF */
456 PyObject *item = NULL, *const_one = NULL, *incremented_item = NULL;
457 int rv = -1; /* Return value initialized to -1 (failure) */
458
459 item = PyObject_GetItem(dict, key);
460 if (item == NULL) {
461 /* Handle KeyError only: */
462 if (!PyErr_ExceptionMatches(PyExc_KeyError))
463 goto error;
464
465 /* Clear the error and use zero: */
466 PyErr_Clear();
467 item = PyInt_FromLong(0L);
468 if (item == NULL)
469 goto error;
470 }
471 const_one = PyInt_FromLong(1L);
472 if (const_one == NULL)
473 goto error;
474
475 incremented_item = PyNumber_Add(item, const_one);
476 if (incremented_item == NULL)
477 goto error;
478
479 if (PyObject_SetItem(dict, key, incremented_item) < 0)
480 goto error;
481 rv = 0; /* Success */
482 /* Continue with cleanup code */
483
484 error:
485 /* Cleanup code, shared by success and failure path */
486
487 /* Use Py_XDECREF() to ignore NULL references */
488 Py_XDECREF(item);
489 Py_XDECREF(const_one);
490 Py_XDECREF(incremented_item);
491
492 return rv; /* -1 for error, 0 for success */
493}
494\end{verbatim}
495\ttindex{incr_item()}
496
497This example represents an endorsed use of the \keyword{goto} statement
498in C! It illustrates the use of
499\cfunction{PyErr_ExceptionMatches()}\ttindex{PyErr_ExceptionMatches()} and
500\cfunction{PyErr_Clear()}\ttindex{PyErr_Clear()} to
501handle specific exceptions, and the use of
502\cfunction{Py_XDECREF()}\ttindex{Py_XDECREF()} to
503dispose of owned references that may be \NULL{} (note the
504\character{X} in the name; \cfunction{Py_DECREF()} would crash when
505confronted with a \NULL{} reference). It is important that the
506variables used to hold owned references are initialized to \NULL{} for
507this to work; likewise, the proposed return value is initialized to
508\code{-1} (failure) and only set to success after the final call made
509is successful.
510
511
512\section{Embedding Python \label{embedding}}
513
514The one important task that only embedders (as opposed to extension
515writers) of the Python interpreter have to worry about is the
516initialization, and possibly the finalization, of the Python
517interpreter. Most functionality of the interpreter can only be used
518after the interpreter has been initialized.
519
520The basic initialization function is
521\cfunction{Py_Initialize()}\ttindex{Py_Initialize()}.
522This initializes the table of loaded modules, and creates the
523fundamental modules \module{__builtin__}\refbimodindex{__builtin__},
524\module{__main__}\refbimodindex{__main__}, \module{sys}\refbimodindex{sys},
525and \module{exceptions}.\refbimodindex{exceptions} It also initializes
526the module search path (\code{sys.path}).%
527\indexiii{module}{search}{path}
528\withsubitem{(in module sys)}{\ttindex{path}}
529
530\cfunction{Py_Initialize()} does not set the ``script argument list''
531(\code{sys.argv}). If this variable is needed by Python code that
532will be executed later, it must be set explicitly with a call to
533\code{PySys_SetArgv(\var{argc},
534\var{argv})}\ttindex{PySys_SetArgv()} subsequent to the call to
535\cfunction{Py_Initialize()}.
536
537On most systems (in particular, on \UNIX{} and Windows, although the
538details are slightly different),
539\cfunction{Py_Initialize()} calculates the module search path based
540upon its best guess for the location of the standard Python
541interpreter executable, assuming that the Python library is found in a
542fixed location relative to the Python interpreter executable. In
543particular, it looks for a directory named
544\file{lib/python\shortversion} relative to the parent directory where
545the executable named \file{python} is found on the shell command
546search path (the environment variable \envvar{PATH}).
547
548For instance, if the Python executable is found in
549\file{/usr/local/bin/python}, it will assume that the libraries are in
550\file{/usr/local/lib/python\shortversion}. (In fact, this particular path
551is also the ``fallback'' location, used when no executable file named
552\file{python} is found along \envvar{PATH}.) The user can override
553this behavior by setting the environment variable \envvar{PYTHONHOME},
554or insert additional directories in front of the standard path by
555setting \envvar{PYTHONPATH}.
556
557The embedding application can steer the search by calling
558\code{Py_SetProgramName(\var{file})}\ttindex{Py_SetProgramName()} \emph{before} calling
559\cfunction{Py_Initialize()}. Note that \envvar{PYTHONHOME} still
560overrides this and \envvar{PYTHONPATH} is still inserted in front of
561the standard path. An application that requires total control has to
562provide its own implementation of
563\cfunction{Py_GetPath()}\ttindex{Py_GetPath()},
564\cfunction{Py_GetPrefix()}\ttindex{Py_GetPrefix()},
565\cfunction{Py_GetExecPrefix()}\ttindex{Py_GetExecPrefix()}, and
566\cfunction{Py_GetProgramFullPath()}\ttindex{Py_GetProgramFullPath()} (all
567defined in \file{Modules/getpath.c}).
568
569Sometimes, it is desirable to ``uninitialize'' Python. For instance,
570the application may want to start over (make another call to
571\cfunction{Py_Initialize()}) or the application is simply done with its
572use of Python and wants to free all memory allocated by Python. This
573can be accomplished by calling \cfunction{Py_Finalize()}. The function
574\cfunction{Py_IsInitialized()}\ttindex{Py_IsInitialized()} returns
575true if Python is currently in the initialized state. More
576information about these functions is given in a later chapter.