0%

pyenv & pyenv-virtualenv

你是否拥有这样的问题: - python版本需求不同,有时需要2.7,有时需要3.5,有时需要3.7 - 不同项目python需要的版本不同,这个需要3.5,那个需要3.7,还有一个需要2.7 - python版本装多了以后管理混乱,例如pip 的使用,不知道将库具体安装到哪一个版本,python 解释环境也搞不清,完全是碰运气 - python 可能安装了很多外部库,但是此项目只用到了一两个甚至没有用到,感觉很浪费 - 使用python 开发项目时,安装了很多外部库,随着项目开发的越来越多,python 安装的外部库越来越多,到这python 很臃肿 - 不同项目使用的外部库版本不同,导致在切换项目是要先删除之前的外部库,安装这个项目需要的外部库版本 - 现在几乎所有的操作系统都自带python,但大多数都是python2 版本,许多系统组件与其挂钩,不能轻易更改或者删除

所以,我们需要python 版本控制,就引出了本篇博文主题—— pyenv 以及pyenv-virtualenv

pyenv

安装

  1. 克隆项目到本地

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

  2. 添加环境变量

    1
    2
    3
    4
    5
    6
    $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
    $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile

    注意:
    zsh 用户:~/.zshrc
    ubuntu 和fedora 用户:~/.bashrc

  3. 初始化并且开启shims 和自动补全

    1
    2
    3
    4
    5
    $ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

    注意:
    zsh 用户:~/.zshrc
    ubuntu 和fedora 用户:~/.bashrc

  4. 重新加载~/.bash_profile 文件

    1
    2
    3
    4
    5
    $ source ~/.bash_profile

    注意:
    zsh 用户:~/.zshrc
    ubuntu 和fedora 用户:~/.bashrc

  5. 测试是否安装完毕 输入命令后,出现以下信息证明安装完毕

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    $ pyenv

    pyenv 1.2.16-5-g7097f82
    Usage: pyenv <command> [<args>]

    Some useful pyenv commands are:
    --version Display the version of pyenv
    commands List all available pyenv commands
    exec Run an executable with the selected Python version
    global Set or show the global Python version
    help Display help for a command
    hooks List hook scripts for a given pyenv command
    init Configure the shell environment for pyenv
    install Install a Python version using python-build
    local Set or show the local application-specific Python version
    prefix Display prefix for a Python version
    rehash Rehash pyenv shims (run this after installing executables)
    root Display the root directory where versions and shims are kept
    shell Set or show the shell-specific Python version
    shims List existing pyenv shims
    uninstall Uninstall a specific Python version
    version Show the current Python version and its origin
    version-file Detect the file that sets the current pyenv version
    version-name Show the current Python version
    version-origin Explain how the current Python version is set
    versions List all Python versions available to pyenv
    whence List all Python versions that contain the given executable
    which Display the full path to an executable

    See `pyenv help <command>' for information on a specific command.
    For full documentation, see: https://github.com/pyenv/pyenv#readme

使用pyenv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 查看当前版本
pyenv version

# 查看本机拥有的所有版本
pyenv versions

# 查看所有可安装的版本
pyenv install --list

# 安装指定版本
pyenv install 3.6.5
# 安装新版本后rehash一下
pyenv rehash

# 删除指定版本
pyenv uninstall 3.5.2

# 指定全局版本
pyenv global 3.6.5
# 指定多个全局版本, 3版本优先
pyenv global 3.6.5 2.7.14

# 指定本地版本,优先级高于全局版本
pyenv lobal 3.5.2
# 指定多个本地版本, 3版本优先
pyenv local 3.6.5 2.7.14

# 实际上当你切换版本后, 相应的pip和包仓库都是会自动切换过去的
# 可以放心大胆的 pip install REQUIREMENT

pyenv-virtualenv

安装

  1. 克隆项目到本地

    1
    $ git clone https://github.com/pyenv/pyenv-virtualenv.git $PYENV_ROOT/plugins/pyenv-virtualenv

  2. 初始化

    1
    2
    3
    4
    5
    $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

    注意:
    zsh 用户:~/.zshrc
    ubuntu 和fedora 用户:~/.bashrc

  3. 重新加载~/.bash_profile 文件

    1
    $ source ~/.bash_profile

  4. 测试是否安装完毕 输入命令提示以下信息,证明安装完毕

    1
    2
    3
    $ pyenv virtualenv

    pyenv-virtualenv: no virtualenv name given.

使用pyenv-virtualenv

1
2
3
4
5
# 创建一个3.6.5版本的虚拟环境, 命名为v365env, 然后激活虚拟环境
$ pyenv virtualenv 3.6.5 v365env

# v365env 是一个虚拟python 环境,没有任何外部库,需要什么自己安装什么
# 推荐每一个项目都设置自己对于的虚拟环境,方便管理和隔离
1
2
3
4
5
6
7
8
9
# pyenv versions 命令同样可以查看本机所以的虚拟环境
# 对虚拟环境的操作同pyenv
$ pyenv versions # 查看
$ pyenv uninstall v365env # 删除

# 进入到项目目录,单独为其设置python 虚拟环境
$ pyenv local v365env

# 之后放心大胆的pip 吧

额外说明

pyenv只会管理通过pyenv安装的python版本,你自己在python官网上下载的直接安装的pyenv并不能被管理!!! 同样除了系统自带的python包外,其他直接安装的python包是识别不出来的!!!

参考资料

[1] pyenv/pyenv,GitHub [2] Python版本管理神器-pyenv,知乎