10 KiB
| title | date | tags | categories | author | |||
|---|---|---|---|---|---|---|---|
| Linux 环境下Python版本管理神器 --- Pyenv(Centos 7.6) | 2020-11-02 15:33:56 |
|
|
Anges黎梦 |
前言
它是一个简单的Python版本管理工具。
前身为Pythonbrew,pyenv允许你改变全局的python版本,安装多种不同的python版本,设置应用指定的python版本以及创建/管理虚拟的python环境(”virtualenv’s”)。
所有这些都在*NIX的机器上完成(Linux和OS X),它工作在用户空间,因而不需要sudo命令。
使用场景
python 版本比较多,2 和 3 相差非常大,很多项目需要跑在同一台服务器上,
我们可以选择直接运行,也可以选择使用 docker。
如果用 docker 那就不需要隔离环境了,如果要直接运行在服务器上,那就必须有隔离环境。
比如有的项目使用 python 3.5,有的项目使用 python 3.7,
此时我们可以借助 pyenv 帮助我们完美的隔离环境,让多个版本的 python 没有任何冲突,完美共存。
环境说明
系统版本:
lsb_release -a
服务器配置:
df -h
git版本:
git用来下载安装包使用,若没有安装,可以使用
yum install -y git命令安装
安装Pyenv
安装依赖
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
下载安装包
当前目录为
root
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
配置环境变量
我下载到root目录下,配置环境变量直接用下面的即可。如果目录有修改,记得要修改环境变量中的配置。
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
exec $SHELL -l
检查安装
列出所有可以安装的
python版本
pyenv install --list
执行结果如图,可以看到能安装的 python 版本,即为成功。
安装 Python 版本
已经装好
pyenv,就可以开始安装想要安装的python版本了。
命令行安装
安装命令:
安装时,会先去下载
python包,然后再安装。过程可能比较长,取决与下载速度。
这里建议可以下载好
python包,然后再安装。
如何下载Python包,见 Python环境搭建。
pyenv install 3.8.6
安装包安装
检查缓存文件夹:
cd ~/.pyenv/
ls
进入目录检查目录中是否有 cache 文件夹。
若没有 cache 文件夹,则创建一个。
mkdir cache
安装包安装:
把下载好的文件放到 cache 文件夹内。
使用以下两个命令中的一个进行安装。
pyenv install 3.8.6 -v
pyenv install 3.8.6
若遇到报错(安装Python 或使用pip安装包)
No module named '_ctypes'
可使用下面命令,
yum install libffi-devel -y
如果在安装包时遇到报错,安装依赖后如果还安装不成功,那么需要卸载Python重新安装
常用命令
pyenv commands
列出所有可用的pyenv命令。
pyenv local
通过将版本名称写入
.python-version当前目录中的文件来设置特定于本地应用程序的Python版本。此版本将覆盖全局版本,并且可以通过设置
PYENV_VERSION环境变量或使用pyenv shell命令来覆盖自身。
pyenv local 2.7.6
在没有版本号的情况下运行时,
pyenv local报告当前配置的本地版本。
您还可以取消设置本地版本:
pyenv local --unset
pyenv的早期版本将本地版本规范存储在名为的文件中.pyenv-version。
为了向后兼容,pyenv将读取.pyenv-version文件中指定的本地版本,但.python-version同一目录中的 文件优先。
pyenv local (高级)
您可以一次将多个版本指定为本地Python。
假设您有两个版本2.7.6和3.3.3。如果您选择2.7.6胜过3.3.3,
$ pyenv local 2.7.6 3.3.3
$ pyenv versions
system
* 2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
* 3.3.3 (set by /Users/yyuu/path/to/project/.python-version)
$ python --version
Python 2.7.6
$ python2.7 --version
Python 2.7.6
$ python3.3 --version
Python 3.3.3
或者,如果您更喜欢3.3.3而不是2.7.6,
$ pyenv local 3.3.3 2.7.6
$ pyenv versions
system
* 2.7.6 (set by /Users/yyuu/path/to/project/.python-version)
* 3.3.3 (set by /Users/yyuu/path/to/project/.python-version)
venv27
$ python --version
Python 3.3.3
$ python2.7 --version
Python 2.7.6
$ python3.3 --version
Python 3.3.3
pyenv global
通过将版本名称写入~/.pyenv/version文件来设置要在所有shell中使用的Python全局版本。
可以通过特定于应用程序的.python-version文件或通过设置PYENV_VERSION环境变量来覆盖此版本。
$ pyenv global 2.7.6
特殊版本名称system告诉pyenv使用系统Python(通过搜索进行检测$PATH)。
在没有版本号的情况下运行时,pyenv global报告当前配置的全局版本。
pyenv global (高级)
您可以一次将多个版本指定为全局Python。
假设您有两个版本2.7.6和3.3.3。如果您选择2.7.6胜过3.3.3,
$ pyenv global 2.7.6 3.3.3
$ pyenv versions
system
* 2.7.6 (set by /Users/yyuu/.pyenv/version)
* 3.3.3 (set by /Users/yyuu/.pyenv/version)
$ python --version
Python 2.7.6
$ python2.7 --version
Python 2.7.6
$ python3.3 --version
Python 3.3.3
或者,如果您更喜欢3.3.3而不是2.7.6,
$ pyenv global 3.3.3 2.7.6
$ pyenv versions
system
* 2.7.6 (set by /Users/yyuu/.pyenv/version)
* 3.3.3 (set by /Users/yyuu/.pyenv/version)
venv27
$ python --version
Python 3.3.3
$ python2.7 --version
Python 2.7.6
$ python3.3 --version
Python 3.3.3
pyenv shell
通过PYENV_VERSION 在外壳中设置环境变量来设置特定于外壳的Python版本。
此版本将覆盖应用程序特定的版本和全局版本。
$ pyenv shell pypy-2.2.1
在没有版本号的情况下运行时,pyenv shell报告的当前值PYENV_VERSION。您还可以取消设置外壳版本:
$ pyenv shell --unset
请注意,您需要启用pyenv的shell集成才能使用此命令。
如果您不想使用Shell集成,则可以PYENV_VERSION自己设置 变量:
$ export PYENV_VERSION=pypy-2.2.1
pyenv shell (高级)
您可以PYENV_VERSION一次指定多个版本。
假设您有两个版本2.7.6和3.3.3。如果您选择2.7.6胜过3.3.3,
$ pyenv shell 2.7.6 3.3.3
$ pyenv versions
system
* 2.7.6 (set by PYENV_VERSION environment variable)
* 3.3.3 (set by PYENV_VERSION environment variable)
$ python --version
Python 2.7.6
$ python2.7 --version
Python 2.7.6
$ python3.3 --version
Python 3.3.3
或者,如果您更喜欢3.3.3而不是2.7.6,
$ pyenv shell 3.3.3 2.7.6
$ pyenv versions
system
* 2.7.6 (set by PYENV_VERSION environment variable)
* 3.3.3 (set by PYENV_VERSION environment variable)
venv27
$ python --version
Python 3.3.3
$ python2.7 --version
Python 2.7.6
$ python3.3 --version
Python 3.3.3
pyenv install
安装Python版本(使用python-build)。
Usage: pyenv install [-f] [-kvp] <version>
pyenv install [-f] [-kvp] <definition-file>
pyenv install -l|--list
-l/--list List all available versions
-f/--force Install even if the version appears to be installed already
-s/--skip-existing Skip the installation if the version appears to be installed already
python-build options:
-k/--keep Keep source tree in $PYENV_BUILD_ROOT after installation
(defaults to $PYENV_ROOT/sources)
-v/--verbose Verbose mode: print compilation status to stdout
-p/--patch Apply a patch from stdin before building
-g/--debug Build a debug version
要列出所有可用的Python版本,包括Anaconda,Jython,pypy和stackless,请使用:
$ pyenv install --list
然后安装所需的版本:
$ pyenv install 2.7.6
$ pyenv install 2.6.8
$ pyenv versions
system
2.6.8
* 2.7.6 (set by /home/yyuu/.pyenv/version)
pyenv uninstall
卸载特定的Python版本。
Usage: pyenv uninstall [-f|--force] <version>
-f Attempt to remove the specified version without prompting
for confirmation. If the version does not exist, do not
display an error message.
pyenv rehash
为pyenv(即~/.pyenv/versions/*/bin/*)已知的所有Python二进制文件安装垫片 。
在安装新版本的Python或安装提供二进制文件的软件包之后,请运行此命令。
$ pyenv rehash
pyenv version
显示当前活动的Python版本,以及有关如何设置的信息。
$ pyenv version
2.7.6 (set by /home/yyuu/.pyenv/version)
pyenv versions
列出pyenv已知的所有Python版本,并在当前活动版本旁边显示一个星号。
$ pyenv versions
2.5.6
2.6.8
* 2.7.6 (set by /home/yyuu/.pyenv/version)
3.3.3
jython-2.5.3
pypy-2.2.1
pyenv which
显示运行给定命令时pyenv将调用的可执行文件的完整路径。
$ pyenv which python3.3
/home/yyuu/.pyenv/versions/3.3.3/bin/python3.3
pyenv whence
列出安装了给定命令的所有
Python版本。
$ pyenv whence 2to3
2.6.8
2.7.6
3.3.3






