| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | .. _extending-index:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##################################################
 | 
					
						
							|  |  |  |   Extending and Embedding the Python Interpreter
 | 
					
						
							|  |  |  | ##################################################
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This document describes how to write modules in C or C++ to extend the Python
 | 
					
						
							| 
									
										
										
										
											2013-10-06 18:36:34 +02:00
										 |  |  | interpreter with new modules.  Those modules can not only define new functions
 | 
					
						
							|  |  |  | but also new object types and their methods.  The document also describes how
 | 
					
						
							|  |  |  | to embed the Python interpreter in another application, for use as an extension
 | 
					
						
							|  |  |  | language.  Finally, it shows how to compile and link extension modules so that
 | 
					
						
							|  |  |  | they can be loaded dynamically (at run time) into the interpreter, if the
 | 
					
						
							|  |  |  | underlying operating system supports this feature.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | This document assumes basic knowledge about Python.  For an informal
 | 
					
						
							|  |  |  | introduction to the language, see :ref:`tutorial-index`.  :ref:`reference-index`
 | 
					
						
							|  |  |  | gives a more formal definition of the language.  :ref:`library-index` documents
 | 
					
						
							|  |  |  | the existing object types, functions and modules (both built-in and written in
 | 
					
						
							|  |  |  | Python) that give the language its wide application range.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For a detailed description of the whole Python/C API, see the separate
 | 
					
						
							|  |  |  | :ref:`c-api-index`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-10 21:24:55 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-13 22:13:45 +10:00
										 |  |  | Recommended third party tools
 | 
					
						
							|  |  |  | =============================
 | 
					
						
							| 
									
										
										
										
											2013-12-10 21:24:55 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-13 22:13:45 +10:00
										 |  |  | This guide only covers the basic tools for creating extensions provided
 | 
					
						
							|  |  |  | as part of this version of CPython. Third party tools like Cython,
 | 
					
						
							|  |  |  | ``cffi``, SWIG and Numba offer both simpler and more sophisticated
 | 
					
						
							|  |  |  | approaches to creating C and C++ extensions for Python.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. seealso::
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-26 19:37:12 +01:00
										 |  |  |    `Python Packaging User Guide: Binary Extensions <https://packaging.python.org/en/latest/extensions/>`_
 | 
					
						
							| 
									
										
										
										
											2014-03-13 22:13:45 +10:00
										 |  |  |       The Python Packaging User Guide not only covers several available
 | 
					
						
							|  |  |  |       tools that simplify the creation of binary extensions, but also
 | 
					
						
							|  |  |  |       discusses the various reasons why creating an extension module may be
 | 
					
						
							|  |  |  |       desirable in the first place.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Creating extensions without third party tools
 | 
					
						
							|  |  |  | =============================================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This section of the guide covers creating C and C++ extensions without
 | 
					
						
							|  |  |  | assistance from third party tools. It is intended primarily for creators
 | 
					
						
							|  |  |  | of those tools, rather than being a recommended way to create your own
 | 
					
						
							|  |  |  | C extensions.
 | 
					
						
							| 
									
										
										
										
											2013-12-10 21:24:55 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | .. toctree::
 | 
					
						
							|  |  |  |    :maxdepth: 2
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 70578,70599,70641-70642,70650,70660-70661,70674,70691,70697-70698,70700,70704 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r70578 | benjamin.peterson | 2009-03-23 22:24:56 -0500 (Mon, 23 Mar 2009) | 1 line
  this is better written using assertRaises
........
  r70599 | benjamin.peterson | 2009-03-25 16:42:51 -0500 (Wed, 25 Mar 2009) | 1 line
  this can be slightly less ugly
........
  r70641 | guilherme.polo | 2009-03-27 16:43:08 -0500 (Fri, 27 Mar 2009) | 3 lines
  Adjusted _tkinter to compile without warnings when WITH_THREAD is not
  defined (part of issue #5035)
........
  r70642 | georg.brandl | 2009-03-27 19:48:48 -0500 (Fri, 27 Mar 2009) | 1 line
  Fix typo.
........
  r70650 | benjamin.peterson | 2009-03-28 14:16:10 -0500 (Sat, 28 Mar 2009) | 1 line
  give os.symlink and os.link() better parameter names #5564
........
  r70660 | georg.brandl | 2009-03-28 14:52:58 -0500 (Sat, 28 Mar 2009) | 1 line
  Switch to fixed Sphinx version.
........
  r70661 | georg.brandl | 2009-03-28 14:57:36 -0500 (Sat, 28 Mar 2009) | 2 lines
  Add section numbering to some of the larger subdocuments.
........
  r70674 | guilherme.polo | 2009-03-29 05:19:05 -0500 (Sun, 29 Mar 2009) | 1 line
  Typo fix.
........
  r70691 | raymond.hettinger | 2009-03-29 13:51:11 -0500 (Sun, 29 Mar 2009) | 1 line
  Make life easier for non-CPython implementations.
........
  r70697 | benjamin.peterson | 2009-03-29 16:22:35 -0500 (Sun, 29 Mar 2009) | 1 line
  this has been fixed since 2.6 (I love removing these)
........
  r70698 | benjamin.peterson | 2009-03-29 16:31:05 -0500 (Sun, 29 Mar 2009) | 1 line
  thanks to guido's bytecode verifier, this is fixed
........
  r70700 | benjamin.peterson | 2009-03-29 16:50:14 -0500 (Sun, 29 Mar 2009) | 1 line
  use the awesome new status iterator
........
  r70704 | benjamin.peterson | 2009-03-29 21:49:32 -0500 (Sun, 29 Mar 2009) | 1 line
  there's actually three methods here #5600
........
											
										 
											2009-03-30 14:51:56 +00:00
										 |  |  |    :numbered: | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    extending.rst
 | 
					
						
							|  |  |  |    newtypes.rst
 | 
					
						
							|  |  |  |    building.rst
 | 
					
						
							|  |  |  |    windows.rst
 | 
					
						
							| 
									
										
										
										
											2014-03-13 22:13:45 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | Embedding the CPython runtime in a larger application
 | 
					
						
							|  |  |  | =====================================================
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Sometimes, rather than creating an extension that runs inside the Python
 | 
					
						
							|  |  |  | interpreter as the main application, it is desirable to instead embed
 | 
					
						
							|  |  |  | the CPython runtime inside a larger application. This section covers
 | 
					
						
							|  |  |  | some of the details involved in doing that successfully.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. toctree::
 | 
					
						
							|  |  |  |    :maxdepth: 2
 | 
					
						
							|  |  |  |    :numbered: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    embedding.rst
 |