Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
pyconjp2024-wince
Search
らすぴー
September 28, 2024
Technology
0
21
pyconjp2024-wince
らすぴー
September 28, 2024
Tweet
Share
More Decks by らすぴー
See All by らすぴー
限界環境CPython rev. seccamp2025
raspython3
0
28
kernel-vm-ittekita-yuukousai
raspython3
0
72
kernelvm-brain-net
raspython3
0
940
seccamp2024-edictionary-python-TLS
raspython3
0
22
Other Decks in Technology
See All in Technology
Snowflake だけで実現する “自立的データ品質管理” ~Data Quality Monitoring 解説 ~@ BUILD Meetup: TOKYO 2025
ryo_suzuki
0
120
まだ間に合う! Agentic AI on AWSの現在地をやさしく一挙おさらい
minorun365
17
2.4k
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
110
20251219 OpenIDファウンデーション・ジャパン紹介 / OpenID Foundation Japan Intro
oidfj
0
450
AWSに革命を起こすかもしれない新サービス・アップデートについてのお話
yama3133
0
480
AgentCore BrowserとClaude Codeスキルを活用した 『初手AI』を実現する業務自動化AIエージェント基盤
ruzia
7
1.1k
20251222_next_js_cache__1_.pdf
sutetotanuki
0
170
Snowflake導入から1年、LayerXのデータ活用の現在 / One Year into Snowflake: How LayerX Uses Data Today
civitaspo
0
2.2k
mairuでつくるクレデンシャルレス開発環境 / Credential-less development environment using Mailru
mirakui
5
590
1人1サービス開発しているチームでのClaudeCodeの使い方
noayaoshiro
2
570
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
9.9k
_第4回__AIxIoTビジネス共創ラボ紹介資料_20251203.pdf
iotcomjpadmin
0
120
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
130
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
170
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
Typedesign – Prime Four
hannesfritz
42
2.9k
Google's AI Overviews - The New Search
badams
0
870
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.2k
Transcript
Python3をWindows CEに 移植した話 らすぴー(@RasPython3) 1
目次 1. 事の発端 2. PythonCEとは 3. Pythonのバージョン選定 4. パッチ適用 5.
Pythonのビルドツール 6. ビルドツールの選定 7. configure.acの改造 8. Makefile.pre.inの改造 9. WinCEに無い関数の実装 10.コンソール問題 11.同名DLL 12.その他の問題 13.追加モジュールについて 2
事の発端 電子辞書でPythonをいじりたかったが、動作するPythonのバー ジョンが2.5と古かった そこでPython3はないのかと調べてみたが無さそう 3
事の発端 …じゃあ移植しちゃえばいいのでは 4
PythonCEとは • 2007年頃まで開発されていた、WinCEで動くCPython • v2.3.4-v2.5まで対応 • 独自コンソールにより対話モードが使用可能 • numarrayなど一部の追加モジュールも https://sourceforge.net/projects/pythonce/
5
Pythonのバージョン選定 移植開始時期 … 2023年4月頃 → v3.10.10 3.9 3.10 3.11 3.12
6
パッチ適用 Python2.5から時が流れ、WinCE用の記述はほぼ消えている そのため、2.5当時の記述を引っ張ってくる必要があった 手がかり • PythonCEのreadme • WinCE用のマクロ等 … _WIN32_WCEやMS_WINCE
• 3.6の時に適用された、WinCE対応の名残を削除するコミット 7
パッチ適用 https://github.com/python/cpython/commit/10108a7b9affa61719a1dc18 63edb2bdb3402fd1 Windows CEのサポートを削除した。 それは完了することはなく、Windows CEは もはやPythonに関連するプラットフォームではない。 8
Pythonのビルドツール • Makefile + gcc … LinuxとMac • VS +
VC++ … Windows • SCons + eVC4 … Windows CE (PythonCE) 9
ビルドツールの選定 当時使用できた環境 • Raspberry Pi 3B & ZeroW • Chromebook
→Windows系のビルドツールの使用が困難 →WinCE向けのgcc「cegcc」を使うしかない 10
ビルドツールの選定 そういえば… 1. Windows用の追加のソースはPC以下にまとまっている 2. Linuxで使うソースファイルの多くはWindowsでも使ってい る →Linuxのビルドスクリプトに手を加えたらどうにかなるのでは 11
configure.acの改造 まずは何も手を加えずに ./configure --host=mingw32ce --target=mingw32ce mingw32ceは非対応とエラー →WinCE用の記述を追加 12
Makefile.pre.inの改造 WinCEで使うソースファイルのリストを記述 • Windowsで使うソースファイル • PythonCEに存在したWinCE用のソースファイル • PC/wince_compatibility.* • PC/WinCE/_tkinter/*
• 今回の移植で新たに作成したファイル • WinCE/* • Modules/_io/winceconsoleio.c 13
WinCEに無い関数の実装 主にPC/wince_compatibility.*で対応 • strerr • wcsnlen • dup • CommandLineToArgvW
• CreateSymbolicLink • GetFileType • *_s 14
コンソール問題 コンソールがない場合(電子辞書など)、Pythonの標準入出力を扱 えない PythonCEでは独自のコンソールを用意していたが、Pythonのプ ログラムによる疑似コンソールだった →Win32APIで窓を作り、readlineやWriteConsoleを独自実装 15
コンソール問題 問題発生 … 電子辞書でstdinやstdoutが使えない stdin, stdout, stderrのファイル記述子は本来は0, 1, 2 そのすべてが無効になっていた(-1)
→filenoやisattyを別に実装して偽装 16
同名DLL WinCEでは、ロードを試みるDLLと同名のDLLをほかのプログラ ムがすでにロードしていた場合、ロード済みのDLLを使いまわす →複数のPythonが入っていると挙動がおかしくなる 例 • Python3の_tkinter.pydを読み込もうとしてPythonCEの _tkinter.pydを使おうとしてしまう • Python3.10.14のpython310.dllを使おうとしてpython3.10.0の
ものを使ってしまう 17
同名DLL 解決策 • *.pyd→*.cp310-wince_arm.pydに変更 • python310.dllとpython3.10.exe双方にハッシュ値を埋め込み、 実行時に検証する 18
その他の問題 • 環境変数がない environ.iniという設定ファイルを作成、また--env-setや--env-pathオプ ションを追加することで対応 • pyファイルを直接実行できない レジストリにpyファイルが登録されないため、pyファイルをダブルク リックしても実行できない →PYTHONASSOCIATEREGという環境変数によって、起動時にレジス
トリ設定をできるように 19
その他の問題 • ModuleNotFoundError: No module named ‘os’ なぜかosがインポートできない(!?) 原因: os.pyがOS.PYになっていた!
→PYTHONCASEOKを設定することにより対応 • python310._pthを使った時の挙動がなんか変 なんかドキュメントに書いてある通りの挙動じゃない… →ドキュメントの日本語訳が間違っていた! 20
追加モジュールについて 現在、以下の3つの追加モジュールが移植されている • cffi • cryptography • 現行バージョンはRust使用のため古いバージョンのみ • PyCryptoDome
21
追加モジュールについて cryptographyや標準のsslモジュールを動作させるためには OpenSSLが必要 海外の方で、OpenSSLをWinCEに移植している人がいた が、電子辞書では動作せず… さらに、そのビルドにはVCを使っていた https://www.hpcfactor.com/forums/forums/thread-view.asp?tid=20731&start=1 22
追加モジュールについて そこで、cegccでOpenSSLをビルドすることを試みた ところが、OpenSSLもerrnoや環境変数を使うためビルドに失敗 これらも独自に実装すると、かなり面倒なことになる →Pythonで使うことを前提に、python310.dllに依存させたら いいのでは 23
追加モジュールについて 結果…うまくいった! これがうまくいかなかった場合、別途フル装備のcoredllを 使わなければならず、ライセンスの問題で配布が困難だった 最終的に、Pythonのビルド途中でOpenSSLもビルドして、 PythonのDLLに変化があっても問題なく動作できるようにした 24