You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pyenv+pipenv/pip环境下Python版本不匹配问题排查与咨询

问题解答:pyenv下pip快捷方式与pipenv不遵循版本设置

问题背景

存在两个问题:

  1. pipenv忽略pyenv的版本设置;
  2. pip快捷方式不遵循pyenv的版本设置,相关命令行输出如下:
iuri@tartaruga:~$ pyenv version
3.9.16 (set by /home/iuri/.pyenv/version)
iuri@tartaruga:~$ pyenv local 3.10
iuri@tartaruga:~$ pyenv version
3.10.9 (set by /.python-version)
iuri@tartaruga:~$ pyenv exec python -m pip --version
pip 22.3.1 from /home/iuri/.local/lib/python3.10/site-packages/pip (python 3.10)
iuri@tartaruga:~$ pip --version
pip 22.3.1 from /home/iuri/.local/lib/python3.9/site-packages/pip (python 3.9)
iuri@tartaruga:~$ pyenv versions
  system
  3.9.14
  3.9.16
* 3.10.9 (set by /.python-version)
  3.11.1
iuri@tartaruga:~$ pyenv exec python -m pipenv install torch
Creating a virtualenv for this project...
Pipfile: Pipfile
Using /home/iuri/.pyenv/versions/3.11.1/bin/python3 (3.11.1) to create virtualenv...
^C
iuri@tartaruga:~$ python --version
Python 3.10.9
iuri@tartaruga:~$ pyenv exec python --version
Python 3.10.9
iuri@tartaruga:~$ pyenv exec python -m pip --version
pip 22.3.1 from /home/iuri/.local/lib/python3.10/site-packages/pip (python 3.10)
iuri@tartaruga:~$ python -m pip --version
pip 22.3.1 from /home/iuri/.local/lib/python3.10/site-packages/pip (python 3.10)
iuri@tartaruga:~$ pip --version
pip 22.3.1 from /home/iuri/.local/lib/python3.9/site-packages/pip (python 3.9)
iuri@tartaruga:~$ pip3
pip3     pip3.10  pip3.11  pip3.9
iuri@tartaruga:~$ pip3.10 --version
pip 22.3.1 from /home/iuri/.local/lib/python3.9/site-packages/pip (python 3.9)
iuri@tartaruga:~$ pyenv global
3.9.16

一、pip快捷方式不遵循pyenv版本的原因与解决

原因

直接调用pip/pip3.x时,系统优先加载了非pyenv管理的独立pip二进制文件,而非pyenv生成的shim脚本:

  • python -m pip能正确匹配当前pyenv版本,因为这是通过当前激活的Python解释器直接调用pip模块,完全受pyenv控制。
  • 但pip/pip3.10指向3.9版本的pip,说明这些二进制文件是之前在pyenv未激活状态下(或用全局Python)安装的,被放在了~/.local/bin或/usr/bin这类PATH优先级高于pyenv shims的目录中,导致系统跳过pyenv的shim直接执行这些文件。

解决方法

  1. 调整PATH优先级
    检查echo $PATH输出,确保$HOME/.pyenv/shims在$HOME/.local/bin和/usr/bin之前。如果不是,修改shell配置文件(~/.bashrc或~/.zshrc):
    echo 'export PATH="$HOME/.pyenv/shims:$PATH"' >> ~/.bashrc
    source ~/.bashrc
    
  2. 重新生成pyenv shims
    强制pyenv为所有已安装Python版本生成对应的pip shim:
    pyenv rehash
    
  3. 清理冲突的pip二进制文件
    若上述步骤无效,直接删除~/.local/bin下的pip相关文件:
    rm ~/.local/bin/pip ~/.local/bin/pip3 ~/.local/bin/pip3.*
    
    之后用当前pyenv版本重新安装pip:
    python -m pip install --upgrade pip
    
    此时pip会被安装到当前pyenv版本的site-packages下,对应的shim会被pyenv管理。

二、pipenv忽略pyenv版本设置的原因与解决

原因

你执行pyenv exec python -m pipenv时,pipenv却使用3.11.1版本,核心原因是pipenv本身安装在Python 3.11.1的环境中。pipenv启动时会优先使用自身所在的Python版本,而非当前pyenv激活的版本;另外,pipenv的版本检测逻辑可能会绕过pyenv shim,直接查找系统中的Python。

解决方法

  1. 在当前pyenv版本下重新安装pipenv
    激活目标pyenv版本后,重新安装pipenv:
    pyenv local 3.10.9
    python -m pip install --user pipenv
    
    这样pipenv会被安装到当前3.10.9的用户site-packages下,调用时会遵循pyenv的版本设置。
  2. 显式指定pipenv使用的Python版本
    临时指定或强制项目使用当前pyenv版本:
    pipenv install --python $(pyenv which python)
    
    或修改项目Pipfile的[requires]部分:
    python_version = "3.10"
    

内容的提问来源于stack exchange,提问作者Iuri Guilherme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:50:32