Python3の同時起動問題
背景
WindowsCEでは、同名の異なるdllを別々に読み込むことができない。
そのため、異なる時期にビルドされたpythonのlibpython3.10.dllや_tkinter.pyd(dll扱い)などが、それぞれのpythonを同時に起動した際に干渉して、誤った動作をしてしまう、という問題が発覚した。
わかっていること
*.pydについては、.cp310.pydに変更することで大きな不具合(Python3.10.10とPythonCE 2.5の干渉など)を防ぐことができるが、マイクロバージョン(3.10.xのx部分)が同じであれば効果がない。
libpython3.10.dllの名前を変更する場合、libpython3.10.zipも同様に変更する必要がある。
現状であれば、異なるpythonのlibpython3.10.dllを起動した場合、実質的に、そのdllが本来対になっているpythonのexeを起動したのと変わらない。
解決策
dllとzipのファイル名を変更する
libpython3.10.dllとlibpython3.10.zipのファイル名の末尾に、一意となるような文字列を付加する。
文字列の内容: 未定
メリット
同じバージョンの異なるバイナリの同時起動ができる。
起動プロセスは変更せずに済む。
デメリット
見た目がよくない。
ソースコード内の比較的散らばった場所の修正が必要。
.pydは干渉してしまう。
上の文字列の後半をマクロでexeとdllにハードコードしておく。
メリット
見た目が悪くならない。
せいぜい2箇所に手を加えるだけで良い。
同時に同じメジャー・マイナーバージョンが立ち上がらないため、.pydの干渉も発生しない。
デメリット
同時起動が不可能なままである。
起動プロセスにチェック処理を追加する必要がある。
Scalpelがpythonのdllを保持してしまっているままだと、python終了後でも他のpythonを起動できない。(おなじpythonは起動できる)