已激活虚拟环境且poetry add成功,为何pip3无法识别Python包?
为什么Poetry安装的包不在pip3列表里?
核心原因很直接:Poetry显示的「虚拟环境已激活」是它内部逻辑的激活状态,不是系统shell层面的激活。你敲pip3 list时,调用的是系统全局或者pyenv全局的pip3,根本没用到Poetry创建的那个虚拟环境,自然看不到用poetry add装的chardet。
怎么验证?
看输出里Poetry给出的虚拟环境路径:/Users/robbednark/Library/Caches/pypoetry/virtualenvs/my-project-QXbwbAtx-py3.7,chardet明明装在这个环境里,但你的shell当前没切换到这里,pip3指向的是外部环境的pip。
解决办法
有三种方式能正确看到或使用虚拟环境里的pip:
用Poetry代理执行pip命令
直接让Poetry在它的虚拟环境里跑pip:poetry run pip list这时候就能看到chardet出现在列表里了。
手动激活Poetry虚拟环境
把shell切换到这个虚拟环境里,之后所有的pip、python命令都会指向环境内的版本:- macOS/Linux:
激活后敲source $(poetry env info --path)/bin/activatepip list就能看到chardet,退出环境输deactivate就行。 - Windows(PowerShell):
& (poetry env info --path)\Scripts\Activate.ps1
- macOS/Linux:
直接调用虚拟环境里的pip
用完整路径执行虚拟环境内的pip二进制文件:/Users/robbednark/Library/Caches/pypoetry/virtualenvs/my-project-QXbwbAtx-py3.7/bin/pip list
额外说明
Poetry的poetry env list显示的「Activated」,只是说Poetry自己执行命令(比如poetry add、poetry run)时会用这个虚拟环境,但它不会自动修改你的shell环境变量,所以普通的pip3还是走外部环境的配置。
内容的提问来源于stack exchange,提问作者Rob Bednark
相关产品推荐
相关产品推荐

