気づいてしまった
PyAutoGUIを使ってスクリーンショットを撮るテストをしていた。
#!/usr/bin/env python3
import sys
import pyautogui
def main(argv):
ss = pyautogui.screenshot()
ss.save('test.png')
if __name__ == '__main__':
main(sys.argv)
ターミナルがArmで起動してると正常に動作したが、x64だとダメだった。
たとえば、インサイダーではないVisual Studio Codeの内蔵ターミナルとか。
NameError: name 'Image' is not defined
現時点(2021-02-21)では「ImageをArmでインストールしていた場合はx64では動作しない」と考えるべきなのだろう。
対策する
Apple SiliconなのにプロセッサーがArmではない場合、arch
コマンドを使って自身を起動しなおせば良い。
#!/usr/bin/env python3
import platform
import subprocess
import sys
import pyautogui
def main(argv):
ss = pyautogui.screenshot()
ss.save('test.png')
def apple_silicon_x64():
if platform.system() != 'Darwin' or platform.processor() == 'arm':
return False
cp = subprocess.run(
['sysctl', 'machdep.cpu.brand_string'],
capture_output=True,
encoding='utf-8')
return cp.returncode == 0 and cp.stdout.find('Apple') > 0
if __name__ == '__main__':
if apple_silicon_x64(sys.argv):
subprocess.run(['arch', '-arm64e'] + sys.argv)
else:
main(sys.argv)