PEP668により、/usr/local/libや$HOME/.local/libへのpipによるモジュールインストールができなくなった。
「俺流!PEP668とうまくやっていく方法 https://blog.jp.square-enix.com/iteng-blog/posts/00043-play-with-the-pep668/ 」によると、これはsys.prefix / sys.exec_prefix変数で制御されているらしい。さらに、その制御の仕方は、「venvが動作する仕組みを調べてみた https://endy-tech.hatenablog.jp/entry/how_venv_works_in_python 」で解説されている。総合すると、virtualenvを使わずとも、以下の手順で実現できる。
- sitecustomize.pyを用意する。1
PREFIX=/$HOME/internal PYTHONRELPATH=$(python3 -c 'import distutils.sysconfig as sysconf; import os; print(sysconf.get_python_lib(prefix="/"))') bash -c '
mkdir -p ${PREFIX}${PYTHONRELPATH}
echo "import sys; sys.prefix=sys.exec_prefix=\"${PREFIX}\"; sys.path.insert(0,\"${PREFIX}${PYTHONRELPATH}\");" > ${PREFIX}${PYTHONRELPATH}/sitecustomize.py
'
-
${PREFIX}${PYTHONRELPATH}
をPYTHONPATHに追加する。
シェルからpipを呼ぶときには実用性皆無ですが、外部ビルドツールからpipを呼びたい場合とかに有用かなと思いました。
-
弊で普通に行われているのだが一般に普通かは知らない ↩