macOS下通过os.system调用Python脚本缺PIL但单独运行正常如何解决
问题原因
macOS 默认自带 Python2 版本,你手动安装的依赖(包括 PIL/Pillow)都是安装在你常用的 Python3 环境下。你单独运行 test.py 时默认调用的是带依赖的 Python3 环境,但主脚本里 os.system('python xxx') 中的 python 默认指向系统的 Python2,该环境下没有安装 Pillow 库,就会抛出找不到模块的错误。
解决方案
不需要整体改写代码,只需要修改主脚本里的调用逻辑即可,可选方案如下:
- 方案1:直接替换调用命令为 Python3 路径
你可以先在终端执行which python3查看你当前常用 Python3 的完整路径,比如返回结果为/usr/local/bin/python3,就把主脚本里的OpenPreview函数改成:
def OpenPreview(): os.system('/usr/local/bin/python3 /Users/adamd/Desktop/psychedelic_euphoria/test.py')
- 方案2:自动适配当前运行主脚本的 Python 解释器(更稳定,避免环境差异问题)
导入 sys 模块,用sys.executable获取当前运行主脚本的 Python 解释器的完整路径,修改后的代码如下:
首先在主脚本开头添加导入:
import sys
然后修改 OpenPreview 函数:
def OpenPreview(): os.system(f'{sys.executable} /Users/adamd/Desktop/psychedelic_euphoria/test.py')
可选优化
如果后续需要更灵活的控制子进程的输入输出、运行状态,可以把 os.system 替换为 subprocess 模块的调用,用法参考:
import subprocess def OpenPreview(): subprocess.run([sys.executable, '/Users/adamd/Desktop/psychedelic_euphoria/test.py'])
内容的提问来源于stack exchange,提问作者Risal Shahid
相关产品推荐
相关产品推荐

