如何通过subprocess.run()执行pip install字符串命令且不报FileNotFoundError?
问题原因
subprocess.run 默认不会通过系统shell解析命令,你传入整段命令字符串时,程序会把完整的字符串当成一个可执行文件的路径去查找,自然找不到对应文件,就会抛出FileNotFoundError。
解决方法
只要给subprocess.run添加shell=True参数,就能直接传入字符串形式的命令执行,写法如下:
- 安装单个模块:
subprocess.run('pip install module_name', shell=True)
- 从requirements文件批量安装:
subprocess.run('pip install -r requirements.txt', shell=True)
注意事项
- 安全提醒:如果你要执行的命令字符串包含用户可控的输入内容,开启
shell=True会存在shell注入安全风险,仅当命令内容完全由你自己可控时推荐使用该方案。 - 为了避免调用的pip和当前运行脚本的Python环境不匹配,更推荐的写法是调用当前Python环境内置的pip:
import sys import subprocess # 单个模块安装 subprocess.run(f'{sys.executable} -m pip install module_name', shell=True) # 批量安装 subprocess.run(f'{sys.executable} -m pip install -r requirements.txt', shell=True)
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

