Python发展到现在已经很强大了,各种开发相信大家都可以随心应对。但是唯独虚拟环境让人觉得很头大,不同的项目使用到的库版本不同要求我们为每一个项目创建其独一无二的环境。如果到现在你开发的项目都是基于原生pip环境开发的,那么我只能说你是个狼人。只使用系统环境不但会让你的虚拟环境变得臃肿,并且不能应对不同版本的支持库的项目开发。但是对于初学者来说应该都有一段不堪的过去。
对于虚拟环境管理工具现在已经发展的很完善了。相信大部分人入门都是从virtualenv开始的。由于命令过于原生让人很不好记,于是大家会去安装virtualenvwrapper,wrapper是对virtualenv的包装。它实现了对virtualenv的简化,可以说是更加方便了我们开发者。再到后来大名鼎鼎的pipenv,可以说虚拟环境管理变得越来越简单和纯粹了。后来因为Windows上想要安装不同Python版本的需求,我接触到了Anaconda,只能说是真香。Anaconda不但可以管理虚拟环境,甚至它把Python版本都纳入了虚拟环境管理,这样基本实现了我所有需求。
最近在研究如何在Centos部署Flask项目,对于不同版本的Python,Linux好像也没有什么好的解决办法。同样也是像Windows一样安装之后更改环境变量。这对于一个Linux基础较为薄弱的人来说着实是很麻烦。因为你不单要为每一个Python版本修改环境变量,还有pip的环境变量...说起来就头大。也是机缘巧合,我看到宝塔面板上有快速部署Flask项目的工具,上面是支持Python版本配置的,就是基于Pyenv实现的。所以机缘巧合我知道了Pyenv,并且对它爱不释手。
什么是Pyenv?
Pyenv主要是用来管理一台设备上的python版本的。比如说一个项目需要Python2,另一个项目需要使用Python3。如何管理Python显得尤其需要,Pyenv做的就是这个工作。Pyenv 是 Python 版本管理工具。 pyenv 可以改变全局的 Python 版本,安装多个版本的 Python。
Pyenv 通过系统修改环境变量来实现 Python 不同版本的切换。Pyenv 它并没有使用将不同的 PATH植入不同的shell这种高耦合的工作方式,而是简单地在PATH 的最前面插入了一个垫片路径(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin。所有对 Python 可执行文件的查找都会首先被这个 shims 路径截获,从而使后方的系统路径失效。
同时Pyenv还集成了virtualenv,可以实现管理Python版本的同时还能方便的管理虚拟环境。
对于如何在Centos7中安装Pyenv请转文章:Centos 7.4 安装pyenv及使用说明。
Pyenv的使用
查看所有可安装版本 # pyenv install -list 安装指定版本的Python # pyenv install [version] 卸载指定的Python版本 # pyenv uninstall [version] 查看当前使用Python版本 # pyenv version 查看系统中所有Python版本 # pyenv versions 设置或者显示当前shell的python版本,作用时间为本terminal # pyenv shell [vsersion] //不带version参数为显示版本,带上version为设置版本 设置或者显示当前项目文件夹的Python版本或者虚拟环境版本,当进入文件夹后,系统会自动切换至设置的Python版本 # pyenv local [version] //不带version参数为显示版本,带上version为设置版本 取消版本local设置 # pyenv local --unset 设置或者显示全局的Python版本 # pyenv global [version] //不带version参数为显示版本,带上version为设置版本 取消版本global设置 # pyenv global --unset
Pyenv-virtualenv的使用
查看所有虚拟环境 # pyenv virtualenvs 创建虚拟环境 # pyenv virtualenv [version] [name] //version指明创建的Python版本号, name为虚拟环境的名称 进去虚拟环境 # pyenv activate [name] //name表示虚拟环境名 退出虚拟环境 # pyenv deactivate 删除一个虚拟环境 # pyenv virtualenv-delete [name] //name表示要删除的虚拟环境名
Pyenv-virtualenv给我们提供了很强大的虚拟环境管理功能。在设置了local venv之后甚至不需要进入虚拟环境,只要在项目目录下的文件会自动调用相应的虚拟环境,十分方便。创建的虚拟环境存放在目录.~/.pyenv/versions/
。
目前来看好像无法改变创建的虚拟环境路径,也就是没有办法直接像virtualenv一样把虚拟环境安装到项目文件夹内。如果你有很严重的强迫症,就是看不惯虚拟环境统一目录管理(就像我一样),那么接下来的教程可以帮助到你。
在指定目录下创建虚拟环境
我们知道所有通过pyenv virtualenv
都会存放在.~/.pyenv/versions/
目录下面,那么我们可以去该目录看一下。
通过ls -l
指令我们不难看出,我们创建的虚拟环境都存放的根路径其实是在/root/.pyenv/versions/3.7.2/envs/chatbox_venv
下面。在versions文件夹下pyenv生成了一个软连接链接到真实的虚拟环境。这个软连接是 pyenv virtualenv获取本地虚拟环境的基础。所以我的想法是自己通过virtualenv在项目文件夹下创建venv,然后在versions目录下创建一个软连接,这样就把我们自己创建的虚拟环境通过软连接链接给pyenv virtualenv管理。
先创建项目文件夹 # mkdir /home/weiney/treasure # cd /home/weiney/treasure # virtualenv treasure_venv //创建名为treasure的虚拟环境 切换目录至/root/.pyenv/versions # cd /root/.pyenv/versions 创建软连接到虚拟环境 # ln -s /home/weiney/treasure/treasure_venv treasure_venv 创建完成后使用pyenv virtualenvs查看是否配置成功 # pyenv virtualenvs treasure_venv (created from /root/.pyenv/versions/3.7.2)
有需要的朋友可以试一下,感觉实现起来还是很巧妙的,这也是我研究一整天的成果。
上文只罗列了常用的命令,并不是所有有命令都有介绍,感兴趣的可以使用pyenv commands
查看所有可用命令。文章是我查阅资料的总结,想详细了解的可以看看这个:Python多版本管理器-pyenv 介绍及部署记录。总的来说没有什么问题,Pyenv真真是好用啊。
后面会介绍一下基于Centos7 + Nginx + Gunicorn + Supervisor的Flask项目部署,希望能尽早掌握。
共有 0 条评论