2019-03-22    2022-07-24    640 字  2 分钟

原因

  1. 今天学习 python 时,所需要的版本为 python2.x,而 archlinux 上默认版本是 python3.7, 无法直接使用 python-mode 模式下的一些功能,
  2. 使用 flycheck 时, 总是会出现关于 print 的警告,
  3. 想知道如何在 emacs 下自动切换 python 版本,但 google 上没有发现合适的例子
  4. 想到可以指定一个文件夹中使用 python 的环境变量, 在 google 上了解到可以使用 pyenv

安装 pyenv

第一个方法:下载运行 pyenv.run 或者 pyenv-installer

1
2
3
curl https://pyenv.run | bash
# or
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

第二个方法: 直接克隆 pyenv

1
git clone https://github.com/pyenv/pyenv.git ~/.pyenv

第三个方法: 使用 Linux 发行版自带的包管理器, archlinux 为例

1
2
3
4
yay -S pyenv
# or
git clone https://aur.archlinux.org/pyenv.git
cd pyenv && makepkg -sri

配置 PYENV_ROOTPATH 环境变量

1
2
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

~/.bashrc 中输入

1
2
3
if command -v pyenv 1>/dev/null 2>&1; then
    eval "$(pyenv init -)"
fi

重启终端使这些改变生效

1
exec $SHELL

安装并配置 pyenv-virtualenv

安装 pyenv-virtualenv

1
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv

配置文件,在 ~/.bashrc 中添加

1
2
3
4
# 在 export PATH=~/.pyenv/bin:$PATH 后面 添加
[[ -f $(pyenv root)/plugins/pyenv-virtualenv ]] &&{
    eval "$(pyenv virtualenv-init -)"
}

重启终端使这些改变生效

1
exec $SHELL

有关 pyenv 常用命令

命令作用
pyenv install --list查看可以安装的 python 版本
pyenv install 2.7.16安装 python2.7.16 版本
pyenv uninstall 2.7.16卸载 python2.7.16 版本
pyenv versions查看已安装的版本
python global 2.7.16全局版本设置为 python2.7.16
pyenv local 2.7.16设置当前文件夹所使用的python版本为 2.7.16
pyenv virtualenv 2.7.1 env271创建一个名为 env271 的虚拟环境1
pyenv activate env271激活并使用 env271 虚拟环境
pyenv deactivate关闭虚拟环境,切换回系统环境
pyenv uninstall env271卸载虚拟环境 env2712

pyenv 在 bash 上如何补全

1
2
3
# 在启用了 bash-completions 后,直接
# shellcheck source=/dev/null
. "$(penv root)"/completions/pyenv.bash

卸载 pyenv

使用第一种和第二种方法的直接删除 $(pyenv -root)

1
rm -rf ~/.pyenv

第三种方法

1
2
3
yay -Rs pyenv
# or
pacman -Rs pyenv

更新 pyenv

第一种和第二种

1
2
cd $(pyenv root)
git pull

第三种方法

1
yay -Syu

参考:

  1. pyenv 官网
  2. 伯乐在线—Python多版本切换工具

  1. 虚拟环境的位置为 $(pyenv root)/versions/env271 ↩︎

  2. 或者直接删除它,rm -rf $(pyenv root)/versions/env271 ↩︎