Pipenv无法执行Python脚本及关联VSCode异常问题求助
Pipenv运行Python脚本异常问题解答
问题背景
我尝试通过Pipenv虚拟环境运行名为main.py的简单Python脚本,代码如下:
print("started.")
执行pipenv run ./main.py --verbose时,控制台无任何输出;在VSCode中运行该命令情况一致,预期输出"started."但无内容且程序直接终止。在CMD中运行带--verbose参数的命令时,出现错误:
[5772:0107/202720.999:ERROR:broker_win.cc(56)] Error reading broker pipe: The pipe has been ended. (0x6D)
单独用Python可正常运行该脚本,但希望用Pipenv管理包。已重装Python、Pipenv和VSCode,问题依旧;Pipenv shell内外运行结果一致。另外,运行pipenv run main.py时会自动打开VSCode,卸载VSCode后命令可正常执行;关闭VSCode时运行该命令,进程会持续不退出,关闭CMD会同时关闭VSCode。
1. 错误产生的原因
- Windows系统中
.py文件的默认打开程序被设置为VSCode,而非Python解释器。当Pipenv尝试直接运行main.py时,系统会调用VSCode打开脚本,而非用虚拟环境里的Python执行它,导致脚本未被执行,出现无输出或关联VSCode的异常行为。 - 添加
--verbose参数时,Pipenv把参数传递给了错误的程序(VSCode),VSCode的内部进程通信逻辑被打乱,从而抛出broker pipe错误。
2. broker pipe错误的含义
这是VSCode内部的进程通信异常:VSCode启动时会通过管道(pipe)实现主进程和辅助broker进程的通信,当Pipenv错误触发VSCode启动并传递了不兼容的参数时,broker进程的管道通信被意外中断,读取管道时就会提示“管道已终止”的错误。
3. 解决方法
- 修复.py文件的默认关联程序:
- 右键点击
main.py,选择「打开方式」→「选择其他应用」 - 勾选「始终使用此应用打开.py文件」,选择系统中对应版本的Python解释器(选
python.exe,而非VSCode)
- 右键点击
- 明确指定Python解释器运行脚本:
不用直接运行脚本文件,而是通过Pipenv调用虚拟环境的Python执行脚本,命令改为:
强制让Pipenv使用虚拟环境内的Python解释器执行脚本,绕开文件关联问题。pipenv run python main.py --verbose
4. VSCode引发问题的原因及共存方案
- 原因:VSCode安装时可能自动关联了
.py文件,导致系统默认用VSCode打开Python脚本而非执行脚本。当Pipenv尝试直接运行.py文件时,系统调用VSCode,从而出现脚本未执行、进程关联VSCode的异常。 - 共存方案:
- 按照上述方法修复
.py文件的默认关联,确保默认用Python打开而非VSCode - 在VSCode中配置Python解释器为Pipenv虚拟环境的Python:
- 打开VSCode,按下
Ctrl+Shift+P,输入「Python: Select Interpreter」 - 选择对应Pipenv虚拟环境的解释器(通常显示为
./venv/Scripts/python.exe或带有Pipenv标识的选项)
- 打开VSCode,按下
- 后续在VSCode中运行脚本时,直接用VSCode的运行功能,或在终端中使用
pipenv run python main.py命令,避免直接运行.py文件触发系统关联。
- 按照上述方法修复
内容的提问来源于stack exchange,提问作者GeorgeSpiller
相关产品推荐
相关产品推荐

