You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何subprocess.check_call([sys.executable,..])可用而subprocess.run([...])不行?

Python离线依赖下载工具的SSL问题排查与解决

背景

我正在为无网络环境的机器编写Python模块安装工具,流程是先在联网机器上运行工具下载依赖包,再将包部署到无网机器。核心需求是通过脚本调用pip download完成依赖下载。

最初的实现与问题

最初使用subprocess.run执行命令:

subprocess.run(['py','-m','pip','download','-r','C:/.../libs/Python 3.8/requirements.txt','-d','C:/.../libs/Python 3.8','--python-version','3.8','--only-binary=:all:'])

执行时报错:the ssl module in Python is not available.
但直接在CMD中执行相同的命令却能正常运行,pip没有抛出SSL相关错误,且我确认VSCode和CMD使用的Python版本完全一致。

解决方案与现象

参考方案后,改用subprocess.check_call并传入sys.executable:

subprocess.check_call([sys.executable,'-m','pip','download','-r','C:/.../libs/Python 3.8/requirements.txt','-d','C:/.../libs/Python 3.8','--python-version','3.8','--only-binary=:all:'])

此时虽然仍有SSL警告和连接超时提示,但依赖库及其关联包能够成功下载。

疑问

我明白sys.executable的作用是确保调用当前脚本运行环境的pip,但不清楚为什么这个修改能解决之前subprocess.run遇到的SSL模块不可用问题。

内容的提问来源于stack exchange,提问作者be-cieutat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:32:08