美文网首页生活不易 我用python
使用pyenv与pyenv-virtualenv管理python

使用pyenv与pyenv-virtualenv管理python

作者: ashesxera | 来源:发表于2017-06-22 14:42 被阅读3435次

    一、 pyenv: 便捷的 python 版本管理工具

    由于 python 分为 python2python3,它们各自又有许多版本可供选用,如果系统上同时安装了多个 python,很容易遇到版本切换的问题:

    输入 python 命令的时候,如何快速准确的调出特定版本的 python 解释器?

    这实际上是一个关于 $PATH 环境变量的问题。当输入 python 命令的时候,系统从左向右搜索 $PATH 环境变量中的各个路径,并且运行第一个找到的程序。所以解决这个问题的关键是动态修改 $PATH 环境变量中储存的 python 路径,而 pyenv 通过 shell scriptshims 技术实现了这一点。使用 pyenv 可以很方便的:

    • 安装 python
    • 设置 python 版本
    • 查看 python 版本

    安装 pyenv 时建议参考官方指南,如果盲目信任 Caveats 可能会遇到这样的问题。安装完成后可以使用 pyenv 命令查看 python 版本:

    $ pyenv  install --list
    

    pyenv 提供了包括 Anaconda, Jython, pypystackless 等各种版本的 python 供选择。使用版本号作为参数安装相应的版本:

    $ pyenv install 2.7.6
    $ pyenv install 3.6.1
    

    安装 python 需要从官网下载源码,当采用 proxychains-ng 等一些代理程序来运行 pyenv 时,如果出现安装失败:

    $ proxychains4 pyenv install 3.6.1
    ...
    checking for getaddrinfo... yes
    checking getaddrinfo bug... yes
    Fatal: You must get working getaddrinfo() function.
    or you can specify "--disable-ipv6".
    

    则需要使用 VPN 或者参考这个讨论贴尝试修改配置参数:

    $ PYTHON_CONFIGURE_OPTS="--disable-ipv6" proxychains4 pyenv install 3.6.1
    

    python 安装完成后需要运行:

    $ pyenv rehash
    

    刷新$PATH变量。

    使用 pyenv 指定 python 非常方便,只需在某个目录下执行命令:

    $ pyenv local 3.6.1
    

    则在该目录下运行的 python 都是 3.6.1 版本。

    要查看系统中安装了哪些 python 版本,可以执行命令:

    $ pyenv versions
      system
      2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
    * 3.6.1 (set by /Users/yyuu/path/to/project/.python-version)
    

    其中system代表系统自带的版本,其余是通过 pyenv 安装的版本,*号表示当前使用的版本。因此:

    $ python --version
    Python 3.6.1
    

    同样的,pip等工具都和 3.6.1 版本对应,使用pip安装软件包时也会安装到 3.6.1 对应的目录下。

    以上是对 pyenv 的简单介绍,详细说明请参考官方文档

    二、pyenv-virtualenv: 管理虚拟环境的插件

    pyenv 解决的是同一个系统中不同版本的 python 并存的问题,而 pyenv-virtualenv 解决的是不同项目所依赖的软件包之间可能产生冲突的问题。在实际使用 python 的过程中,很容易出现这样的问题:

    通过pip安装软件包 A 时安装了 A 所依赖的软件包 B;之后又通过pip安装软件包 C 时再次安装了 B 并将之前的覆盖,但是因为 C 和 A 所依赖的 B 版本不同,安装完 C 后导致 A 无法运行。

    pyenv-virtualenv 通过为每个项目设置独立的虚拟环境(目录)来解决上述问题。

    由于 pyenv-virtualenvpyenv 的一个插件,因此需要首先安装 pyenv ,然后通过 git 或者 brew 安装 pyenv-virtualenv

    使用 pyenv-virtualenv 创建虚拟环境:

    $ pyenv virtualenv 3.6.1 my-virtual-env-3.6.1
    

    将创建一个名为my-virtual-env-3.6.1的虚拟环境(目录),并且将 python 3.6.1 对应的binlib复制到该环境中。当该虚拟环境被激活后,所有的 python 操作都只在该环境中进行,从而和其它 python 内容隔离。

    pyenv-virtualenv 支持自动激活和退出虚拟环境。首先确保在 shell 配置文件中添加了

    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    

    接着在需要使用虚拟环境的目录(通常是项目目录)中:建立一个.python-version的文本文件,将虚拟环境名称(如my-virtual-env-3.6.1)写在里面即可。之后每次进/出该目录时,虚拟环境都将自动激活/退出。

    也可以用命令手动激活和退出:

    $ pyenv activate my-virtual-env-3.6.1
    $ pyenv deactivate
    

    查看所有虚拟环境删除虚拟环境等更多命令和其他使用细节,请参考官方文档

    三、总结

    pyenv 用来管理一个系统内多个不同版本的 python,常用命令包括:

    pyenv install --list                            #列出可供安装的 python 版本
    pyenv install <version>                         #安装指定版本的 python
    pyenv local <version>                           #在当前目录下设置 python 版本
    pyenv versions                                  #列出系统中安装的 python 版本
    pyenv version                                   #显示当前目录下采用的 python 版本
    

    pyenv-virtualenv 用来隔离各个项目的依赖文件,常用命令包括:

    pyenv virtualenv [version] <venv-name>                           #创建虚拟环境
    pyenv activate <venv-name>                                       #激活虚拟环境
    pyenv deactivate                                                 #退出虚拟环境
    

    (完)

    相关文章

      网友评论

        本文标题:使用pyenv与pyenv-virtualenv管理python

        本文链接:https://www.haomeiwen.com/subject/smutcxtx.html