pyenv-virtualenv配置和基本使用

本文介绍了Python版本管理工具pyenv及其插件pyenv-virtualenv的使用方法。通过这两个工具,可以在同一台机器上方便地管理多个Python版本及对应的虚拟环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前就有听大妈推荐过 pyenv. 最近给一个项目这个库提交 Pull Request, 但 Python3.X 的单元测试没有跑过, 而我的机器上没有 Python3.X, 也不想把现有的 Python2.7 替换掉, 所以就用起了这个库.

简单的说, pyenv 是一个Python管理工具, 这个是和我们常用的 virtualenv 有所不通, 前者是对 Python 的版本进行管理, 实现不同版本的切换和使用. 后者测试创建一个虚拟环境, 与系统环境以及其他 Python 环境隔离, 避免干扰.

安装方法我就不做赘述了, pyenv readme 已经写的特别详尽

pyenv使用方法

简单的说一下使用方法

安装不同版本的 Python

     
1
2
     
pyenv install <version> #安装特定版本的 Python
pyenv install 3.3. 0 #安装 Python 3.3.0

当我的系统 Python 版本是 2.7, 但是有个 叫做 py3-project 需要用 Python3 来运行的时候, 只需要这样做:

     
1
2
3
4
     
cd py3-project #进入项目目录
pyenv local 3.3. 0 #将当前目录下的Python环境切换为3.3.0
pyenv version #运行显示通过pyenv设置之后的python版本, 得到结果是3.3.0
python --version #查看Python版本, 得到结果也是3.3.0

此时就可以通过 python3.3 来运行项目了, 才这个项目之外的目录运行 Python, 你会发现仍然是系统版本. 通过pyenv可以给不同的目录设置不同的 Python 版本, 还可以通过 pyenv global 这个命令切换整个全局的 Python版本. 赞爆了是不是.

告别virtualenv

接下来, 再介绍一个工具, 配合pyenv, 让我告别了用了很久了virtualenv.这个工具叫做 pyenv-virtualenv, 安装方法依然跳过, 至于使用, 你只需要记住三条命令:

     
1
2
3
     
pyenv virtualenv 3.3. 0 env #创建一个 Python 版本为 3.3.0 的环境, 环境叫做 env
pyenv activate env_name #激活 env 这个环境, 此时 Python 版本自动变为 3.3.0, 且是独立环境
pyenv deactivate #离开已经激活的环境

嗯, 写完这篇继续去修复那段 Python3.X 下通不过单元测试的程序.

再见了, virtualenv.

(base) lenovo@lenovo-ThinkStation-P2-Tower:/mnt/940660EA0660CEB4/PTM-POSE$ curl https://pyenv.run | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 270 100 270 0 0 231 0 0:00:01 0:00:01 --:--:-- 231 正克隆到 '/home/lenovo/.pyenv'... remote: Enumerating objects: 1396, done. remote: Counting objects: 100% (1396/1396), done. remote: Compressing objects: 100% (726/726), done. remote: Total 1396 (delta 857), reused 845 (delta 537), pack-reused 0 (from 0) 接收对象中: 100% (1396/1396), 1.15 MiB | 335.00 KiB/s, 完成. 处理 delta 中: 100% (857/857), 完成. 正克隆到 '/home/lenovo/.pyenv/plugins/pyenv-doctor'... remote: Enumerating objects: 11, done. remote: Counting objects: 100% (11/11), done. remote: Compressing objects: 100% (9/9), done. remote: Total 11 (delta 1), reused 5 (delta 0), pack-reused 0 (from 0) 接收对象中: 100% (11/11), 38.72 KiB | 145.00 KiB/s, 完成. 处理 delta 中: 100% (1/1), 完成. 正克隆到 '/home/lenovo/.pyenv/plugins/pyenv-update'... remote: Enumerating objects: 10, done. remote: Counting objects: 100% (10/10), done. remote: Compressing objects: 100% (6/6), done. remote: Total 10 (delta 1), reused 5 (delta 0), pack-reused 0 (from 0) 接收对象中: 100% (10/10), 完成. 处理 delta 中: 100% (1/1), 完成. 正克隆到 '/home/lenovo/.pyenv/plugins/pyenv-virtualenv'... remote: Enumerating objects: 64, done. remote: Counting objects: 100% (64/64), done. remote: Compressing objects: 100% (57/57), done. remote: Total 64 (delta 10), reused 23 (delta 0), pack-reused 0 (from 0) 接收对象中: 100% (64/64), 43.19 KiB | 325.00 KiB/s, 完成. 处理 delta 中: 100% (10/10), 完成. WARNING: seems you still have not added 'pyenv' to the load path. # Load pyenv automatically by appending # the following to # ~/.bash_profile if it exists, otherwise ~/.profile (for login shells) # and ~/.bashrc (for interactive shells) : export PYENV_ROOT="$HOME/.pyenv" [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init - bash)" # Restart your shell for the changes to take effect. # Load pyenv-virtualenv automatically by adding # the following to ~/.bashrc: eval "$(pyenv virtualenv-init -)" (base) lenovo@lenovo-ThinkStation-P2-Tower:/mnt/940660EA0660CEB4/PTM-POSE$ source ~/.bashrc 命令 “lesspipe” 可在以下位置找到 * /bin/lesspipe * /usr/bin/lesspipe 由于 /usr/bin:/bin 不在 PATH 环境变量中,故无法找到该命令。 lesspipe:未找到命令 命令 “dircolors” 可在以下位置找到 * /bin/dircolors * /usr/bin/dircolors 由于 /bin:/usr/bin 不在 PATH 环境变量中,故无法找到该命令。 dircolors:未找到命令 命令 “gcc” 可在以下位置找到 * /bin/gcc * /usr/bin/gcc 由于 /bin:/usr/bin 不在 PATH 环境变量中,故无法找到该命令。 gcc:未找到命令 /usr/bin/env: "bash": 没有那个文件或目录 /usr/bin/env: "bash": 没有那个文件或目录 /usr/bin/env: "bash": 没有那个文件或目录
最新发布
07-10
<think>我们遇到了两个主要问题: 1. 在执行 `source ~/.bashrc` 后,系统提示多个命令(lesspipe, dircolors, gcc)找不到,原因是 `/usr/bin:/bin` 不在 PATH 环境变量中。 2. 报错 `/usr/bin/env: "bash": 没有那个文件或目录`,这表明系统在 `/usr/bin/env` 执行时找不到 `bash` 解释器。 根据引用[1]:`ls``cat`都在`/bin`目录下,如果PATH变量不包含`/bin``/usr/bin`,那么这些基本命令都无法找到。而引用[3]中提到了在`.profile`文件中设置PATH的示例,通常系统默认的PATH会包含`/usr/local/bin`、`/usr/bin`、`/bin`等目录。 因此,我们需要修复PATH环境变量,确保包含系统基本命令的路径。 另外,报错`/usr/bin/env: "bash": 没有那个文件或目录`,可能是因为`/bin/bash`不存在,或者PATH中没有包含bash所在的目录(通常是`/bin`或`/usr/bin`)。由于我们同时缺失多个基本命令,很可能是PATH变量被错误覆盖,导致系统找不到这些命令。 解决步骤: 1. **临时修复PATH**(使用绝对路径执行命令): 由于当前PATH可能已经被破坏,我们可以使用绝对路径来执行命令,以便修复配置文件。 ```bash /bin/echo 'export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"' >> ~/.bashrc ``` 这条命令将系统默认的路径添加到PATH中,并保留原有PATH(通过`$PATH`追加)。注意,我们使用`/bin/echo`来确保命令执行。 2. **检查并修复bash路径**: 如果`/bin/bash`不存在,我们可以通过重新安装bash来修复: ```bash sudo apt-get install --reinstall bash ``` 3. **重新加载配置文件**: ```bash /bin/bash --login # 使用绝对路径启动一个新的bash登录会话,这样会加载修复后的.bashrc ``` 4. **验证基本命令**: ```bash which ls which bash gcc --version ``` 5. **重新配置pyenv**: 在PATH修复后,重新添加pyenv配置: ```bash echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc source ~/.bashrc ``` 6. **安装缺失的依赖**(如果gcc等命令仍然缺失): ```bash sudo apt update sudo apt install -y build-essential coreutils less ``` 注意:在修改配置文件之前,建议先备份。 如果上述步骤无法解决,可能是系统环境遭到破坏,需要检查其他配置文件(如~/.profile, /etc/profile等)是否覆盖了PATH。 根据引用[3],在~/.profile中通常会有PATH的设置,我们可以检查并修复它: ```bash # 检查~/.profile /bin/cat ~/.profile # 如果发现PATH设置有问题,可以编辑 /bin/sed -i 's|PATH=.*|PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$HOME/bin:$HOME/.local/bin"|' ~/.profile ``` 最后,重新登录系统。 让我们一步步操作: 步骤1:临时修复PATH 步骤2:重新安装bash(如果必要) 步骤3:重新加载 步骤4:验证 步骤5:重新配置pyenv 步骤6:安装依赖 这样应该能解决PATH问题以及bash解释器的问题。 注意:在PATH修复之前,我们无法使用任何不在当前PATH中的命令,所以必须使用绝对路径。 如果用户在执行`source ~/.bashrc`之前已经破坏了PATH,那么当前会话可能无法使用基本命令,因此建议使用绝对路径操作。 现在,我们按照步骤来: 1. 临时修复PATH(使用绝对路径的echo): ```bash /bin/echo 'export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"' >> ~/.bashrc ``` 2. 重新加载.bashrc(由于当前bash可能不可用,我们使用绝对路径的bash来执行): ```bash /bin/bash -c "source ~/.bashrc" ``` 但是,如果bash已经不在原来的位置(比如被删除),那么我们需要先修复bash。我们可以先尝试: ```bash /bin/ls /bin/bash # 检查bash是否存在 ``` 如果不存在,则安装: ```bash sudo apt-get install --reinstall bash ``` 3. 然后,重新登录或者启动一个新的bash会话。 4. 之后,再按照上述步骤5重新配置pyenv。 5. 最后,安装缺失的软件包(如gcc等)。 如果用户无法使用sudo(因为sudo可能依赖PATH),那么也需要使用绝对路径的sudo: ```bash /usr/bin/sudo apt-get install --reinstall bash ``` 由于问题复杂,请用户按照步骤操作。 注意:在修复过程中,如果遇到权限问题,可能需要确认用户权限。 生成的相关问题: 1. 如何恢复被破坏的PATH环境变量? 2. 如何在命令不可用的情况下修复Linux系统? 3. pyenv安装后如何管理多个Python版本? 4. 如何避免修改bashrc导致的环境破坏? 5. 如何检查Linux系统的基本命令是否完整?</think>### 解决 pyenv 安装后命令未找到及 bash 路径问题 #### 一、修复 PATH 环境变量(核心问题) 问题根源是 PATH 变量缺失关键系统路径,导致基本命令无法识别。请按顺序执行: ```bash # 1. 临时修复PATH(使用绝对路径) /bin/echo 'export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"' >> ~/.bashrc # 2. 重新加载配置 source ~/.bashrc # 3. 验证修复(应显示完整路径) echo $PATH ``` > 关键修复:将系统标准路径 `/usr/bin:/bin` 加入 PATH[^1][^3] #### 二、解决 bash 解释器缺失问题 ```bash # 1. 检查 bash 解释器位置 /bin/ls -l /bin/bash /usr/bin/bash # 2. 若缺失则重新安装 sudo apt update sudo apt install --reinstall bash # 3. 创建符号链接(如必要) sudo ln -s /bin/bash /usr/bin/bash ``` #### 三、修复缺失命令 ```bash # 安装核心工具集 sudo apt install -y coreutils less build-essential # 验证修复 which lesspipe dircolors gcc # 应显示路径 ``` #### 四、正确配置 pyenv ```bash # 1. 清理错误配置 sed -i '/pyenv init --path/d' ~/.bashrc sed -i '/export PATH=.*pyenv/d' ~/.bashrc # 2. 添加标准配置 echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv init --path)"' >> ~/.bashrc echo 'eval "$(pyenv init -)"' >> ~/.bashrc # 3. 生效配置 exec $SHELL ``` #### 五、验证环境 ```bash # 检查基础命令 gcc --version | head -1 # 应显示版本 dircolors --help | head -1 # 测试 pyenv pyenv install 3.9.6 --list # 应显示可用版本 ``` ### 故障原因分析 | 错误提示 | 原因 | 解决方案 | |---------|------|---------| | `lesspipe/dircolors/gcc未找到` | PATH 缺失 `/usr/bin:/bin` | 添加系统路径到 PATH | | `/usr/bin/env: "bash"` | bash 解释器路径错误 | 重装 bash 并创建链接 | | `pyenv: command not found` | 初始化脚本错误 | 使用标准 pyenv 配置 | > **重要提示**:Linux 系统依赖 `/usr/bin:/bin` 中的核心命令,修改 PATH 时需保留这些路径[^1][^3] ### 预防措施 1. 修改 PATH 前先备份: ```bash cp ~/.bashrc ~/.bashrc.bak ``` 2. 使用安全添加方式: ```bash echo 'export PATH="/usr/bin:/bin:$PATH"' >> ~/.bashrc ``` 3. 测试命令是否存在: ```bash command -v gcc || echo "警告:gcc 未安装" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值