Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Writing a Python C extension in 2018
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
More Decks by Jean-Baptiste Aviat
See All by Jean-Baptiste Aviat
Content Security Policy in your Rails apps in 30s
aviat
0
330
App Security is just a Git flow (with built-in conflicts)
aviat
0
1.1k
Tune your App Perf (and get fit for summer)
aviat
2
550
Other Decks in Programming
See All in Programming
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
210
メールのエイリアス機能を履き違えない
isshinfunada
0
220
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
540
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.9k
Foundation Models frameworkで画像分析
ryodeveloper
1
600
Cloudflare is Agents
chimame
0
150
源内ハンズオン概要編
hideg
0
120
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
160
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.7k
その節約、円になってますか?
isamumumu
1
700
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.7k
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
950
Un-Boring Meetings
codingconduct
0
380
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
780
Abbi's Birthday
coloredviolet
3
9.3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
73
41k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
540
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
360
My Coaching Mixtape
mlcsv
0
200
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Writing Fast Ruby
sferik
630
63k
Transcript
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