Pythonのモジュール検索パスについて整理する
The initialization of the sys.path module search path — Python 3.12.1 ドキュメント
読むと._pth
を置くとデフォルトパスを上書きできるように思えたが、
実際は._pthで参照するパスが追加される挙動だった。
これではmimic-crossの用途に合わなそうなのでPYTHONPATHをメインに使うことにした。
Ubuntuにaptで入れたものを対象に配置するには/usr/lib/python3.10/dist-packages/python310.pth
カレントディレクトリ、PYTHONPATH、system path、vnev or ディストリのパス というような順番。
$ pwd /home/impactaky/envtest $ PYTHONPATH=foo:bar python3 -c "import sys; print(sys.path)" ['', '/home/impactaky/envtest/foo', '/home/impactaky/envtest/bar', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/impactaky/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.8/dist-packages'] $ python3 -m venv env $ source ./env/bin/activate $ PYTHONPATH=foo:bar python3 -c "import sys; print(sys.path)" ['', '/home/impactaky/envtest/foo', '/home/impactaky/envtest/bar', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/impactaky/envtest/env/lib/python3.8/site-packages']
mimic-cross実装
mimicx pythonの実装
とりあえず基本的な部分を実装した。
* mimic python
でhostのpythonがPYTHONPATHとLD_LIBRARY_PATHの特殊化付きで呼び出される
* MIMIC_CROSS_DISABLE=1でnativeなpythonが呼び出される