pyenv 介绍及部署记录(3)

使用which命令,可以看到,python命令已经不是本来的python命令,而是shims中的脚本文件
[root@localhost ~]# which python
/root/.pyenv/shims/python
[root@localhost ~]# which python3               
/root/.pyenv/shims/python3
[root@localhost ~]# which pip3                 
/root/.pyenv/shims/pip3
 
查看~/.pyenv/shims/python
[root@localhost ~]# cat /root/.pyenv/shims/python
#!/usr/bin/env bash
set -e
[ -n "$PYENV_DEBUG" ] && set -x
 
program="${0##*/}"
if [[ "$program" = "python"* ]]; then
  for arg; do
    case "$arg" in
    -c* | -- ) break ;;
    */* )
      if [ -f "$arg" ]; then
        export PYENV_FILE_ARG="$arg"
        break
      fi
      ;;
    esac
  done
fi
 
export PYENV_ROOT="/root/.pyenv"
exec "/root/.pyenv/libexec/pyenv" exec "$program" "$@"
 
可以看到python的命令最终被~/.pyenv/libexec/pyenv接管运行. 根据pyenv官方的解释, 大致了解到的意思是:
当使用的python命令被pyenv接管以后,到底使用哪个python版本,是由下面这些信息依次决定的:
1) 如果PYENV_VERSION这个变量存在,则使用这个变量里的版本;这个变量是由pyenv shell <version>配置的;
2) 按照往父目录查找的顺序查找直到根目录,第一个被查找到的.python-version文件作为版本文件,其指定的版本作为使用的python版本;
    这个文件使用pyenv local <version>配置
3) $(pyenv root)/version 这个文件若存在,则使用这个文件里制定的版本作为python版本;若不存在,则使用系统的版本;
    这个文件使用pyenv global <version>配置
4) 如果以上变量或文件都没有找到,就按照系统默认制定的python版本了。
 
另外,用户还可以在一个环境下同时配置多个版本的python;
回看一下上面pyenv versions命令,输出的结果中会有一个set by的提示,也向用户展示了,pyenv是基于什么指定的python版本。
[root@localhost ~]# pyenv versions
  system
  2.7.5
  3.1
* 3.6.1 (set by /root/.pyenv/version)

四. python虚拟环境部署

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12279.html