简单的python版本管理器: pyenv

pyenv可以让你轻松的在各版本的python环境中切换自如,它是一个简单而又不引人注目并遵循UNIX传统的专用工具。

这个项目是从rbenvruby-buildfork而来, 并且在配合Python的情况下做了适当的修改.

Terminal output example

pyenv能做什么?

  • 让你在用户基础上改变全局Python版本.

  • 支持为每一个项目设立一个Python版本.

  • 允许您使用环境变量覆盖Python版本.

  • 多个python环境中搜索命令,这有助于在Python版本中进行测试 tox.

与pythonbrew和pythonz相比,pyenv不能做什么?

  • 不依赖于Python本身。 pyenv是由纯shell脚本制作的。没有Python的引导问题。

  • **不需要加载到你的shell中。**相反,pyenv的shim方法的工作原理是在$ PATH中添加一个目录。

  • 不能管理virtualenv 当然你可以自行创建virtualenv virtualenv或者使用pyenv-virtualenv去自动化构建

工作原理

在较高的层次上,pyenv使用shim拦截Python命令注入PATH的可执行文件, 确定哪个Python版本已由您的应用程序指定,并传递您的命令使用你想要的Python安装版本。

理解PATH(环境变量路径)

当你执行命令,如python或者pip, 你的操作系统会搜索目录列表以查找可执行文件的那个名字.此目录列表位于环境变量中称为PATH, 列表中的每个目录使用用冒号分隔.

PATH.png

PATH中的目录从左到右搜索,因此首先匹配在列表开头的目录中的可执行文件, 然后一次往右匹配。在这个例子中,首先搜索/usr/local/sbin目录,然后搜索/usr/local/bin,然后是/usr/sbin

理解Shims(垫片)

pyenv的工作原理是在你的PATH前面插入一个shims目录,这样一来系统在搜索Python的时候第一个找到的就是pyenv管理的Python环境。这个插到最前面的路径就叫做垫片(shims)

$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin

通过一个叫做为_rehashing_的进程, pyenv维护shims目录以匹配每个已安装版本的每个Python命令,比如pythonpip等。

垫片是轻量级可执行文件,只是简单地传递命令到pyenv。所以只要安装了pyenv,当你运行时,比如说,pip,你的操作系统将执行以下操作:

  • PATH中搜索名为pip的可执行文件

  • PATH的开头找到名为pip的pyenv垫片

  • 运行名为pip的垫片,然后将命令传递给属于pyenv的pip命令

选择Python版本

执行shims程序时,pyenv会确定要使用的Python版本,并按此以下资源顺序读取:

  1. PYENV_VERSION环境变量(如果指定). 你可以使用pyenv shell 去设置环境变量在你当前shell session.

  2. 当前特定于应用程序的.python-version文件目录(如果有). 您可以使用 pyenv local修改当前目录.python-version文件.

  3. 通过搜索每个上层目录,找到第一个.python-version文件(如果有的话),直到到达文件系统的根目录

  4. 全局$(pyenv root)/version文件. 您可以使用pyenv global 修改这个文件. 如果是该全局文件不存在,pyenv假设您要使用“系统”Python。(换句话说,如果pyenv不在您的PATH中,那么任何版本都会运行.)

NOTE: 您可以同时激活多个版本,甚至包括Python2或Python3的任何版本. 这允许平行使用Python2和Python3,并且需要像tox这样的工具. 例如,要设置你的首次使用的系统Python和Python3的路径(在这个例子中设置为2.7.9和3.4.2),但也可以在你的PATH使用Python 3.3.6,3.2和2.5,首先是pyenv install缺少的版本,然后设置pyenv全局3.3.6 3.2 2.5.这时, 使用pyenv which应该能够找到每个可执行路径, 例如pyenv which python2.5(应该显示$(pyenv root/versions/2.5 /bin/python2.5) 或者pyenv which python3.4(应该显示系统Python3路径). 您还可以指定多个.python-version`文件中的版本,由换行符或任何空格分隔。

📅 2019-09-03
微信小程序通过uni-app实现v-html渲染视图
本文介绍了在微信小程序开发中,如何利用uni-app框架实现类似于Vue的v-html指令功能。文章分析了微信小程序原生不支持直接解析HTML的问题,并详细展示了通过rich-text组件和methods方法实现富文本渲染的完整Demo过程,帮助开发者解决小程序中动态渲染HTML视图的难题。
📅 2019-07-02
本文记录了微信小程序开发过程中遇到的常见问题及解决方案,包括rpx自适应单位的使用、组件库样式优先级调整、Flex布局居中技巧、selectedColor配置失效问题、背景虚化效果实现以及scroll-view横向滚动的CSS设置方法。适合正在学习或开发微信小程序的前端开发者参考。
📅 2019-07-02
Shell入门
本文是Shell脚本编程的入门学习笔记。文章涵盖了Shell脚本的基本格式、变量的定义与使用(包括只读变量和删除变量),以及如何使用read命令获取用户输入。适合编程初学者快速掌握Shell基础语法。
📅 2019-07-01