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
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
C拡張と共に乗り切るPython 2→3移行術
Search
Takumi Sueda
September 18, 2018
Technology
3.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
C拡張と共に乗り切るPython 2→3移行術
PyCon JP 2018 Conference Day 2 15:45~
Takumi Sueda
September 18, 2018
More Decks by Takumi Sueda
See All by Takumi Sueda
三人寄ればチューリング完全
puhitaku
6
3.5k
これまでのハード遊びまとめ ノンストップ40分スペシャル
puhitaku
1
350
令和最新版 OpenWrt を 22 年前のルーターで動かす
puhitaku
0
7k
組み込みLinuxの時系列
puhitaku
4
2k
電子辞書にステータスバーを実装する
puhitaku
0
440
知育おもちゃの遊び方 Lv. 999
puhitaku
5
3.6k
ルーターでプレゼンする
puhitaku
1
8.2k
AST as Black Magic
puhitaku
0
220
次世代の足下を舗装するコミュニティ
puhitaku
6
2k
Other Decks in Technology
See All in Technology
omasushiというライブラリを作った
polidog
PRO
0
160
GoCon2026 - Open Source, Open World
sanposhiho
2
610
AIで仕事のやり方を変える
matsu7874
3
1k
AIオーケストレーションを活用した 開発ワークフローの設計と実践
bqnq
0
110
多摩川(.dev)ランニング入門 / Tamagawa.dev#3
fujiwara3
3
430
2026-09-04 SRE Tech Talk #15 怠惰なTerraform / Lazy Terraform
masasuzu
0
230
AIに丸投げしないトイル削減 / Eliminating Toil Without Leaving It All to AI
kohbis
4
1k
AI活用の現在地、 ちゃんと見えてますか?/XPfest-2026
visional_engineering_and_design
0
170
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
2
470
Bet AI Day 2026丨How We Bet AI: AIとともに働く場をつくる
layerx
PRO
2
2.8k
20260912_スクフェス三河
kgnkhkr
0
110
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/6 - 2026/8
oracle4engineer
PRO
0
130
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
590
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
340
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
202
76k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
So, you think you're a good person
axbom
PRO
2
2.1k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Making the Leap to Tech Lead
cromwellryan
135
10k
The Language of Interfaces
destraynor
162
27k
WENDY [Excerpt]
tessaabrams
12
39k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Transcript
$䭁䓸הⰟח⛦ⴖ1ZUIPO̔獳遤遭 CZ(3007&9 *OD劣歊⼾䊻 1Z$PO+1$POGFSFODF%BZ!㣐歊⼒欵噟فٓؠ1J0
荈䊹稱➜ 2 • 爡ⰻדכ-JOVYװ'1("הְ⡚ٖ؎َ٦䬐䔲 • չת1ZUIPO⢪גדַׅպה鎉ֲ⤘ • 1ZUIPO娖䎃 1ZUIPOדⰅ •
䪮遭鐰锷爡8&# %#13&447PMחג1ZUIPO暴꧊㛁瘗 1ZUIPOד״ֻ剅ֻֿה٥䖤䠐זذ٦و • ⤑ⵃ麣Ⱗ⡲ • 鎉铂堣腉崞欽׃1ZUIPOٌآُ٦ٕ⡲ • ًةفؚٗٓىؚٝ @puhitaku 劣歊⼾䊻ִֻׅ (3007&9吳䒭⠓爡䨽㾩
50$ ְֶׁ1ZUIPO儗➿ך穄提 (3007&9爡ⰻדכ˘ 䭁䓸ٌآُ٦ٕך⯔ה䕦 ✼䳔⻉׃״ֲ
תה 3
1ZUIPO儗➿ך穄提
1ZUIPO儗➿ך穄提 勻䎃 1ZUIPOך؟ه٦زכ 穄✪׃תׅ 5
1ZUIPO儗➿ך穄提 ְא穄 ˖ 䎃剢傈 ˖ デ濼䔲ⴱכ傈➰ָ寸תגְזַָծ➙䎃剢ח然㹀 ˖ https://github.com/python/devguide/pull/344 זח˘ ˖
1ZUIPOPSHה׃גך؟ه٦زכ穄גծ04ر؍أزٔؽُ٦ ءّٝח״גכ䲿⣘ׁ竲ֽך ˖ ⢽6CVOUV-54䎃剢 ‣ ؟ه٦ز㼎韋ךANBJOAٔهآزٔחָ֮ ˖ ⢽3)&-䎃剢 ‣ 植遤ךדEFQSFDBUF ד嶊ִ 6
1ZUIPO儗➿ך穄提 דֹꣲ傍ֻ 1ZUIPOח獳遤׃ְ 7
1ZUIPO儗➿ך穄提 ּׅ1ZUIPOח獳遤הכְַזְ✲ָ㢳ְ فٗتؙزⰋ⡤ד1ZUIPOؖحخٔ⢪גְ ӹ ;VMJQך獳遤⢽ָ涯ְ https://qiita.com/t2y/items/2a1310608da7b5c4860b ֿך؝٦سח⣛㶷׃גְⴽך1ZUIPOך؝٦سָ֮
爡ⰻך㡦孡ָ넝ת׆אְ1ZUIPOד剅ֻ➂ָ㢳ְ 8 ׃ַ׃˘ 䒦爡ך㜥さכֿהכ麩ֲ㔭ꨇָ䖉「ֽגְ˘
1ZUIPO儗➿ך穄提 9 䧮ղ㔭ׇ 婍אך؛٦أָ˘
1ZUIPO儗➿ך穄提 10 䧮ղ㔭ׇ 婍אך؛٦أָ˘ $ד剅ַ䭁䓸ٌآُ٦ٕ
(3007&9爡ⰻדכ˘
(3007&9爡ⰻדכ˘ ؙٓؐسך״ֲזչֶꆃ琎ד䚍腉أ؛٦ٕպָ דֹזְծيتװنزٕطحؙכ噰⸂搀ֻ׃ְ 暴ח⡚ٖ؎َ٦דծ㹋鄲ך嚂ׁ״넝鸞ז⹛⡲ָ銲実ׁ אךٌآُ٦ٕח㢳ֻך،فָٔ⣛㶷ֿׅהָ֮ 12 䒦爡דכٗنحز⡲גְծ暴剣ך✲䞔ָ֮
ٗنحزⰻד⢪Ⱏ剣ًٌٌٔآُ٦ָֿٕח鑩䔲׃
(3007&9爡ⰻדכ˘ Ⱏ剣ًٌٌٔآُ٦ٕ TIN הכ 13 ӹ إٝ؟װو؎؝ٝהװהׅ⦼呓秛׃Ⱏ剣ًٌٔח،ؙإأׅ ٌآُ٦ٕ ӹ نزٕطحؙחזה䚍腉ח湫䷼ׅךד㢳㼰؝٦سָꨇ׃ֻזגד
鸞ֻ׃ְծ瘝ך椚歋ח״$"1* ぐ鎉铂ぢֽغ؎ٝر؍ؚٝ䱰欽 ӹ ٗنحزךⵖ䖴ח♶〳妀זךד㢳ֻך،فָٔ⣛㶷 3". TINٌآُ٦ٕ 104*9Ⱏ剣ًٌٔ 1ZUIPO ،فٔ TZOD EBFNPO TINٌآُ٦ٕ 1ZUIPO ،فٔ 1): 41* *$ و؎؝ٝ
(3007&9爡ⰻדכ˘ TINٌآُ٦ٕך⚥魦 ˖ TIN⡲䧭װ䱖➭ⵖ䖴 QUISFBENVUFY $ד㹋鄲׃$"1* ˖ $"1*פך،ؙإأ䲿⣘ׅ$ ٥(P٥1ZUIPOغ؎ٝر؍ؚٝ $BMMTUBDL
⢽PQFO 14 1ZUIPO 1ZUIPOغ؎ٝر؍ؚٝ$䭁䓸ٌآُ٦ٕ liblovot_shm_py.so $"1* lovot_shm_py_open(PyObject* self, PyObject* args) lovot_shm_open(char* path) uint64_t PyObject*
䭁䓸ٌآُ٦ٕך⯔ה䕦
䭁䓸ٌآُ٦ٕך⯔ה䕦 1ZUIPOPSHך سًُؗٝز刹ֻ 16
䭁䓸ٌآُ٦ٕך⯔ה䕦 17 GSPNhttps://docs.python.jp/3/extending/extending.html ˑ$فؚٗٓيך剅ֹ倯濼גְזծ1ZUIPOח倜ז 穈鴥ٌآُ٦ٕ鷄⸇ׅךכֹג知⽃דׅկ˒ ˑ倜׃ְ穈鴥ؔـآؙؑزך㹋鄲ծ׃גⰋגך$ٓ؎ـٓٔꟼ侧 הءأذي؝٦ٕח㼎ׅㄎן⳿׃ծָדֹ״ֲחזתׅկ˒
䭁䓸ٌآُ٦ٕך⯔ה䕦 18 GSPNhttps://docs.python.jp/3/extending/extending.html ˑ$فؚٗٓيך剅ֹ倯濼גְזծ1ZUIPOח倜ז 穈鴥ٌآُ٦ٕ鷄⸇ׅךכֹג知⽃דׅկ˒ ˑ倜׃ְ穈鴥ؔـآؙؑزך㹋鄲ծ׃גⰋגך$ٓ؎ـٓٔꟼ侧 הءأذي؝٦ٕח㼎ׅㄎן⳿׃ծָדֹ״ֲחזתׅկ˒ ؕح؛٦
䭁䓸ٌآُ٦ٕך⯔ה䕦 19 GSPNhttps://docs.python.org/ja/3/howto/cporting.html ˑ$䭁䓸ך؎ٝة٦ؿؑ؎أכ$1ZUIPOח㔿剣ךךד֮ծ ֿח״䭁䓸ٌآُ٦ٕכקַך1ZUIPO㹋鄲דכ⹛⡲׃תׇկ˒ ˑ 1ZUIPOדכ 㢌刿ָֻׁ֮ךדծ 1ZUIPOך"1*搀⫊ד幥תׇֿהכדֹתׇד׃կ˒ GSPNhttps://docs.python.jp/3/extending/extending.html
䭁䓸ٌآُ٦ٕך⯔ה䕦 20 䭁䓸ٌآُ٦ٕך"1*חכ ًآٍ٦غ٦آّٝד✼䳔䚍ָזְ 1ZUIPO✼䳔חׅחכ 䗳׆何鸡ָ䗳銲
䭁䓸ٌآُ٦ٕך⯔ה䕦 㣐㢌ֲָ װ׃ַזְ 21
✼䳔⻉׃״ֲ
✼䳔⻉׃״ֲ ַֿֿכ؟ٝفٕ⢪ג铡僇׃תׅ CFGPSFـٓٝثהBGUFSـٓٝث鋅嫰ץגי 23 github.com/puhitaku/pyconjp_2018_c_ext
✼䳔⻉׃״ֲ pyconjp_2018_c_ext, beforeـٓٝثך⚥魦♧鿇殛 libhelloworldהְֲ$䭁䓸ٌآُ٦ָٕ֮ծhelloworldػح؛٦آ ַㄎן⳿ׅկ1ZUIPOד⹛⡲ׅկ 24 ְײTFUVQQZ 䭁䓸ٌآُ٦ٕ劤⡤ 䖓חlibhelloworld.soחז 䭁䓸ٌآُ٦ٕㄎעػح؛٦آ
俑㶵 )FMMP 8PSME 鵤ׅꟼ侧 غ؎ز Y'&&%$"'& 鵤ׅꟼ侧 pyconjp_2018_c_ext/src/helloworld.c ✼䳔⻉׃״ֲ$箟 25
✼䳔⻉׃״ֲ 24
✼䳔⻉׃״ֲ$箟 26 pyconjp_2018_c_ext/src/helloworld.c ٌآُ٦ٕ ꟼ侧㹀纏 ٌآُ٦ٕ ⴱ劍⻉ ✼䳔⻉׃״ֲ 25
✼䳔⻉׃״ֲ pyconjp_2018_c_ext/helloworld/__init__.py libhelloworldךꟼ侧ㄎן⳿ׅ؝٦سկ鋅湡鸐1ZUIPOד⹛⡲ׅկ 27
✼䳔⻉׃״ֲ pyconjp_2018_c_ext/setup.py 䭁䓸ٌآُ٦ٕךؽٕس䭷㹀ָ֮⟃㢩כ兛鸐ךsetup.pyկ 28
✼䳔⻉׃״ֲ pyconjp_2018_c_ext/setup.py 䭁䓸ٌآُ٦ٕךؽٕس䭷㹀ָ֮⟃㢩כ兛鸐ךsetup.pyկ 29
✼䳔⻉׃״ֲ 1ZUIPO דך؎ٝأز٦ٕ 30
✼䳔⻉׃״ֲ 1ZUIPO דך⹛⡲ 31
✼䳔⻉׃״ֲ ד⹛⡲ָ然钠 דֹהֿד˘ ד鑐׃גת׃׳ֲ 32
✼䳔⻉׃״ֲ$箟 1ZUIPO דך؎ٝأز٦ٕ 33 搀⸇䊨דזְְַ䠬ׄח4VDDFTTׅ
✼䳔⻉׃״ֲ 1ZUIPO דך⹛⡲ 34 דׅ״י։
✼䳔⻉׃״ֲ ⥜姻IFMMPXPSME@@JOJU@@QZ ˖ ְאךfrom __future__ import print_function 35
✼䳔⻉׃״ֲ ٔكٝآ 36
✼䳔⻉׃״ֲ JNQPSU 37 כ
✼䳔⻉׃״ֲ JNQPSU 38 Symbol not found: _Py_InitModule
✼䳔⻉׃״ֲ הדכ䭁䓸ٌآُ٦ٕך 㹑鎉٥ⴱ劍⻉倯岀ָ麩ֲ 1ZUIPO⩎ד ٌآُ٦ٕ钠陎דֹגְזְ 39
✼䳔⻉׃״ֲ דכ˘ void initϞδϡʔϧ໊ (void)הְֲءؚطثٍךꟼ侧ך⚥ד Py_InitModule("Ϟδϡʔϧ໊", PyMethodDef*); 㹋遤ׅկ PyMethodDef*כծٌآُ٦ٕꟼ侧ךꂁ 40
✼䳔⻉׃״ֲ 41 דכ˘ PyModuleDef圓鸡⡤ך؎ٝأةٝأ⡲ծ PyMODINIT_FUNC PyInit_libϞδϡʔϧ໊(void);הְֲءؚطثٍך ꟼ侧ך⚥דPyModule_Create(*PyModuleDef)ח床׃PyObject*鵤ׅկ
✼䳔⻉׃״ֲ ٥٥٥ 42
✼䳔⻉׃״ֲ ♧ַ⼧תד麩ֲ 43
✼䳔⻉׃״ֲ ♧ַ⼧תד麩ֲ 44 הוד⢪ֲחכ ♧⡤וֲׅל
✼䳔⻉׃״ֲ 45 ֮ׄׯזְַ
✼䳔⻉׃״ֲ 46 $חכ ֮ׄׯזְַ
✼䳔⻉׃״ֲ 47 فٔفٗإح؟ָ $חכ ֮ׄׯזְַ
✼䳔⻉׃״ֲ 48 ؝ٝػ؎ָٕ饥ח؝٦سךך ⴖ剏ִלְְ
✼䳔⻉׃״ֲ 49
✼䳔⻉׃״ֲ 50
✼䳔⻉׃״ֲ ٔٔكٝآ 51
✼䳔⻉׃״ֲ 52 JNQPSU䧭⸆ import helloworld
✼䳔⻉׃״ֲ 53 )FMMP8PSME䧭⸆ helloworld.hello()
✼䳔⻉׃״ֲ 54 6OJDPEF%FDPEF&SSPS helloworld.hello_hex()
✼䳔⻉׃״ֲ 55 6OJDPEF%FDPEF&SSPS helloworld.hello_hex() ⸇ִג5SBDFCBDLך䞔㜠ך搀ׁ
✼䳔⻉׃״ֲ 56 וָֿ䚓׃ְה䙼ְתַׅ 月➂䱱׃ Ύ Ώ ΐ
✼䳔⻉׃״ֲ 57 ൜ਓ Py_BuildValue • Py_BuildValue()٥٥٥鵤⦼ךةفٕ⡲ꟼ侧 • "s#"٥٥٥char*ךꞿׁ䭷㹀׃ג1ZUIPOךstrח׃ג鵤ׅ • bin٥٥٥(unsigned
char*) 0xfeedcafe • sizeof(bin)٥٥٥binךꞿׁɺͭ·Γ 4
✼䳔⻉׃״ֲ 58 ൜ਓ Py_BuildValue鵤⦼ךةفٕ⡲ꟼ侧 • "s#"٥٥٥char*ךꞿׁ䭷㹀׃ג1ZUIPOךstrח׃ג鵤ׅ • bin٥٥٥(unsigned char*) 0xfeedcafe
• sizeof(bin)٥٥٥binךꞿׁɺͭ·Γ 4 1ZUIPOדךTUSכײסغ؎ز 1ZUIPOדךTUSכ6OJDPEF俑㶵 Y'&ך儗挿ד6OJDPEFה׃ג鍑ꅸדֹזְؒٓ٦חז
✼䳔⻉׃״ֲ 59 ⟣䠐ךغ؎زכ bytes ח׃ג鵤׃ת׃׳ֲ • "s#"٥٥٥char*ךꞿׁ䭷㹀׃ג1ZUIPOךstrח׃ג鵤ׅ • "y#"٥٥٥char*ךꞿׁ䭷㹀׃ג1ZUIPOךbytesח׃ג鵤ׅ
✼䳔⻉׃״ֲ ٔٔٔكٝآ 60
✼䳔⻉׃״ֲ 61 JNQPSU䧭⸆ import helloworld
✼䳔⻉׃״ֲ 62 )FMMP8PSME䧭⸆ helloworld.hello()
✼䳔⻉׃״ֲ 63 Y'&&%$"'&䧭⸆ helloworld.hello_hex()
תה
תה 65 1ZUIPOד✼䳔䚍ךזְ俑岀װٌآُ٦ٕכ @@GVUVSF@@ TJY QZUIPOGVUVSF瘝ד✼䳔䚍然⥂ ٌآُ٦ٕךؒٝزٔه؎ٝزָⰋֻ殯ז鿇ⴓכ فٔفٗإح؟JG FMTF FOEJGד⛦ⴖ
6OJDPEF%FDPEF&SSPSכקר黧麀׃תׅ TUS⢪欽皘䨽כCZUFTח湫ׅ䗳銲ָזְַثؑحؙ
תה 䞔㜠ꆀ㢳ְךד ֮הדֻׄ铣דגְֻׁ 66 github.com/puhitaku/pyconjp_2018_c_ext