Skip to content

Instantly share code, notes, and snippets.

@i-infra
Forked from itdaniher/compile.py
Created July 17, 2025 07:49
Show Gist options
  • Save i-infra/efbc587195de9f70f56d1e83f78e257f to your computer and use it in GitHub Desktop.
Save i-infra/efbc587195de9f70f56d1e83f78e257f to your computer and use it in GitHub Desktop.
compile python script to ELF on Linux via cython and gcc
import subprocess
import sys
import tempfile
from Cython.Compiler import Main, CmdLine, Options
in_file_name = sys.argv[1]
source = open(in_file_name).read()
out_file_name = in_file_name.replace('.py', '.out')
temp_py_file = tempfile.NamedTemporaryFile(suffix='.py', delete=False)
temp_py_file.write(source.encode())
temp_py_file.flush()
Main.Options.embed = 'main'
res = Main.compile_single(temp_py_file.name, Main.CompilationOptions(), '')
gcc_cmd = 'gcc -fPIC -O2 %s -I/usr/include/python3.6 -L/usr/lib/python3.6 -lpython3.6m -o %s' % (res.c_file, out_file_name)
print(gcc_cmd)
assert 0 == subprocess.check_call(gcc_cmd.split(' '))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment