虚拟环境工具pyenv的安装,配置和使用,完美控制python版本

文章目录

  • 前言
  • 背景
  • 使用
    • 第 1 章:使用环境
      • 1、安装 git
      • 2、开启终端
      • 3、安装 pyenv
      • 4、安装 pyenv-virtualenv
    • 第 2 章:使用 pyenv
      • 1. 创建虚拟环境
      • 2. 激活虚拟环境
      • 3. 删除虚拟环境
    • 第 3 章:更新 pyenv
    • 第 4 章:卸载 pyenv
  • PS


前言

使用python进行开发,Unix/Linux 的环境会更加友好,不会出现莫名其妙的bug,虽然 windows store 也发布了 Ubuntu 子系统,但是功能不够全,系统不够完善。本文全面介绍了 Ubuntu、Archlinux、Centos、Mac下安装和使用pyenv的方法。Windows下使用pyenv的方法请移步 pyenv-win 源码地址查看: https://github.com/pyenv-win/pyenv-win ,当然pyenv也可以在Windows store的Linux子系统中使用。


背景

python 版本比较多,2 和 3 相差比较大,当你需要不同环境的时候,选择使用 docker,docker的使用教程可以在菜鸟教程找到

https://www.runoob.com/docker/docker-tutorial.html

也可以在官网查找相关文档

https://www.docker.com/

如果用 docker 那就不需要隔离环境了,如果要直接运行在服务器上,那就必须有隔离环境。本文将会介绍使用pyenv来创建不同python版本的虚拟环境。


使用

使用 pyenv 和 pyenv-virtualenv ,在 Linux 下完美隔离 python 各个版本

第 1 章:使用环境

注意: 本文的 Linux和Mac OS X 下进行,不涉及 windows下的安装使用

清单

  • git
  • bash,zsh或者brew
  • pyenv
  • pyenv-virtualenv

1、安装 git

在各大 Linux 的发行版下安装 git 都非常简单,此处只展示部分示例

  • archlinux
    sudo pacman -S git
  • debian/ubuntu
    sudo apt install git
  • centos
    sudo yum install git
  • Mac
    brew install git

2、开启终端

Ubuntu下使用 shell

Ctrl + Alt + t 快捷键打开终端

3、安装 pyenv


说明: 本文的所有安装都严格遵守官方文档,与官方文档完全保持一致。

源码git 地址:https://github.com/pyenv/pyenv

在终端中执行如下命令完成安装:

首先把项目克隆下来,放在家目录下的隐藏文件夹中:.pyenv

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

如果你是Mac用户,可以使用brew命令来安装

brew update
brew install pyenv

然后配置环境变量:

  • 如果你使用 bash,就依次执行如下命令:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
  • 如果你使用 zsh,就依次执行如下命令:
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.zshrc
  • 如果你用Mac,就执行如下命令:
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init-)"\nfi' >> ~/.bash_profile

echo 命令的含义是:将引号中内容写入某文件中

请注意,以上的三条 echo 命令的最后一条命令,请保证它引号中的内容处于 ~/.bashrc 或者 ~/.zshrc 的最底部。

因为在 pyenv 初始化期间会操作 path 环境变量,导致不可预测的行为。

查看文件的底部内容,可以使用 tail 命令,用法:tail ~/.bashrc 或者 tail ~/.zshrc,编辑文件可以使用 vim 或者 vscode

然后,在使用 pyenv 之前,需要初始化 shell 环境,执行如下命令

exec $SHELL或者source ~/.bashrc

同样也可以关闭当前的终端窗口,重新启动一个。

4、安装 pyenv-virtualenv

源码git 地址:https://github.com/pyenv/pyenv-virtualenv

把插件克隆在刚才已经安装完毕的 pyenv 的 plugins 文件夹中

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

如果你是Mac用户可以使用brew命令来安装

brew install pyenv-virtualenv

然后配置环境变量

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
  • 如果你使用 bash,就执行如下命令:

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc

  • 如果你使用 zsh,就执行如下命令:

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

最后,在使用 pyenv 之前,重新初始化 shell 环境,执行如下命令

exec $SHELL或者source ~/.bashrc

或者重启一个终端窗口。

没有出错的话,此时已经完成了所有的安装操作,如果提示错误,请检查前文中的路径环境变量(请检查是否使用对应系统环境的命令)是否配置正确,或者将操作回退,重新执行安装命令


第 2 章:使用 pyenv

此处仅展示 pyenv 和 pyenv-virtualenv 的日常用法

检查安装是否正确

  • 检查 pyenv 的版本

pyenv version

  • 查看 pyenv 已经托管了哪些 python 版本

pyenv versions

如果显示了正常的版本信息,说明安装成功,如果显示类似于 command not found 之类的提示,说明安装失败,请查看第一章末尾的提示。

安装 3.6.6 版本的 python

pyenv install 3.6.6

这里需要注意,某些情况下会安装失败,Build failed.

Don’t panic,我们可以查看pyenv在github wiki里面准备的应对方案,原文地址 https://github.com/pyenv/pyenv/wiki

摘录如下,只需要执行对应的命令即可:

  • archlinux用户

sudo pacman -S base-devel openssl zlib

  • Mac用户

brew install openssl readline sqlite3 xz zlib

如果你使用的是OS X Mojave或者更高的版本(10.14+),还需要执行一下命令
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

  • Ubuntu/Debian/Mint用户

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev

  • CentOS/Fedora <= 21 用户,确保已经安装了 xz 工具

sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel

  • Fedora >= 22 用户,确保已经安装了 xz 工具

sudo dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel

  • openSUSE用户

zypper install gcc automake openssl-devel ncurses-devel readline-devel zlib-devel tk-devel

  • Solus 用户

sudo eopkg it -c system.devel

sudo eopkg install git gcc make zlib-devel bzip2-devel readline-devel sqlite3-devel openssl-devel tk-devel

  • Linuxbrew用户

brew install bzip2 openssl readline sqlite xz

安装完这些补充的工具之后,再次执行:

pyenv install 3.6.6

就可以成功了,你可以不断的使用pyenv versions来查看被 pyenv 托管的 python 版本,多版本之间不会冲突,完美共存

执行pyenv install,然后按下 tab 键,就可以看到所有可选的安装版本

如何使用已经安装的版本创建虚拟环境

pyenv和pyenv-virtualenv的协作可以这么理解:

pyenv 托管安装的 python 版本,python-virtualenv 则调用对应的 python 版本

下面是如何创建和使用虚拟环境

1. 创建虚拟环境

首先需要创建一个虚拟环境,执行命令:

pyenv virtualenv 3.6.6 my-env

最后一个是环境的名字,可以随便取。安装成功会显示:

Looking in links: /tmp/tmp0eywgc7v
Requirement already satisfied: setuptools in /home/vic/.pyenv/versions/3.6.6/envs/my-env/lib/python3.6/site-packages (39.0.1)
Requirement already satisfied: pip in /home/vic/.pyenv/versions/3.6.6/envs/my-env/lib/python3.6/site-packages (10.0.1)

它写明了该虚拟环境的绝对路径。

2. 激活虚拟环境

在任意目录下,执行命令:

pyenv activate my-env

在终端命令行前面,会出现(my-env) 的提示,进入python环境可以看到版本为虚拟环境设定的3.6.6,使用pip --version,可以看到 pip 包安装的绝对路径

使用终端进入任意目录,比如 ~/envtest

cd ~/envtest

然后在该目录下执行:

pyenv local my-env

也可以激活创建好的虚拟环境,执行:

ls -al

local命令和之前的命令区别在于,在 ~/envtest 目录下,会创建一个隐藏文件 .python-version,文件内容只包含一句话 my-env,只要使用终端进入 ~/test 目录,就会自动激活虚拟环境

退出虚拟环境使用下面两个中任意一条命令

pyenv deactivate  # 或者
source deactivate

3. 删除虚拟环境

随着时间推移,你可能积攒很多虚拟环境,删除虚拟环境可以使用命令

pyenv uninstall my-env或者rm -rf my-env直接删除虚拟环境所在的目录


第 3 章:更新 pyenv

如果是用 git 克隆的,更新则使用git pull命令

cd ~/.pyenv 或者 cd $(pyenv root)

git pull origin master

Mac用户则使用brew命令

brew upgrade pyenv


第 4 章:卸载 pyenv

由于 pyenv 把一切都放在 ~/.pyenv 下了,所以Linux下卸载分为两步

  1. 删除环境变量

  2. 执行:rm -rf ~/.pyenv或者 rm -rf $(pyenv root)

Mac用户卸载需要使用brew命令:

brew uninstall pyenv






PS

本文参考了官方文档并进行了修改,文档可以在源码github地址中找到

pyenv: https://github.com/pyenv/pyenv
pyenv-virtualenv: https://github.com/pyenv/pyenv-virtualenv

你可能感兴趣的:(Python,linux,ubuntu)