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 settingsinclude/- put your C++ files hereplugins/- 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 classMETHOD(name)- expose a methodFUNC(name)- expose a functionFIELD(name)- expose a member variableCONSTRUCTOR()orCONSTRUCTOR(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
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file includecpp-4.6.0.tar.gz.
File metadata
- Download URL: includecpp-4.6.0.tar.gz
- Upload date:
- Size: 2.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09e14830cfd3d9568649fea7f47f94fd4a9ac1afa18eb7eb903260b3befb3705
|
|
| MD5 |
e5b233ebe54450d4224ee501d2922e7d
|
|
| BLAKE2b-256 |
7ea299f3bb704677323223b9714b155da989347ae2304d9143592951eac1ea72
|
File details
Details for the file includecpp-4.6.0-py3-none-any.whl.
File metadata
- Download URL: includecpp-4.6.0-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b18c6a8f1c3018eea3ef703f369144c8f7113a2095e3772e41eb4d11dfa87366
|
|
| MD5 |
a6a21e650e9c8f31e1b6ac62b8165028
|
|
| BLAKE2b-256 |
5a8685300eeffcd6b323fad5e23f299738aa6debd367e8ea8b27519ce8922c6f
|