mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
Added new intro sections (incomplete); fixed various typos
This commit is contained in:
parent
91c7c933cc
commit
59a61352ad
2 changed files with 374 additions and 14 deletions
194
Doc/api.tex
194
Doc/api.tex
|
@ -40,6 +40,186 @@ API functions in detail.
|
||||||
|
|
||||||
\chapter{Introduction}
|
\chapter{Introduction}
|
||||||
|
|
||||||
|
The Application Programmer's Interface to Python gives C and C++
|
||||||
|
programmers access to the Python interpreter at a variety of levels.
|
||||||
|
There are two fundamentally different reasons for using the Python/C
|
||||||
|
API. (The API is equally usable from C++, but for brevity it is
|
||||||
|
generally referred to as the Python/C API.) The first reason is to
|
||||||
|
write ``extension modules'' for specific purposes; these are C modules
|
||||||
|
that extend the Python interpreter. This is probably the most common
|
||||||
|
use. The second reason is to use Python as a component in a larger
|
||||||
|
application; this technique is generally referred to as ``embedding''
|
||||||
|
Python in an application.
|
||||||
|
|
||||||
|
Writing an extension module is a relatively well-understood process,
|
||||||
|
where a ``cookbook'' approach works well. There are several tools
|
||||||
|
that automate the process to some extent. While people have embedded
|
||||||
|
Python in other applications since its early existence, the process of
|
||||||
|
embedding Python is less straightforward that writing an extension.
|
||||||
|
Python 1.5 introduces a number of new API functions as well as some
|
||||||
|
changes to the build process that make embedding much simpler.
|
||||||
|
This manual describes the 1.5 state of affair (as of Python 1.5a3).
|
||||||
|
% XXX Eventually, take the historical notes out
|
||||||
|
|
||||||
|
Many API functions are useful independent of whether you're embedding
|
||||||
|
or extending Python; moreover, most applications that embed Python
|
||||||
|
will need to provide a custom extension as well, so it's probably a
|
||||||
|
good idea to become familiar with writing an extension before
|
||||||
|
attempting to embed Python in a real application.
|
||||||
|
|
||||||
|
\section{Objects, Types and Reference Counts}
|
||||||
|
|
||||||
|
Most Python/C API functions have one or more arguments as well as a
|
||||||
|
return value of type \code{PyObject *}. This type is a pointer
|
||||||
|
(obviously!) to an opaque data type representing an arbitrary Python
|
||||||
|
object. Since all Python object types are treated the same way by the
|
||||||
|
Python language in most situations (e.g., assignments, scope rules,
|
||||||
|
and argument passing), it is only fitting that they should be
|
||||||
|
represented by a single C type. All Python objects live on the heap:
|
||||||
|
you never declare an automatic or static variable of type
|
||||||
|
\code{PyObject}, only pointer variables of type \code{PyObject *} can
|
||||||
|
be declared.
|
||||||
|
|
||||||
|
All Python objects (even Python integers) have a ``type'' and a
|
||||||
|
``reference count''. An object's type determines what kind of object
|
||||||
|
it is (e.g., an integer, a list, or a user-defined function; there are
|
||||||
|
many more as explained in the Python Language Reference Manual). For
|
||||||
|
each of the well-known types there is a macro to check whether an
|
||||||
|
object is of that type; for instance, \code{PyList_Check(a)} is true
|
||||||
|
iff the object pointed to by \code{a} is a Python list.
|
||||||
|
|
||||||
|
The reference count is important only because today's computers have a
|
||||||
|
finite (and often severly limited) memory size; it counts how many
|
||||||
|
different places there are that have a reference to an object. Such a
|
||||||
|
place could be another object, or a global (or static) C variable, or
|
||||||
|
a local variable in some C function. When an object's reference count
|
||||||
|
becomes zero, the object is deallocated. If it contains references to
|
||||||
|
other objects, their reference count is decremented. Those other
|
||||||
|
objects may be deallocated in turn, if this decrement makes their
|
||||||
|
reference count become zero, and so on. (There's an obvious problem
|
||||||
|
with objects that reference each other here; for now, the solution is
|
||||||
|
``don't do that''.)
|
||||||
|
|
||||||
|
Reference counts are always manipulated explicitly. The normal way is
|
||||||
|
to use the macro \code{Py_INCREF(a)} to increment an object's
|
||||||
|
reference count by one, and \code{Py_DECREF(a)} to decrement it by
|
||||||
|
one. The latter macro is considerably more complex than the former,
|
||||||
|
since it must check whether the reference count becomes zero and then
|
||||||
|
cause the object's deallocator, which is a function pointer contained
|
||||||
|
in the object's type structure. The type-specific deallocator takes
|
||||||
|
care of decrementing the reference counts for other objects contained
|
||||||
|
in the object, and so on, if this is a compound object type such as a
|
||||||
|
list. There's no chance that the reference count can overflow; at
|
||||||
|
least as many bits are used to hold the reference count as there are
|
||||||
|
distinct memory locations in virtual memory (assuming
|
||||||
|
\code{sizeof(long) >= sizeof(char *)}). Thus, the reference count
|
||||||
|
increment is a simple operation.
|
||||||
|
|
||||||
|
It is not necessary to increment an object's reference count for every
|
||||||
|
local variable that contains a pointer to an object. In theory, the
|
||||||
|
oject's reference count goes up by one when the variable is made to
|
||||||
|
point to it and it goes down by one when the variable goes out of
|
||||||
|
scope. However, these two cancel each other out, so at the end the
|
||||||
|
reference count hasn't changed. The only real reason to use the
|
||||||
|
reference count is to prevent the object from being deallocated as
|
||||||
|
long as our variable is pointing to it. If we know that there is at
|
||||||
|
least one other reference to the object that lives at least as long as
|
||||||
|
our variable, there is no need to increment the reference count
|
||||||
|
temporarily. An important situation where this arises is in objects
|
||||||
|
that are passed as arguments to C functions in an extension module
|
||||||
|
that are called from Python; the call mechanism guarantees to hold a
|
||||||
|
reference to every argument for the duration of the call.
|
||||||
|
|
||||||
|
However, a common pitfall is to extract an object from a list and
|
||||||
|
holding on to it for a while without incrementing its reference count.
|
||||||
|
Some other operation might conceivably remove the object from the
|
||||||
|
list, decrementing its reference count and possible deallocating it.
|
||||||
|
The real danger is that innocent-looking operations may invoke
|
||||||
|
arbitrary Python code which could do this; there is a code path which
|
||||||
|
allows control to flow back to the user from a \code{Py_DECREF()}, so
|
||||||
|
almost any operation is potentially dangerous.
|
||||||
|
|
||||||
|
A safe approach is to always use the generic operations (functions
|
||||||
|
whose name begins with \code{PyObject_}, \code{PyNumber_},
|
||||||
|
\code{PySequence_} or \code{PyMapping_}). These operations always
|
||||||
|
increment the reference count of the object they return. This leaves
|
||||||
|
the caller with the responsibility to call \code{Py_DECREF()} when
|
||||||
|
they are done with the result; this soon becomes second nature.
|
||||||
|
|
||||||
|
There are very few other data types that play a significant role in
|
||||||
|
the Python/C API; most are all simple C types such as \code{int},
|
||||||
|
\code{long}, \code{double} and \code{char *}. A few structure types
|
||||||
|
are used to describe static tables used to list the functions exported
|
||||||
|
by a module or the data attributes of a new object type. These will
|
||||||
|
be discussed together with the functions that use them.
|
||||||
|
|
||||||
|
\section{Exceptions}
|
||||||
|
|
||||||
|
The Python programmer only needs to deal with exceptions if specific
|
||||||
|
error handling is required; unhandled exceptions are automatically
|
||||||
|
propagated to the caller, then to the caller's caller, and so on, till
|
||||||
|
they reach the top-level interpreter, where they are reported to the
|
||||||
|
user accompanied by a stack trace.
|
||||||
|
|
||||||
|
For C programmers, however, error checking always has to be explicit.
|
||||||
|
% XXX add more stuff here
|
||||||
|
|
||||||
|
\section{Embedding Python}
|
||||||
|
|
||||||
|
The one important task that only embedders of the Python interpreter
|
||||||
|
have to worry about is the initialization (and possibly the
|
||||||
|
finalization) of the Python interpreter. Most functionality of the
|
||||||
|
interpreter can only be used after the interpreter has been
|
||||||
|
initialized.
|
||||||
|
|
||||||
|
|
||||||
|
The basic initialization function is \code{Py_Initialize()}. This
|
||||||
|
initializes the table of loaded modules, and creates the fundamental
|
||||||
|
modules \code{__builtin__}, \code{__main__} and \code{sys}. It also
|
||||||
|
initializes the module search path (\code{sys.path}).
|
||||||
|
|
||||||
|
\code{Py_Initialize()} does not set the ``script argument list''
|
||||||
|
(\code{sys.argv}). If this variable is needed by Python code that
|
||||||
|
will be executed later, it must be set explicitly with a call to
|
||||||
|
\code{PySys_SetArgv(\var{argc}, \var{argv})} subsequent to the call
|
||||||
|
to \code{Py_Initialize()}.
|
||||||
|
|
||||||
|
On Unix, \code{Py_Initialize()} calculates the module search path
|
||||||
|
based upon its best guess for the location of the standard Python
|
||||||
|
interpreter executable, assuming that the Python library is found in a
|
||||||
|
fixed location relative to the Python interpreter executable. In
|
||||||
|
particular, it looks for a directory named \code{lib/python1.5}
|
||||||
|
(replacing \code{1.5} with the current interpreter version) relative
|
||||||
|
to the parent directory where the executable named \code{python} is
|
||||||
|
found on the shell command search path (the environment variable
|
||||||
|
\code{$PATH}). For instance, if the Python executable is found in
|
||||||
|
\code{/usr/local/bin/python}, it will assume that the libraries are in
|
||||||
|
\code{/usr/local/lib/python1.5}. In fact, this also the ``fallback''
|
||||||
|
location, used when no executable file named \code{python} is found
|
||||||
|
along \code{\$PATH}. The user can change this behavior by setting the
|
||||||
|
environment variable \code{\$PYTHONHOME}, and can insert additional
|
||||||
|
directories in front of the standard path by setting
|
||||||
|
\code{\$PYTHONPATH}.
|
||||||
|
|
||||||
|
The embedding application can steer the search by calling
|
||||||
|
\code{Py_SetProgramName(\var{file})} \emph{before} calling
|
||||||
|
\code{Py_Initialize()}. Note that \code[$PYTHONHOME} still overrides
|
||||||
|
this and \code{\$PYTHONPATH} is still inserted in front of the
|
||||||
|
standard path.
|
||||||
|
|
||||||
|
Sometimes, it is desirable to ``uninitialize'' Python. For instance,
|
||||||
|
the application may want to start over (make another call to
|
||||||
|
\code{Py_Initialize()}) or the application is simply done with its
|
||||||
|
use of Python and wants to free all memory allocated by Python. This
|
||||||
|
can be accomplished by calling \code{Py_Finalize()}.
|
||||||
|
% XXX More...
|
||||||
|
|
||||||
|
\section{Embedding Python in Threaded Applications}
|
||||||
|
|
||||||
|
%XXX more here
|
||||||
|
|
||||||
|
\chapter{Old Introduction}
|
||||||
|
|
||||||
(XXX This is the old introduction, mostly by Jim Fulton -- should be
|
(XXX This is the old introduction, mostly by Jim Fulton -- should be
|
||||||
rewritten.)
|
rewritten.)
|
||||||
|
|
||||||
|
@ -56,7 +236,7 @@ enough to write a simple application that gets Python code from the
|
||||||
user, execs it, and returns the output or errors.
|
user, execs it, and returns the output or errors.
|
||||||
|
|
||||||
\item "Abstract objects layer": which is the subject of this chapter.
|
\item "Abstract objects layer": which is the subject of this chapter.
|
||||||
It has many functions operating on objects, and lest you do many
|
It has many functions operating on objects, and lets you do many
|
||||||
things from C that you can also write in Python, without going through
|
things from C that you can also write in Python, without going through
|
||||||
the Python parser.
|
the Python parser.
|
||||||
|
|
||||||
|
@ -495,7 +675,7 @@ This function always succeeds.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
\begin{cfuncdesc}{PyObject*}{PyObject_GetAttrString}{PyObject *o, char *attr_name}
|
\begin{cfuncdesc}{PyObject*}{PyObject_GetAttrString}{PyObject *o, char *attr_name}
|
||||||
Retrieve an attributed named attr_name form object o.
|
Retrieve an attributed named attr_name from object o.
|
||||||
Returns the attribute value on success, or \NULL{} on failure.
|
Returns the attribute value on success, or \NULL{} on failure.
|
||||||
This is the equivalent of the Python expression: \code{o.attr_name}.
|
This is the equivalent of the Python expression: \code{o.attr_name}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
@ -664,7 +844,7 @@ of the Python statement: \code{o[key]=v}.
|
||||||
\begin{cfuncdesc}{int}{PyObject_DelItem}{PyObject *o, PyObject *key, PyObject *v}
|
\begin{cfuncdesc}{int}{PyObject_DelItem}{PyObject *o, PyObject *key, PyObject *v}
|
||||||
Delete the mapping for \code{key} from \code{*o}. Returns -1
|
Delete the mapping for \code{key} from \code{*o}. Returns -1
|
||||||
on failure.
|
on failure.
|
||||||
This is the equivalent of the Python statement: del o[key].
|
This is the equivalent of the Python statement: \code{del o[key]}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
|
|
||||||
|
@ -745,7 +925,7 @@ the equivalent of the Python expression: \code{abs(o)}.
|
||||||
\begin{cfuncdesc}{PyObject*}{PyNumber_Invert}{PyObject *o}
|
\begin{cfuncdesc}{PyObject*}{PyNumber_Invert}{PyObject *o}
|
||||||
Returns the bitwise negation of \code{o} on success, or \NULL{} on
|
Returns the bitwise negation of \code{o} on success, or \NULL{} on
|
||||||
failure. This is the equivalent of the Python expression:
|
failure. This is the equivalent of the Python expression:
|
||||||
\code{~o}.
|
\code{\~o}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
|
|
||||||
|
@ -777,7 +957,7 @@ expression: \code{o1\^{ }o2}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
\begin{cfuncdesc}{PyObject*}{PyNumber_Or}{PyObject *o1, PyObject *o2}
|
\begin{cfuncdesc}{PyObject*}{PyNumber_Or}{PyObject *o1, PyObject *o2}
|
||||||
Returns the result or \code{o1} and \code{o2} on success, or \NULL{} on
|
Returns the result of \code{o1} and \code{o2} on success, or \NULL{} on
|
||||||
failure. This is the equivalent of the Python expression:
|
failure. This is the equivalent of the Python expression:
|
||||||
\code{o1 or o2}.
|
\code{o1 or o2}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
@ -837,7 +1017,7 @@ expression: \code{o1+o2}.
|
||||||
|
|
||||||
|
|
||||||
\begin{cfuncdesc}{PyObject*}{PySequence_Repeat}{PyObject *o, int count}
|
\begin{cfuncdesc}{PyObject*}{PySequence_Repeat}{PyObject *o, int count}
|
||||||
Return the result of repeating sequence object \code{o} count times,
|
Return the result of repeating sequence object \code{o} \code{count} times,
|
||||||
or \NULL{} on failure. This is the equivalent of the Python
|
or \NULL{} on failure. This is the equivalent of the Python
|
||||||
expression: \code{o*count}.
|
expression: \code{o*count}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
@ -899,7 +1079,7 @@ is equivalent to the Python expression: \code{value in o}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
\begin{cfuncdesc}{int}{PySequence_Index}{PyObject *o, PyObject *value}
|
\begin{cfuncdesc}{int}{PySequence_Index}{PyObject *o, PyObject *value}
|
||||||
Return the first index for which \code{o[i]=value}. On error,
|
Return the first index for which \code{o[i]==value}. On error,
|
||||||
return -1. This is equivalent to the Python
|
return -1. This is equivalent to the Python
|
||||||
expression: \code{o.index(value)}.
|
expression: \code{o.index(value)}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
194
Doc/api/api.tex
194
Doc/api/api.tex
|
@ -40,6 +40,186 @@ API functions in detail.
|
||||||
|
|
||||||
\chapter{Introduction}
|
\chapter{Introduction}
|
||||||
|
|
||||||
|
The Application Programmer's Interface to Python gives C and C++
|
||||||
|
programmers access to the Python interpreter at a variety of levels.
|
||||||
|
There are two fundamentally different reasons for using the Python/C
|
||||||
|
API. (The API is equally usable from C++, but for brevity it is
|
||||||
|
generally referred to as the Python/C API.) The first reason is to
|
||||||
|
write ``extension modules'' for specific purposes; these are C modules
|
||||||
|
that extend the Python interpreter. This is probably the most common
|
||||||
|
use. The second reason is to use Python as a component in a larger
|
||||||
|
application; this technique is generally referred to as ``embedding''
|
||||||
|
Python in an application.
|
||||||
|
|
||||||
|
Writing an extension module is a relatively well-understood process,
|
||||||
|
where a ``cookbook'' approach works well. There are several tools
|
||||||
|
that automate the process to some extent. While people have embedded
|
||||||
|
Python in other applications since its early existence, the process of
|
||||||
|
embedding Python is less straightforward that writing an extension.
|
||||||
|
Python 1.5 introduces a number of new API functions as well as some
|
||||||
|
changes to the build process that make embedding much simpler.
|
||||||
|
This manual describes the 1.5 state of affair (as of Python 1.5a3).
|
||||||
|
% XXX Eventually, take the historical notes out
|
||||||
|
|
||||||
|
Many API functions are useful independent of whether you're embedding
|
||||||
|
or extending Python; moreover, most applications that embed Python
|
||||||
|
will need to provide a custom extension as well, so it's probably a
|
||||||
|
good idea to become familiar with writing an extension before
|
||||||
|
attempting to embed Python in a real application.
|
||||||
|
|
||||||
|
\section{Objects, Types and Reference Counts}
|
||||||
|
|
||||||
|
Most Python/C API functions have one or more arguments as well as a
|
||||||
|
return value of type \code{PyObject *}. This type is a pointer
|
||||||
|
(obviously!) to an opaque data type representing an arbitrary Python
|
||||||
|
object. Since all Python object types are treated the same way by the
|
||||||
|
Python language in most situations (e.g., assignments, scope rules,
|
||||||
|
and argument passing), it is only fitting that they should be
|
||||||
|
represented by a single C type. All Python objects live on the heap:
|
||||||
|
you never declare an automatic or static variable of type
|
||||||
|
\code{PyObject}, only pointer variables of type \code{PyObject *} can
|
||||||
|
be declared.
|
||||||
|
|
||||||
|
All Python objects (even Python integers) have a ``type'' and a
|
||||||
|
``reference count''. An object's type determines what kind of object
|
||||||
|
it is (e.g., an integer, a list, or a user-defined function; there are
|
||||||
|
many more as explained in the Python Language Reference Manual). For
|
||||||
|
each of the well-known types there is a macro to check whether an
|
||||||
|
object is of that type; for instance, \code{PyList_Check(a)} is true
|
||||||
|
iff the object pointed to by \code{a} is a Python list.
|
||||||
|
|
||||||
|
The reference count is important only because today's computers have a
|
||||||
|
finite (and often severly limited) memory size; it counts how many
|
||||||
|
different places there are that have a reference to an object. Such a
|
||||||
|
place could be another object, or a global (or static) C variable, or
|
||||||
|
a local variable in some C function. When an object's reference count
|
||||||
|
becomes zero, the object is deallocated. If it contains references to
|
||||||
|
other objects, their reference count is decremented. Those other
|
||||||
|
objects may be deallocated in turn, if this decrement makes their
|
||||||
|
reference count become zero, and so on. (There's an obvious problem
|
||||||
|
with objects that reference each other here; for now, the solution is
|
||||||
|
``don't do that''.)
|
||||||
|
|
||||||
|
Reference counts are always manipulated explicitly. The normal way is
|
||||||
|
to use the macro \code{Py_INCREF(a)} to increment an object's
|
||||||
|
reference count by one, and \code{Py_DECREF(a)} to decrement it by
|
||||||
|
one. The latter macro is considerably more complex than the former,
|
||||||
|
since it must check whether the reference count becomes zero and then
|
||||||
|
cause the object's deallocator, which is a function pointer contained
|
||||||
|
in the object's type structure. The type-specific deallocator takes
|
||||||
|
care of decrementing the reference counts for other objects contained
|
||||||
|
in the object, and so on, if this is a compound object type such as a
|
||||||
|
list. There's no chance that the reference count can overflow; at
|
||||||
|
least as many bits are used to hold the reference count as there are
|
||||||
|
distinct memory locations in virtual memory (assuming
|
||||||
|
\code{sizeof(long) >= sizeof(char *)}). Thus, the reference count
|
||||||
|
increment is a simple operation.
|
||||||
|
|
||||||
|
It is not necessary to increment an object's reference count for every
|
||||||
|
local variable that contains a pointer to an object. In theory, the
|
||||||
|
oject's reference count goes up by one when the variable is made to
|
||||||
|
point to it and it goes down by one when the variable goes out of
|
||||||
|
scope. However, these two cancel each other out, so at the end the
|
||||||
|
reference count hasn't changed. The only real reason to use the
|
||||||
|
reference count is to prevent the object from being deallocated as
|
||||||
|
long as our variable is pointing to it. If we know that there is at
|
||||||
|
least one other reference to the object that lives at least as long as
|
||||||
|
our variable, there is no need to increment the reference count
|
||||||
|
temporarily. An important situation where this arises is in objects
|
||||||
|
that are passed as arguments to C functions in an extension module
|
||||||
|
that are called from Python; the call mechanism guarantees to hold a
|
||||||
|
reference to every argument for the duration of the call.
|
||||||
|
|
||||||
|
However, a common pitfall is to extract an object from a list and
|
||||||
|
holding on to it for a while without incrementing its reference count.
|
||||||
|
Some other operation might conceivably remove the object from the
|
||||||
|
list, decrementing its reference count and possible deallocating it.
|
||||||
|
The real danger is that innocent-looking operations may invoke
|
||||||
|
arbitrary Python code which could do this; there is a code path which
|
||||||
|
allows control to flow back to the user from a \code{Py_DECREF()}, so
|
||||||
|
almost any operation is potentially dangerous.
|
||||||
|
|
||||||
|
A safe approach is to always use the generic operations (functions
|
||||||
|
whose name begins with \code{PyObject_}, \code{PyNumber_},
|
||||||
|
\code{PySequence_} or \code{PyMapping_}). These operations always
|
||||||
|
increment the reference count of the object they return. This leaves
|
||||||
|
the caller with the responsibility to call \code{Py_DECREF()} when
|
||||||
|
they are done with the result; this soon becomes second nature.
|
||||||
|
|
||||||
|
There are very few other data types that play a significant role in
|
||||||
|
the Python/C API; most are all simple C types such as \code{int},
|
||||||
|
\code{long}, \code{double} and \code{char *}. A few structure types
|
||||||
|
are used to describe static tables used to list the functions exported
|
||||||
|
by a module or the data attributes of a new object type. These will
|
||||||
|
be discussed together with the functions that use them.
|
||||||
|
|
||||||
|
\section{Exceptions}
|
||||||
|
|
||||||
|
The Python programmer only needs to deal with exceptions if specific
|
||||||
|
error handling is required; unhandled exceptions are automatically
|
||||||
|
propagated to the caller, then to the caller's caller, and so on, till
|
||||||
|
they reach the top-level interpreter, where they are reported to the
|
||||||
|
user accompanied by a stack trace.
|
||||||
|
|
||||||
|
For C programmers, however, error checking always has to be explicit.
|
||||||
|
% XXX add more stuff here
|
||||||
|
|
||||||
|
\section{Embedding Python}
|
||||||
|
|
||||||
|
The one important task that only embedders of the Python interpreter
|
||||||
|
have to worry about is the initialization (and possibly the
|
||||||
|
finalization) of the Python interpreter. Most functionality of the
|
||||||
|
interpreter can only be used after the interpreter has been
|
||||||
|
initialized.
|
||||||
|
|
||||||
|
|
||||||
|
The basic initialization function is \code{Py_Initialize()}. This
|
||||||
|
initializes the table of loaded modules, and creates the fundamental
|
||||||
|
modules \code{__builtin__}, \code{__main__} and \code{sys}. It also
|
||||||
|
initializes the module search path (\code{sys.path}).
|
||||||
|
|
||||||
|
\code{Py_Initialize()} does not set the ``script argument list''
|
||||||
|
(\code{sys.argv}). If this variable is needed by Python code that
|
||||||
|
will be executed later, it must be set explicitly with a call to
|
||||||
|
\code{PySys_SetArgv(\var{argc}, \var{argv})} subsequent to the call
|
||||||
|
to \code{Py_Initialize()}.
|
||||||
|
|
||||||
|
On Unix, \code{Py_Initialize()} calculates the module search path
|
||||||
|
based upon its best guess for the location of the standard Python
|
||||||
|
interpreter executable, assuming that the Python library is found in a
|
||||||
|
fixed location relative to the Python interpreter executable. In
|
||||||
|
particular, it looks for a directory named \code{lib/python1.5}
|
||||||
|
(replacing \code{1.5} with the current interpreter version) relative
|
||||||
|
to the parent directory where the executable named \code{python} is
|
||||||
|
found on the shell command search path (the environment variable
|
||||||
|
\code{$PATH}). For instance, if the Python executable is found in
|
||||||
|
\code{/usr/local/bin/python}, it will assume that the libraries are in
|
||||||
|
\code{/usr/local/lib/python1.5}. In fact, this also the ``fallback''
|
||||||
|
location, used when no executable file named \code{python} is found
|
||||||
|
along \code{\$PATH}. The user can change this behavior by setting the
|
||||||
|
environment variable \code{\$PYTHONHOME}, and can insert additional
|
||||||
|
directories in front of the standard path by setting
|
||||||
|
\code{\$PYTHONPATH}.
|
||||||
|
|
||||||
|
The embedding application can steer the search by calling
|
||||||
|
\code{Py_SetProgramName(\var{file})} \emph{before} calling
|
||||||
|
\code{Py_Initialize()}. Note that \code[$PYTHONHOME} still overrides
|
||||||
|
this and \code{\$PYTHONPATH} is still inserted in front of the
|
||||||
|
standard path.
|
||||||
|
|
||||||
|
Sometimes, it is desirable to ``uninitialize'' Python. For instance,
|
||||||
|
the application may want to start over (make another call to
|
||||||
|
\code{Py_Initialize()}) or the application is simply done with its
|
||||||
|
use of Python and wants to free all memory allocated by Python. This
|
||||||
|
can be accomplished by calling \code{Py_Finalize()}.
|
||||||
|
% XXX More...
|
||||||
|
|
||||||
|
\section{Embedding Python in Threaded Applications}
|
||||||
|
|
||||||
|
%XXX more here
|
||||||
|
|
||||||
|
\chapter{Old Introduction}
|
||||||
|
|
||||||
(XXX This is the old introduction, mostly by Jim Fulton -- should be
|
(XXX This is the old introduction, mostly by Jim Fulton -- should be
|
||||||
rewritten.)
|
rewritten.)
|
||||||
|
|
||||||
|
@ -56,7 +236,7 @@ enough to write a simple application that gets Python code from the
|
||||||
user, execs it, and returns the output or errors.
|
user, execs it, and returns the output or errors.
|
||||||
|
|
||||||
\item "Abstract objects layer": which is the subject of this chapter.
|
\item "Abstract objects layer": which is the subject of this chapter.
|
||||||
It has many functions operating on objects, and lest you do many
|
It has many functions operating on objects, and lets you do many
|
||||||
things from C that you can also write in Python, without going through
|
things from C that you can also write in Python, without going through
|
||||||
the Python parser.
|
the Python parser.
|
||||||
|
|
||||||
|
@ -495,7 +675,7 @@ This function always succeeds.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
\begin{cfuncdesc}{PyObject*}{PyObject_GetAttrString}{PyObject *o, char *attr_name}
|
\begin{cfuncdesc}{PyObject*}{PyObject_GetAttrString}{PyObject *o, char *attr_name}
|
||||||
Retrieve an attributed named attr_name form object o.
|
Retrieve an attributed named attr_name from object o.
|
||||||
Returns the attribute value on success, or \NULL{} on failure.
|
Returns the attribute value on success, or \NULL{} on failure.
|
||||||
This is the equivalent of the Python expression: \code{o.attr_name}.
|
This is the equivalent of the Python expression: \code{o.attr_name}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
@ -664,7 +844,7 @@ of the Python statement: \code{o[key]=v}.
|
||||||
\begin{cfuncdesc}{int}{PyObject_DelItem}{PyObject *o, PyObject *key, PyObject *v}
|
\begin{cfuncdesc}{int}{PyObject_DelItem}{PyObject *o, PyObject *key, PyObject *v}
|
||||||
Delete the mapping for \code{key} from \code{*o}. Returns -1
|
Delete the mapping for \code{key} from \code{*o}. Returns -1
|
||||||
on failure.
|
on failure.
|
||||||
This is the equivalent of the Python statement: del o[key].
|
This is the equivalent of the Python statement: \code{del o[key]}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
|
|
||||||
|
@ -745,7 +925,7 @@ the equivalent of the Python expression: \code{abs(o)}.
|
||||||
\begin{cfuncdesc}{PyObject*}{PyNumber_Invert}{PyObject *o}
|
\begin{cfuncdesc}{PyObject*}{PyNumber_Invert}{PyObject *o}
|
||||||
Returns the bitwise negation of \code{o} on success, or \NULL{} on
|
Returns the bitwise negation of \code{o} on success, or \NULL{} on
|
||||||
failure. This is the equivalent of the Python expression:
|
failure. This is the equivalent of the Python expression:
|
||||||
\code{~o}.
|
\code{\~o}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
|
|
||||||
|
@ -777,7 +957,7 @@ expression: \code{o1\^{ }o2}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
\begin{cfuncdesc}{PyObject*}{PyNumber_Or}{PyObject *o1, PyObject *o2}
|
\begin{cfuncdesc}{PyObject*}{PyNumber_Or}{PyObject *o1, PyObject *o2}
|
||||||
Returns the result or \code{o1} and \code{o2} on success, or \NULL{} on
|
Returns the result of \code{o1} and \code{o2} on success, or \NULL{} on
|
||||||
failure. This is the equivalent of the Python expression:
|
failure. This is the equivalent of the Python expression:
|
||||||
\code{o1 or o2}.
|
\code{o1 or o2}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
@ -837,7 +1017,7 @@ expression: \code{o1+o2}.
|
||||||
|
|
||||||
|
|
||||||
\begin{cfuncdesc}{PyObject*}{PySequence_Repeat}{PyObject *o, int count}
|
\begin{cfuncdesc}{PyObject*}{PySequence_Repeat}{PyObject *o, int count}
|
||||||
Return the result of repeating sequence object \code{o} count times,
|
Return the result of repeating sequence object \code{o} \code{count} times,
|
||||||
or \NULL{} on failure. This is the equivalent of the Python
|
or \NULL{} on failure. This is the equivalent of the Python
|
||||||
expression: \code{o*count}.
|
expression: \code{o*count}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
@ -899,7 +1079,7 @@ is equivalent to the Python expression: \code{value in o}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
||||||
\begin{cfuncdesc}{int}{PySequence_Index}{PyObject *o, PyObject *value}
|
\begin{cfuncdesc}{int}{PySequence_Index}{PyObject *o, PyObject *value}
|
||||||
Return the first index for which \code{o[i]=value}. On error,
|
Return the first index for which \code{o[i]==value}. On error,
|
||||||
return -1. This is equivalent to the Python
|
return -1. This is equivalent to the Python
|
||||||
expression: \code{o.index(value)}.
|
expression: \code{o.index(value)}.
|
||||||
\end{cfuncdesc}
|
\end{cfuncdesc}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue