Skip to main content

Import C files into Python, illegally.

Project description

Crimes

Blur the line between C and Python.

First, write some C code:

/* hello.c */
#include <stdio.h>

void hello(void) {
    printf("Hello world from C!\n");
}

Then import that C code into Python:

import crimes

crimes.commit()

from hello import hello

hello()  # prints "Hello world from C!"

All you had to do is call crimes.commit()!

What if I am a terrible C programmer?

Not to worry! crimes will print your syntax errors as part of the normal Python traceback:

/* hello.c */
#include <stdio.h>

/* missing ')' on the next line: */
void hello(void {
    printf("Hello world from C!\n");
}
import crimes

crimes.commit()

from hello import hello  # raises an error here

Gives you this error:

Traceback (most recent call last):
  File "/tmp/example.py", line 6, in <module>
    from hello import hello  # type: ignore
    ^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/hello.c", line 5, in hello.c
    void hello(void {
                    ^
crimes.exceptions.CCompileError: expected ';', ',' or ')' before '{' token

Install

[!WARNING] This is currently pretty hacky. I provide absolutely no guarantee that this will work on your machine. Here's how I got it working on my machine, which running macOS. I highly doubt this library works at all on Windows.

First, install the library:

pip install crimes

Next, make sure you have a compatible version of GCC. Any version of GCC 9.0 or greater should work. On most Linux distros, you probably already have this installed. On macOS though... Apple thought it was a good idea to symlink gcc to clang. This does not work. So first, install actual GCC using brew:

brew install gcc@13

Next, before using this module, make sure that CC is set to use gcc-13. You can do this universally like this:

export CC=gcc-13

...but I prefer to do it per-process:

env CC=gcc-13 python3 my-program-that-commits-crimes.py

Copying

Copyright © 2023 Eddie Antonio Santos. Apache-2.0 licensed. See LICENSE for details. Especially the Disclaimer of Warranty!

Project details


Download files

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

Source Distribution

crimes-0.1.0.tar.gz (10.1 kB view hashes)

Uploaded Source

Built Distribution

crimes-0.1.0-py3-none-any.whl (12.2 kB view hashes)

Uploaded Python 3

Supported by

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