Cloud Build で呼び出した Python 内から subprocess でも仮想環境を使う

解決したい問題

from subprocess import run

run(["python", "-m", "hoge.fuga"])
# hoge/fuga.py
import numpy as np

を Cloud Build上で実行しようとすると

ModuleNotFoundError: No module named 'numpy'

などと言われてしまう

解決方法

こうする

import sys
from subprocess import run

run([sys.executable, "-m", "hoge.fuga"])

解説

sys.executablePython インタプリタの実行ファイルの絶対パスを示す文字列となっている https://docs.python.org/ja/3/library/sys.html#sys.executable

リンク

Cloud Functions については、 https://stackoverflow.com/questions/54938099/how-to-run-a-subprocess-inside-google-cloud-function-in-python の回答がまさにそれ。python3を使うという手もあるらしいが、現時点(2024年3月)ではうまくいかなかった