Skip to main content

Professional C++ Python bindings with type-generic templates, pystubs and native threading

Project description

IncludeCPP

Use C++ code in Python. Write your C++ functions and classes, IncludeCPP generates the Python bindings automatically.

pip install IncludeCPP

Quick Start

1. Create a Project

mkdir myproject && cd myproject
includecpp init

This creates:

  • cpp.proj - your project settings
  • include/ - put your C++ files here
  • plugins/ - binding files go here (auto-generated)

2. Write Some C++

Create include/math.cpp:

namespace includecpp {

int add(int a, int b) {
    return a + b;
}

int multiply(int a, int b) {
    return a * b;
}

}

Your code must be inside namespace includecpp. Everything outside is ignored.

3. Generate Bindings

includecpp plugin math include/math.cpp

This scans your C++ and creates plugins/math.cp with the binding instructions.

4. Build

includecpp rebuild

Compiles your C++ into a Python module.

5. Use in Python

from includecpp import math

print(math.add(2, 3))       # 5
print(math.multiply(4, 5))  # 20

Done. Your C++ code works in Python.


Classes

C++ classes work the same way:

// include/calculator.cpp
#include <vector>

namespace includecpp {

class Calculator {
public:
    Calculator() : result(0) {}

    void add(int x) { result += x; }
    void subtract(int x) { result -= x; }
    int getResult() { return result; }
    void reset() { result = 0; }

private:
    int result;
};

}

Generate and build:

includecpp plugin calculator include/calculator.cpp
includecpp rebuild

Use in Python:

from includecpp import calculator

calc = calculator.Calculator()
calc.add(10)
calc.add(5)
calc.subtract(3)
print(calc.getResult())  # 12

Development Workflow

When you're actively working on your C++:

# Regenerate bindings AND rebuild in one command
includecpp auto math

# Fast rebuild (skips unchanged files, ~0.4s when nothing changed)
includecpp rebuild --fast

# Rebuild everything from scratch
includecpp rebuild --clean

CLI Commands

Command What it does
init Create project structure
plugin <name> <file.cpp> Generate bindings from C++
auto <name> Regenerate bindings + rebuild
rebuild Compile all modules
rebuild --fast Fast incremental build
rebuild --clean Full clean rebuild
get <name> Show module's API

Project Configuration

The cpp.proj file controls your build:

{
  "project": "MyProject",
  "include": "/include",
  "plugins": "/plugins",
  "compiler": {
    "standard": "c++17",
    "optimization": "O3"
  }
}

Plugin Files (.cp)

The .cp files tell IncludeCPP what to expose. They're auto-generated, but you can edit them:

SOURCE(calculator.cpp) calculator

PUBLIC(
    calculator CLASS(Calculator) {
        CONSTRUCTOR()
        METHOD(add)
        METHOD(subtract)
        METHOD(getResult)
        METHOD(reset)
    }
)

Common directives:

  • CLASS(Name) - expose a class
  • METHOD(name) - expose a method
  • FUNC(name) - expose a function
  • FIELD(name) - expose a member variable
  • CONSTRUCTOR() or CONSTRUCTOR(int, string) - expose constructor

Requirements

  • Python 3.9+
  • C++ compiler (g++, clang++, or MSVC)
  • CMake

pybind11 is installed automatically.


More Help

includecpp --doc           # Full documentation
includecpp --changelog     # Version history
includecpp <command> --help

Experimental Features

IncludeCPP also includes experimental features that are still in development:

  • CSSL - A scripting language for runtime code manipulation
  • AI Commands - OpenAI-powered code analysis (includecpp ai)
  • CPPY - Python to C++ conversion (includecpp cppy)

These are hidden by default. To enable them:

includecpp settings

Check "Enable Experimental Features" and save.

Warning: Experimental features may have bugs or breaking changes between versions.


Issues

Report bugs at: https://github.com/liliassg/IncludeCPP/issues

includecpp bug    # Quick bug report
includecpp update # Update to latest version

Project details


Release history Release notifications | RSS feed

This version

4.6.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

includecpp-4.6.1.tar.gz (2.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

includecpp-4.6.1-py3-none-any.whl (2.5 MB view details)

Uploaded Python 3

File details

Details for the file includecpp-4.6.1.tar.gz.

File metadata

  • Download URL: includecpp-4.6.1.tar.gz
  • Upload date:
  • Size: 2.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for includecpp-4.6.1.tar.gz
Algorithm Hash digest
SHA256 7cc5a925fc060a01bb27f83837711f1d49483495f797a0b6ea41423bb575b47f
MD5 15a5b86cf7b40c24893ef58d260f659f
BLAKE2b-256 38c9587d754a40097927dc1a1778c1d982a30088014efab988dfd1b5b6f78ad1

See more details on using hashes here.

File details

Details for the file includecpp-4.6.1-py3-none-any.whl.

File metadata

  • Download URL: includecpp-4.6.1-py3-none-any.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for includecpp-4.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bdbbbc61b9fb72971995a77c45611f14f9ac9c7c6e31b5461ffdbbce72e443bc
MD5 4979d5fa40370c491d58b7009693d481
BLAKE2b-256 f4f4ce1b6d71b95866d60f8010c8b41fa6ebef02357fa155a7ab1ce8f9a9ee64

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page