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和平共处

6 回复

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,项目需要requestsnumpy

# 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 pythonwhich 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)

回到顶部