资讯专栏INFORMATION COLUMN

使用 pyenv + virtualenv 打造多版本 Python 开发环境

JerryWangSAP / 2358人阅读

摘要:本文最早发表于个人博客配置环境在工作开发中,一直使用来管理的包环境。很好的解决了不同项目使用不同包的需求。建议路径为添加环境变量。设置面向程序的本地版本,通过将版本号写入当前目录下的文件的方式。若找不到,就用版本。

本文最早发表于个人博客Pylixm"wiki: http://pylixm.cc

配置环境:

CentOS release 6.8

pyenv 20160509

在工作开发中,一直使用 virtualenv 来管理python的包环境。很好的解决了不同项目使用不同python包的需求。对于多python版本的问题如何解决一直无解,虽然可以安装多个

版本的python,靠绝对路径或靠创建虚拟环境的时候指定python(virtualenv -p)版本来解决,但总感觉不是那么的优雅。同事推荐了 pyenv ,一直没用过,特从网上找了些资料试着配置了下,记录如下。

pyenv vs virtualenv

pyenv 是针对 python 版本的管理,通过修改环境变量的方式实现;

virtualenv 是针对python的包的多版本管理,通过将python包安装到一个模块来作为python的包虚拟环境,通过切换目录来实现不同包环境间的切换。

pyenv 原理

pyenv 的美好之处在于,它并没有使用将不同的 $PATH 植入不同的 shell 这种高耦合的工作方式,而是简单地在 $PATH 的最前面插入了一个垫片路径(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin。所有对 Python 可执行文件的查找都会首先被这个 shims 路径截获,从而架空了后面的系统路径。

pyenv 安装使用 自动安装

pyenv 提供了自动安装的工具,执行命令安装即可:

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

需保证系统有 git ,否则需要新安装git工具。

手动安装

将 pyenv 检出到你想安装的目录。建议路径为:$HOME/.pyenv

 $ cd
 $ git clone git://github.com/yyuu/pyenv.git .pyenv

添加环境变量。PYENV_ROOT 指向 pyenv 检出的根目录,并向 $PATH 添加 $PYENV_ROOT/bin 以提供访问 pyenv 这条命令的路径

 $ echo "export PYENV_ROOT="$HOME/.pyenv"" >> ~/.bash_profile
 $ echo "export PATH="$PYENV_ROOT/bin:$PATH"" >> ~/.bash_profile

这里的 shell 配置文件(~/.bash_profile)依不同 Linux 而需作修改——Zsh:~/.zshenv;Ubuntu:~/.bashrc

向 shell 添加 pyenv init 以启用 shims 和命令补完功能

 $ echo "eval "$(pyenv init -)"" >> ~/.bash_profile

配置文件的位置同上一条一样需要修改

重启 shell(因为修改了 $PATH)

 $ exec $SHELL
pyenv 常用命令 python配置

$ pyenv versions -- 查看系统当前安装的python列表

$ pyenv install -v 3.5.1 -- 安装python

$ pyenv uninstall 2.7.3 -- 卸载python

$ pyenv rehash -- 创建垫片路径(为所有已安装的可执行文件创建 shims,如:~/.pyenv/versions/*/bin/*,因此,每当你增删了 Python 版本或带有可执行文件的包(如 pip)以后,都应该执行一次本命令)

python切换

$ pyenv global 3.4.0 -- 设置全局的 Python 版本,通过将版本号写入 ~/.pyenv/version 文件的方式。

$ pyenv local 2.7.3 -- 设置面向程序的本地版本,通过将版本号写入当前目录下的 .python-version 文件的方式。通过这种方式设置的 Python 版本优先级较 global 高。
pyenv 会从当前目录开始向上逐级查找 .python-version 文件,直到根目录为止。若找不到,就用 global 版本。

$ pyenv shell pypy-2.2.1 -- 设置面向 shell 的 Python 版本,通过设置当前 shell 的 PYENV_VERSION 环境变量的方式。这个版本的优先级比 local 和 global 都要高。--unset 参数可以用于取消当前 shell 设定的版本。

$ pyenv shell --unset

python优先级

shell > local > global

pyenv 插件: pyenv-virtualenv 安装

使用自动安装pyenv 后,它会自动安装部分插件,通过pyenv-virtualenv 插件可以很好的和 virtualenv 结合:

[root@linux3311 ~]# cd .pyenv/plugins/
[root@linux3311 plugins]# ll
insgesamt 24
drwxr-xr-x. 4 root root 4096 19. Jun 05:17 pyenv-doctor
drwxr-xr-x. 5 root root 4096 19. Jun 05:18 pyenv-installer
drwxr-xr-x. 4 root root 4096 19. Jun 05:18 pyenv-update
drwxr-xr-x. 7 root root 4096 19. Jun 05:18 pyenv-virtualenv
drwxr-xr-x. 4 root root 4096 19. Jun 05:18 pyenv-which-ext
drwxr-xr-x. 5 root root 4096 19. Jun 05:17 python-build
 
使用

创建虚拟环境 $ pyenv virtualenv 2.7.10 my-virtual-env-2.7.10
若不指定python 版本,会汇报认使用当前环境python版本。

列出当前虚拟环境 pyenv virtualenvs

激活虚拟环境 pyenv activate

退出虚拟环境 pyenv deactivate

删除虚拟环境 pyenv uninstall my-virtual-env

使用pyenv 来管理python,使用 pyenv-virtualenv 插件来管理多版本 python包。

此时,还需注意,当我们将项目运行的 env 环境部署到生产环境时,由于我们的python 包是依赖python 的,需要注意生产环境的python版本问题(详见 这里)。

以上为个人拙见,欢迎小伙伴们留言交流。小伙伴们若有更好的python 多版本环境管理方案,希望留言不吝赐教,在此,先谢过了!

参考

pyenv 下载地址 这里
virtualenv 中文文档地址 这里
http://my.oschina.net/lionets/blog/267469
https://github.com/yyuu/pyenv-virtualenv

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38044.html

相关文章

  • Python版本切换工具-Pyenvvirtualenv及Anaconda科学计算环境的配置

    摘要:为了安装科学计算环境,控制好版本,今天上午总算折腾好了。切换和使用新的虚拟环境这样就能切换为这个版本的虚拟环境。通过输入查看现在版本,可以发现处于虚拟环境下了。指定包的版本多个版本并存,尤其是和的并存。下面用创建一个名叫的版本为的环境。 为了安装Anaconda科学计算环境,控制好python版本,今天上午总算折腾好了。 学习python有时希望在python2.7环境下,有时希望在...

    rozbo 评论0 收藏0
  • 如何管理Python版本和虚拟环境

    摘要:让我们探讨以下用例如果您使用单个版本的如版本,并且想要管理不同的虚拟环境,那么就是您所需要的。如果你想使用多个版本的,不管是否有虚拟环境,那么请使用。和使用时,我们现在知道如何在不同版本的之间安装和切换,以及如何创建新的虚拟环境。 showImg(https://segmentfault.com/img/remote/1460000019127686?w=800&h=428); 多个...

    hersion 评论0 收藏0
  • pipenv 更优雅的管理你的python开发环境

    摘要:可通过以下命令生成文件运行虚拟环境可使用以下命令来运行项目或者启动虚拟环境的环境直接运行并不会出现命令行,是应为没有配置环境变量。 本文最早发布与个人博客:http://www.pylixm.cc 最近常看到pipenv这个管理工具,今天有时间查了下,是 Kennethreitz 大神的作品,看了下github的仓库,是2017年1月份创建的,仅仅一年的时间变获得了7k+的收藏,最新一...

    dockerclub 评论0 收藏0
  • python虚拟环境:envirtualevn 、pyevn

    摘要:虚拟环境非常有用,因为它可以防止系统出现包管理混乱和版本冲突的问题。为每个应用程序创建一个虚拟环境可以确保应用程序只能访问它们自己使用的包,从而全局解释器只作为一个源且依然整洁干净去更多的虚拟环境。另一个好处是,虚拟环境不需要管理员权限。 https://www.jianshu.com/p/08c... virtualenv 虚拟环境是在Python解释器上的一个私有复制,你可以在一个...

    ghnor 评论0 收藏0
  • pyenv 安装配置与国内镜像加速 结合 virtualenv

    摘要:声明环境下安装执行以下文本放到里面重启控制台加速搜狐镜像源加速下载需要的版本放到文件夹下面然后执行版本号安装对应的版本傻瓜式脚本如下,其中表示要下载的版本号执行系统当前如图所示创建虚拟环境现在建议使用管理虚拟环境,使用安装版本 声明 ubuntu环境下 安装 执行 sudo curl -L https://raw.githubusercontent.com/yyuu/pyenv-ins...

    LeanCloud 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<