CONTENTS 1 Recommended third party tools 3 2 Creating extensions without third party tools 5 3 Embedding the CPython runtime in a larger application 59 3.1 Embedding Python in Another Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.1.1 Very High Level Embedding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.1.2 Beyond Very High Level Embedding: An overview . . . . . . . . . . . . . . . . . . . . . 60 3.1.3 Pure Embedding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.1.4 Extending Embedded Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 i 2.1 Extending Python with C or C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.1 A Simple Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.1.2 Intermezzo: Errors and Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.3 Back to the Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.1.4 The Module’s Method Table and Initialization Function . . . . . . . . . . . . . . . . . . 9 2.1.5 Compilation and Linkage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.6 Calling Python Functions from C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1.7 Extracting Parameters in Extension Functions . . . . . . . . . . . . . . . . . . . . . . . 13 2.1.8 Keyword Parameters for Extension Functions . . . . . . . . . . . . . . . . . . . . . . . . 14 2.1.9 Building Arbitrary Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.10 Reference Counts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.1.11 Writing Extensions in C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.1.12 Providing a C API for an Extension Module . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2 Defining Extension Types: Tutorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2.1 The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.2.2 Adding data and methods to the Basic example . . . . . . . . . . . . . . . . . . . . . . . 26 2.2.3 Providing finer control over data attributes . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.2.4 Supporting cyclic garbage collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.2.5 Subclassing other types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.3 Defining Extension Types: Assorted Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.3.1 Finalization and De-allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.3.2 Object Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 2.3.3 Attribute Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.3.4 Object Comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.3.5 Abstract Protocol Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.3.6 Weak Reference Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.3.7 More Suggestions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.4 Building C and C++ Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.4.1 Building C and C++ Extensions with distutils . . . . . . . . . . . . . . . . . . . . . . . . 55 2.4.2 Distributing your extension modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.5 Building C and C++ Extensions on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.5.1 A Cookbook Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.5.2 Differences Between Unix and Windows . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.5.3 Using DLLs in Practice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58