pyenv 是 Python 版本管理工具。 pyenv 可以改变全局的 Python 版本,在系统中安装多个版本的 Python, 设置目录级别的 Python 版本,还能创建和管理 virtual python environments 。所有的设置都是用户级别的操作,不需要 sudo 命令。
pyenv 的一个典型使用场景就是,比如一个老项目需要使用 Python 2.x ,而另一个新项目需要 Python 3.x 。而 virtualenv 主要是用来管理相同版本 Python 不同项目的包的依赖不同的问题,就无法解决这个问题,这个时候就需要 pyenv。
pyenv 通过修改系统环境变量来实现不同 Python 版本的切换。而 virtualenv 通过将 Python 包安装到一个目录来作为 Python 包虚拟环境,通过切换目录来实现不同包环境间的切换。
pyenv 实现的精髓之处在于,它并没有使用将不同的 $PATH
植入不同的 shell 这种高耦合的工作方式,而是简单地在 $PATH
的最前面插入了一个垫片路径(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin
。所有对 Python 可执行文件的查找都会首先被这个 shims 路径截获,从而使后方的系统路径失效。
pyenv常用命令:
pyenv install -l #查看可以安装的python版本 pyenv install <版本号> #下载python版本 pyenv uninstall <版本号> #卸载python版本 pyenv versions #查看所有python版本与环境 pyenv version #查看现在使用的版本或环境 pyenv shell <环境名> #激活环境 pyenv global <环境名> #设置全局环境 pyenv local <环境名> #设置当前目录环境 pyenv virtualenv <版本号> <环境名> #创建新环境
1.安装pyenv
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
或者
git clone GitHub - pyenv/pyenv: Simple Python version management ~/.pyenv
2.配置
如果采用第一种,系统是会告诉你怎么做的(即将最后的三行追加到~/.bash_profile,做环境变量)
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
如果采用第二种(同样是做环境变量)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
Liunx
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
3.使用变量
source ~/.bash_profile
安装python的不同版本
1.查看可安装的python的版本
pyenv install –list
2.安装python
pyenv install -v 2.7.13
pyenv install -v 3.6.4
卸载python
pyenv uninstall 2.7.13
常见问题及解决方案:
在使用pyenv install安装python,可能会比较慢,甚至下载安装不成功
<1>.这时最好使用是下载好python源码包(Python-3.10.12.tar.xz),然后通过pyenv进行安装(可以下载到境外云服务器)
<2>.将python源码包放置在~/.pyenv/cache/目录中(不要解压 ; 如没有cache就创建一个)
<3>.执行pyenv install 3.6.4
3.查看版本
<1>查看pyenv版本
pyenv –version
pyenv 1.2.3
<2>查看当前python版本
pyenv versions
* system (set by /root/.pyenv/version)
2.7.13
3.6.4
<3>查看当前使用的版本(system 代表当前系统的python 版本)
pyenv version
system (set by /root/.pyenv/version)
4.切换python版本
pyenv global 3.6.4
pyenv version
3.6.4 (set by /root/.pyenv/version)
pyenv versions
system
2.7.13
* 3.6.4 (set by /root/.pyenv/version)
创建虚拟python环境
1.安装插件
创建虚拟的python环境需要pyenv-virtualenv的插件,试着pyenv virtual补全一下,如果存在无需安装
如果不存在,执行如下操作
git clone GitHub - pyenv/pyenv-virtualenv: a pyenv plugin to manage virtualenv (a.k.a. python-virtualenv) ~/.pyenv/plugins/pyenv-virtualenv
echo ‘eval “$(pyenv virtualenv-init -)”’ >> ~/.bash_profile
source ~/.bash_profile
2.创建虚拟环境
pyenv virtualenv 2.7.13 env2713
这是创建了一个名为env2713的python虚拟环境,这个环境的目录位于:~/.pyenv/versions/
3.查看python版本
pyenv versions
* system (set by /root/.pyenv/version)
2.7.13
2.7.13/envs/env2713
3.6.4
3.6.4/envs/env364
env2713
env364
使用python虚拟环境
1.使用虚拟环境
[xxx]#pyenv activate env364
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1’ to simulate the behavior.v364)
[xxx]# python
Python 3.6.4 (default, Apr 19 2018, 10:35:10)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
2.退出虚拟环境
pyenv deactivate
3.环境迁移
pyenv virtualenv 2.7.13 env2713
<1>~./pyenv/versions/下名为2.7.14的文件夹拷贝到要迁移的服务器上
<2>修改env364/pyvenv.cfg文件中的home路径(迁移的服务器无需安装任何东西)
[xxx env364]# cat pyvenv.cfg
home =/root/.pyenv/versions/2.7.13/bin
include-system-site-packages = false
version = 2.7.13
注意事项
1.在使用环境的时候不要用sudo,否则就变成使用全局环境了(例如安装django,直接pip install django就行了,不要用sudo pip install. )
2.迁移时,python3由于依赖于相对高一点的glibc库,要注意迁移与被迁移服务器的glibc的版本问题,版本不同时还需要手动安装,更新时注意
(glibc是GNU发布的libc库,即c运行库;glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibclinux系统的依赖)