Python中如何让pip与pyenv、Anaconda和平共处
我现在使用 pyenv 在 macOS 上管理python版本,安装了miniconda3,在激活miniconda3的情况下,我发现用 pip 命令还是会安装在系统的 python2.7 下。
~ pyenv which pip
输出 .pyenv/versions/miniconda3-4.3.11/bin/pip
~ pip -V
输出 /usr/local/lib/python2.7/site-packages/pip (python 2.7)
能不能说明一下这到底是怎么回事?都搞晕了。
Python中如何让pip与pyenv、Anaconda和平共处
alias pip 看一下
在Python环境管理上,pip、pyenv和Anaconda确实容易打架。核心思路是隔离:让每个工具管理自己该管的部分,别让它们互相踩脚。
1. 明确分工
- pyenv:只用来安装和管理不同版本的官方CPython解释器。别用它装包。
- Anaconda/Miniconda:通过
conda create -n myenv python=3.9创建独立的、隔离的虚拟环境。所有操作(包括用pip)都在这个环境里进行。 - pip:在激活的conda虚拟环境里,作为该环境专属的包安装工具来使用。
2. 具体操作流程
假设你要用Python 3.9,项目需要requests和numpy。
# 1. 用conda创建一个干净的新环境,并指定Python版本
conda create -n myproject python=3.9
# 2. 激活这个环境
conda activate myproject
# 3. (可选但推荐)在激活的环境里,先升级这个环境自己的pip
python -m pip install --upgrade pip
# 4. 在这个环境里用pip安装项目包
pip install requests numpy
关键检查点:执行which python和which pip,确保它们的路径都指向.../envs/myproject/...下面。这就对了。
3. 重要禁忌
- 不要在系统Python(比如
/usr/bin/python3)里乱用pip install。 - 不要在pyenv切出来的全局Python版本里直接装包。
- 尽量在一个conda环境里,要么全用
conda install,要么全用pip install。混用时,永远用conda先装,再用pip补,能减少依赖冲突。 - 别用
sudo pip。如果你需要sudo,说明你装错地方了。
一句话总结:用conda环境做隔离墙,墙内的事交给pip,墙外让pyenv管解释器版本。
pyenv versions 可以列出系统里所有已安装的 Python,包括系统版本和虚拟环境里的版本。
每个版本都有其自己的 pip。我猜你困扰的原因应该是认为 pip 是全局的。
python -m pip install
大概没有设置 PATH
export PATH="$HOME/.pyenv/bin:$PATH"
谢谢。添加 PATH,并且又执行一遍 echo ‘eval “$(pyenv init -)”’ >> ~/.zshrc 后解决问题。参见:[https://github.com/pyenv/pyenv/issues/846]( https://github.com/pyenv/pyenv/issues/846)

