{转}Linux下 Python多版本共存之pyenv

本文介绍如何使用Pyenv实现在同一系统中共存多个Python版本,包括安装Pyenv及Python各版本、设置全局版本等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



Python多版本共存之pyenv 

转自:http://seisman.info/python-pyenv.html 

经常遇到这样的情况:

  • 系统自带的Python是2.6,自己需要Python 2.7中的某些特性;
  • 系统自带的Python是2.x,自己需要Python 3.x;

此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存。pyenv就是这样一个Python版本管理器。

安装pyenv

1
2
3
4
5
$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ exec $SHELL -l

安装Python

查看可安装的版本

1
$ pyenv install --list

该命令会列出可以用pyenv安装的Python版本,仅列举几个:

2.7.8   # Python 2最新版本
3.4.1   # Python 3最新版本
anaconda-2.0.1  # 支持Python 2.6和2.7
anaconda3-2.0.1 # 支持Python 3.3和3.4

其中形如x.x.x这样的只有版本号的为Python官方版本,其他的形如xxxxx-x.x.x这种既有名称又有版本后的属于“衍生版”或发行版。

安装Python的依赖包

在安装Python时需要首先安装其依赖的其他软件包,已知的一些需要预先安装的库如下。

在CentOS/RHEL/Fedora下:

sudo yum install readline readline-devel readline-static
sudo yum install openssl openssl-devel openssl-static
sudo yum install sqlite-devel
sudo yum install bzip2-devel bzip2-libs

安装指定版本

使用如下命令即可安装python 3.4.1:

1
$ pyenv install 3.4.1 -v

该命令会从github上下载python的源代码,并解压到/tmp目录下,然后在/tmp中执行编译工作。若依赖包没有安装,则会出现编译错误,需要在安装依赖包后重新执行该命令。

对于科研环境,更推荐安装专为科学计算准备的Anaconda发行版,pyenv install anaconda-2.1.0安装2.x版本,pyenv install anaconda3-2.1.0安装3.x版本;

Anacoda很大,用pyenv下载会比较慢,可以自己到Anaconda官方网站下载,并将下载得到的文件放在~/.pyenv/cache目录下,则pyenv不会重复下载。

更新数据库

安装完成之后需要对数据库进行更新:

1
$ pyenv rehash

查看当前已安装的python版本

1
2
3
$ pyenv versions
* system (set by /home/seisman/.pyenv/version)
3.4.1

其中的星号表示当前正在使用的是系统自带的python。

设置全局的python版本

1
2
3
4
$ pyenv global 3.4.1
$ pyenv versions
system
* 3.4.1 (set by /home/seisman/.pyenv/version)

当前全局的python版本已经变成了3.4.1。也可以使用pyenv localpyenv shell临时改变python版本。

确认python版本

1
2
3
4
5
$ python
Python 3.4.1 (default, Sep 10 2014, 17:10:18)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

使用python

  • 输入python即可使用新版本的python;
  • 系统自带的脚本会以/usr/bin/python的方式直接调用老版本的python,因而不会对系统脚本产生影响;
  • 使用pip安装第三方模块时会安装到~/.pyenv/versions/3.4.1下,不会和系统模块发生冲突。
  • 使用pip安装模块后,可能需要执行pyenv rehash更新数据库;

修订历史

  • 2013-10-04:初稿;
  • 2014-10-07:将Python依赖包一段的位置提前;
### 实现 Python 多版本共存的最佳实践 为了有效解决 Python多版本共存问题,可以采用 `pyenv` 工具来管理不同版本的 Python 解释器,并结合虚拟环境(virtual environment, venv)技术隔离项目依赖。这种方法能够显著减少因版本冲突带来的麻烦。 #### 使用 pyenv 管理多个 Python 版本 `pyenv` 是一种轻量级的工具,用于在单个系统上安装和切换不同的 Python 版本。它允许用户在同一台机器上并行安装多个 Python 发行版,并轻松指定全局、本地或特定 shell 中使用的解释器版本[^1]。 以下是具体操作流程: 1. **安装 pyenv** 需要先安装必要的构建工具和其他依赖项。对于基于 Debian/Ubuntu 的发行版,可以通过以下命令完成前置准备: ```bash sudo apt update && sudo apt install -y make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git ``` 安装完成后,执行以下命令克隆 pyenv 到本地: ```bash curl https://pyenv.run | bash ``` 2. **配置环境变量** 将 pyenv 添加到系统的 PATH 变量中,在 `.bashrc`, `.zshrc` 或其他 Shell 初始化文件中加入如下内容: ```bash export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init --path)" eval "$(pyenv virtualenv-init -)" ``` 3. **安装所需 Python 版本** 使用 pyenv 下载并编译目标 Python 版本。例如,安装 Python 3.9 和 Python 2.7: ```bash pyenv install 3.9.0 pyenv install 2.7.18 ``` 4. **设置默认或局部版本** 设置当前用户的全局默认 Python 版本: ```bash pyenv global 3.9.0 ``` 如果某个目录下的脚本需要使用特定版本,则可以在该目录下定义局部版本: ```bash cd /path/to/project/ pyenv local 2.7.18 ``` #### 虚拟环境的应用场景 即使解决了基础层面的 Python 版本兼容性问题,实际开发过程中仍可能遇到同一版本的不同项目的依赖差异。此时应引入虚拟环境机制进一步增强隔离效果。推荐的方式是在每个新项目启动时创建独立的虚拟环境。 以 Kali Linux 上安装 pwncat 为例说明整个过程: 1. 创建一个新的工作区; 2. 执行下面指令建立专属于此应用的虚拟空间: ```bash python3 -m venv ./venv-pwncat source ./venv-pwncat/bin/activate pip install pwncat deactivate ``` 当不再需要此实例时可以直接移除对应路径即可完全清理掉关联数据。 #### 总结 综上所述,通过组合运用 pyenv 和虚拟环境策略,不仅可以妥善处理跨平台间存在的多种 Python 版本需求情况,还能保障各个应用程序之间的相互独立不受干扰^。 ```python import sys print(f"Current Python Version: {sys.version}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值