mirror of
https://github.com/boostorg/python.git
synced 2026-01-22 17:32:55 +00:00
97 lines
4.7 KiB
HTML
97 lines
4.7 KiB
HTML
<html>
|
|
<head>
|
|
<!-- Generated by the Spirit (http://spirit.sf.net) QuickDoc -->
|
|
<title>Embedding</title>
|
|
<link rel="stylesheet" href="theme/style.css" type="text/css">
|
|
<link rel="prev" href="enums.html">
|
|
<link rel="next" href="using_the_interpreter.html">
|
|
</head>
|
|
<body>
|
|
<table width="100%" height="48" border="0" cellspacing="2">
|
|
<tr>
|
|
<td><img src="theme/c%2B%2Bboost.gif">
|
|
</td>
|
|
<td width="85%">
|
|
<font size="6" face="Verdana, Arial, Helvetica, sans-serif"><b>Embedding</b></font>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
<table border="0">
|
|
<tr>
|
|
<td width="30"><a href="../index.html"><img src="theme/u_arr.gif" border="0"></a></td>
|
|
<td width="30"><a href="enums.html"><img src="theme/l_arr.gif" border="0"></a></td>
|
|
<td width="20"><a href="using_the_interpreter.html"><img src="theme/r_arr.gif" border="0"></a></td>
|
|
</tr>
|
|
</table>
|
|
<p>
|
|
By now you should know how to use Boost.Python to call your C++ code from
|
|
Python. However, sometimes you may need to do the reverse: call Python code
|
|
from the C++-side. This requires you to <i>embed</i> the Python interpreter
|
|
into your C++ program.</p>
|
|
<p>
|
|
Currently, Boost.Python does not directly support everything you'll need
|
|
when embedding. Therefore you'll need to use the
|
|
<a href="http://www.python.org/doc/current/api/api.html">
|
|
Python/C API</a> to fill in
|
|
the gaps. However, Boost.Python already makes embedding a lot easier and,
|
|
in a future version, it may become unnecessary to touch the Python/C API at
|
|
all. So stay tuned... <img src="theme/smiley.gif"></img></p>
|
|
<a name="building_embedded_programs"></a><h2>Building embedded programs</h2><p>
|
|
To be able to use embedding in your programs, they have to be linked to
|
|
both Boost.Python's and Python's static link library.</p>
|
|
<p>
|
|
Boost.Python's static link library comes in two variants. Both are located
|
|
in Boost's <tt>/libs/python/build/bin-stage</tt> subdirectory. On Windows, the
|
|
variants are called <tt>boost_python.lib</tt> (for release builds) and
|
|
<tt>boost_python_debug.lib</tt> (for debugging). If you can't find the libraries,
|
|
you probably haven't built Boost.Python yet. See <a href="../../building.html">
|
|
Building and Testing</a> on how to do this.</p>
|
|
<p>
|
|
Python's static link library can be found in the <tt>/libs</tt> subdirectory of
|
|
your Python directory. On Windows it is called pythonXY.lib where X.Y is
|
|
your major Python version number.</p>
|
|
<p>
|
|
Additionally, Python's <tt>/include</tt> subdirectory has to be added to your
|
|
include path.</p>
|
|
<p>
|
|
In a Jamfile, all the above boils down to:</p>
|
|
<code><pre>
|
|
projectroot c:\projects\embedded_program ; # location of the program
|
|
|
|
# bring in the rules for python
|
|
SEARCH on python.jam = $(BOOST_BUILD_PATH) ;
|
|
include python.jam ;
|
|
|
|
exe embedded_program # name of the executable
|
|
: #sources
|
|
embedded_program.cpp
|
|
: # requirements
|
|
<find-library>boost_python <library-path>c:\boost\libs\python
|
|
$(PYTHON_PROPERTIES)
|
|
<library-path>$(PYTHON_LIB_PATH)
|
|
<find-library>$(PYTHON_EMBEDDED_LIBRARY) ;
|
|
</pre></code><a name="getting_started"></a><h2>Getting started</h2><p>
|
|
Being able to build is nice, but there is nothing to build yet. Embedding
|
|
the Python interpreter into one of your C++ programs requires these 4
|
|
steps:</p>
|
|
<ol><li>#include <tt><boost/python.hpp></tt><br><br></li><li>Call <a href="http://www.python.org/doc/current/api/initialization.html#l2h-652">
|
|
Py_Initialize</a>() to start the interpreter and create the <tt>__main__</tt> module.<br><br></li><li>Call other Python C API routines to use the interpreter.<br><br></li><li>Call <a href="http://www.python.org/doc/current/api/initialization.html#l2h-656">
|
|
Py_Finalize</a>() to stop the interpreter and release its resources.</li></ol><p>
|
|
(Of course, there can be other C++ code between all of these steps.)</p>
|
|
<blockquote><p><i><b>Now that we can embed the interpreter in our programs, lets see how to put it to use...</b></i></p></blockquote><table border="0">
|
|
<tr>
|
|
<td width="30"><a href="../index.html"><img src="theme/u_arr.gif" border="0"></a></td>
|
|
<td width="30"><a href="enums.html"><img src="theme/l_arr.gif" border="0"></a></td>
|
|
<td width="20"><a href="using_the_interpreter.html"><img src="theme/r_arr.gif" border="0"></a></td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
<hr size="1"><p class="copyright">Copyright © 2002-2003 David Abrahams<br>Copyright © 2002-2003 Joel de Guzman<br><br>
|
|
<font size="2">Permission to copy, use, modify, sell and distribute this document
|
|
is granted provided this copyright notice appears in all copies. This document
|
|
is provided "as is" without express or implied warranty, and with
|
|
no claim as to its suitability for any purpose. </font> </p>
|
|
</body>
|
|
</html>
|