Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Writing a Python C extension in 2018
Search
Jean-Baptiste Aviat
May 16, 2018
Programming
1.2k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Writing a Python C extension in 2018
Jean-Baptiste Aviat
May 16, 2018
Transcript
26 slides
Writing a C Python extension in 2018 Paris.py 2018
Jean-Baptiste Aviat CTO & Co-founder of sqreen.io Former Hacker at
Apple (Red Team) PyMiniRacer author
[email protected]
@jbaviat Who Am I?
Someday… we needed to use V8 from Python. What we
ship: • is public • is widely used • need to have frictionless install $ pip install sqreen —> it just works™!
None
PyMiniRacer: cool JS binding github.com/sqreen/PyMiniRacer
The problem • V8 is C++ • How do you
run C++ in Python? …We need some kind of binding between these 2 worlds.
Many popular packages rely on binary cryptography numpy pymongo psycopg
simplejson lxml sqlalchemy…
People do it! Let’s do it too.
What are our goals? • minimize maintenance • make setup
easy • make testing easy • have great performance • have low memory fingerprint • dev time is a constraint We want to: And (obviously)…
built-in pythonic Python version independant open to other languages high
throughput capable CPython ✔ ✔ ✔ ctypes ✔ ✔ ✔ cffi ✔ ✔ ✔ ✔ Cython ✔ ✔ SWIG ✔ ✔
ctypes Built into Python Binary is Python independant: • can
be used on any Python version • can be used in other languages! No tight integration to Python • not high throughput capable • less Pythonic Complex syntax (C types wrapped in Python…) Not for C++
$ python >>> path = "./hello.so" >>> import ctypes >>>
lib = ctypes.cdll.LoadLibrary(path) >>> lib.hello_world() Hello world! C file Python interface binary object
Overview V8 (C++ interface) C interface to V8 Python interface
3rd party binaries import ctypes class PyMiniRacer(object): … #include <v8.h> int miniracer_init(); … V8 library (libv8.a) V8 headers (v8.h) linking ctypes C/C++ code Python library
How to put this together? $ cat setup.py from distutils.core
import setup, Extension extension = Extension('hello', ['hello.c']) setup(name=‘hello', version='1.0', ext_modules=[extension]) $ python setup.py build running build running build_ext building 'hello' extension clang […] -c hello.c -o hello.o creating build/lib.macosx-10.6-intel-2.7 clang -bundle […] hello.o -o hello.so
None
None
Ship it
Ever had trouble installing packages?
None
(at Sqreen, we are dog friendly) Come get your dog
sticker!
Python packaging history sdist (source distribution) eggs wheels —> manylinux
wheels (built distribution) 2004 2012 2016 Python 2.4 Python 3.3 Python 3.6 ❤
manylinux wheels Python standard: PEP513 / PEP571 Compatible on most
(real world) Linux Only in pip >= 8.1 Need build for all Python versions Binaries need to be built on CentOS 5
CentOS 5?? PEP571 → bumped requirement to CentOS 6!
Wheels vs compilation iso builds (crash can be reproduced) many
packages need maintenance one build per user only one package harder to install…
Best of 2 worlds We can have: ctypes: use a
Python independant binary wheels: ship compiled binaries By combining these… ctypes + wheels = ship only one binary
Thanks! Questions? We’re hiring! https://sqreen.io/jobs
More Decks by Jean-Baptiste Aviat
See All by Jean-Baptiste Aviat
Content Security Policy in your Rails apps in 30s
aviat
0
340
App Security is just a Git flow (with built-in conflicts)
aviat
0
1.2k
Tune your App Perf (and get fit for summer)
aviat
2
560
Other Decks in Programming
See All in Programming
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
260
Spec-Driven Development - Why Vaadin Is the Perfect Fit
simas
PRO
0
240
Next.js: The final boss of Web Performance
guaca
0
400
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
2k
AIが実装を担う時代の「技術設計」と「チームマネジメント」
kamina_zzz
2
250
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.8k
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
330
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
220
AWS CDKを理解するために公式の定義を深掘って解説してみる / Understanding AWS CDK by Digging into Its Official Definition
akihisaikeda
3
300
Performance Optimization With LLMs
xleitix
0
250
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
590
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
120
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.4k
Crafting Experiences
bethany
1
430
Color Theory Basics | Prateek | Gurzu
gurzu
1
520
How to build a perfect <img>
jonoalderson
1
6.2k
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
620
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.9k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
320
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Designing for Performance
lara
612
70k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
How to make the Groovebox
asonas
2
2.5k