Conda环境内嵌套Python虚拟环境的解释器选择异常问题
问题原因解析
Conda环境的PATH优先级劫持
激活nmrfilter这个Conda环境时,Conda会自动修改系统的PATH环境变量,把Conda环境自身的bin(Linux/macOS)或Scripts(Windows)目录放到PATH的最前端。这时候哪怕你激活了嵌套的虚拟环境,系统调用pip或python时,还是会优先找到Conda环境里的对应程序,而不是虚拟环境的。你运行pip install -r requirements.txt的时候,实际上是把numpy这些依赖装到了Conda环境里,虚拟环境本身根本没拿到这些包,执行代码自然会报ModuleNotFoundError。虚拟环境激活脚本的PATH修改失效
虚拟环境的激活脚本本来是要把自己的路径加到PATH最前面,来确保用的是自身的Python和pip。但Conda在激活时会强制把自身路径锁定在PATH最顶端,虚拟环境的PATH修改被覆盖了,等于白激活——看起来提示符变了,但实际调用的还是Conda环境的工具链。关闭Conda环境后正常的逻辑
退出Conda环境后,系统的PATH会恢复到默认状态,这时候激活虚拟环境,它的PATH修改能正常生效,pip和python都会指向虚拟环境内部的程序。这时候安装依赖就会真正装到虚拟环境里,代码运行自然没问题。
内容的提问来源于stack exchange,提问作者RCWZX
相关产品推荐
相关产品推荐

