当使用pip安装依赖包时,明明已经安好了,甚至使用pip list都能看见,但还是会报错找不到包

由于Linux中为了不发生环境污染,我们pip安装的包会存入到主环境,即使装好了,虚拟环境也扫描不到,这时候需要

python -m pip

如果还有这类报错:

note: This error originates from a subprocess
Connection refused

是由于pip构建隔离

你安装一个只有源码(.tar.gz)而没有预编译包(.whl)的库时,pip 会:

  1. 创建一个临时的、隔离的虚拟环境

  2. 在这个临时环境里下载并安装 setuptoolswheel 等编译工具。

  3. 在临时环境里完成编译,再装回你的主环境。

问题的核心在于:你加在 pip 命令末尾的 --proxy "" 参数,并不会自动传递给那个新开启的子进程(Subprocess)。子进程一启动,就会读取系统全局的环境变量。如果你的 .bashrc 里配置了一个已经失效或无法连接的代理,子进程就会撞墙身亡。

禁用隔离,手动铺路

在你的主环境里,先显式地绕过代理装好编译工具。

python -m pip install setuptools wheel --proxy "" -i https://pypi.tuna.tsinghua.edu.cn/simple

封印隔离(禁用子进程)

使用 --no-build-isolation 标志。这行命令告诉 pip:“别开新窗口了,就在我现在的环境里编译,用我刚才装好的工具!

python -m pip install batchgenerators medpy --proxy "" --no-build-isolation

更多推荐