pyenv 环境搭建,并切换Python版本

1 pyenv
pyenv是一个Python版本管理工具,它能够进行全局的Python版本切换,也可以为单个项目提供对应的Python版本。使用pyenv以后,可以在服务器上安装多个不同的Python版本,也可以安装不同的Python实现。不同Python版本之间的切换也非常简单。pyenv官方地址https://github.com/pyenv/pyenv-installer

# 更新源
$ yum update
# 安装git
$ yum install git
# 安装
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv

#2 将安装路径写入~/.bashrc
 echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
 echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
 echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source  ~/.bashrc  #配置立刻生效

#也可以将上面三条命令写入到~/.barsh_profile,然后重启一下shell


#3 更新一下
$ pyenv update

2、python安装

2.2 安装repo

报错:Errors during downloading metadata for repository ‘AppStream‘: - Status code: 404

2021年12月31日CentOS 8 EOL。
按照社区规则,CentOS 8的源地址http://mirror.centos.org/centos/8/内容已移除,目前第三方的镜像站中均已移除CentOS 8的源。阿里云的源http://mirrors.cloud.aliyuncs.com和http://mirrors.aliyun.com也无法同步到CentOS 8的源。当您在阿里云上继续使用默认配置的CentOS 8的源会发生报错。

您可以通过下文的操作步骤,在CentOS 8操作系统的ECS实例中将源配置按照网络环境不同进行切换。

yum源:专有网络VPC类型实例需切换为http://mirrors.cloud.aliyuncs.com/centos-vault/8.5.2111源。
epel源:专有网络VPC类型实例需切换为http://mirrors.cloud.aliyuncs.com/epel-archive/8/源。
说明 本文主要说明ECS实例中的相关操作与配置。如果您的服务器不是ECS实例,需保证服务器具有公网访问能力,并且源地址http://mirrors.cloud.aliyuncs.com需要替换为http://mirrors.aliyun.com。例如,切换yum源为http://mirrors.aliyun.com/centos-vault/8.5.2111/;切换epel源为http://mirrors.aliyun.com/epel-archive/8/。

操作步骤

  1. 登录CentOS 8系统的ECS实例。具体操作,请查看下方。
  2. 运行以下命令备份之前的repo文件。
rename '.repo' '.repo.bak' /etc/yum.repos.d/*.repo

3.运行以下命令下载最新的repo文件。

wget https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo -O /etc/yum.repos.d/Centos-vault-8.5.2111.repo wget https://mirrors.aliyun.com/repo/epel-archive-8.repo -O /etc/yum.repos.d/epel-archive-8.repo

4.运行以下命令替换repo文件中的链接。放大查看复制成功

sed -i 's/mirrors.cloud.aliyuncs.com/url_tmp/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo && sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo && sed -i 's/url_tmp/mirrors.aliyun.com/g' /etc/yum.repos.d/Centos-vault-8.5.2111.repo sed -i 's/mirrors.aliyun.com/mirrors.cloud.aliyuncs.com/g' /etc/yum.repos.d/epel-archive-8.repo

5.运行以下命令重新创建缓存。

yum clean all && yum makecache

2.2 安装依赖包

#1.在安装python之前,我们必须要安装python所需要的依赖包,这个必须要安装,安装会失败的:
$ yum install libc6-dev gcc
$ yum install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm
#如果是老版本的yum,还是需要安装额外的配置环境
$ yum -y install zlib*
$ yum install readline readline-devel readline-static -y
$ yum install openssl openssl-devel openssl-static -y
$ yum install sqlite-devel -y
$ yum install bzip2-devel bzip2-libs -y
#2. 安装python
($ pyenv install 3.6.4 -v  #-v 以日志模式显示安装过程)
#因为pyenv会自动到github上下载,速度超慢,所以一般会选择使用curl或者wget下载到~/.pyenv/cache下,然后再用pyenv安装,下面是可选的安装模式
$ cd ~/.pyenv
$ mkdir cache
$ wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz -P  ~/.pyenv/cache/
$ pyenv install 3.6.4 -v

#3.更新pyenv数据库
 $ pyenv rehash

#4.列出所安装的python版本
  $ pyenv versions

#5.切换python版本
$ pyenv  global 3.6.4

#6.验证版本
 $ python
 
Python 3.6.4 (default, Mar 29 2018, 11:02:03)  #已经切换到了3.6.4
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
切换Python版本以后,与版本相关的依赖也会一起切换。因此,我们不用担心不同的版本在系统中是否会相互干扰。

#4. 删除指定python版本
python@ubuntu:~$ pyenv uninstall 3.6.4
pyenv: remove /home/python/.pyenv/versions/3.6.4? 
y
python@ubuntu:~$ pyenv versions
  system
* 3.6.4 (set by /home/python/.pyenv/version)

使用pyenv管理python,必须是用pyenv安装的python才行,系统以前有的,需要重新用pyenv安装
使用pip安装第三方模块时会安装到~/.pyenv/versions/xxx下,不会和系统模块发生冲突;
使用pip安装模块后,可能需要执行pyenv rehash更新数据库。

1.2 virtualenv
virtualenv本身是一个独立的项目,用以隔离不同项目的工作环境。例如,项目A和项目B都是使用Python 2.7.13,但是,项目A需要使用Flask 0.8版本,项目B需要使用Flask 0.9版本。我们只要组合pyenv和virtualenv这两个工具,就能够构造Python和第三方库的任意版本组合,拥有了很好的灵活性,也避免了项目之间的相互干扰。

virtualenv本身是一个独立的工具,用户可以不使用pyenv单独使用virtualenv。但是,如果你使用了pyenv,就需要安装pyenv-virtualenv插件而不是virtualenv软件来使用virtualenv的功能。

项目主页:https://github.com/yyuu/pyenv-virtualenv

安装

$ pip install virtualenv

或者,如果提示版本不匹配,可以使用–upgrade参数

$ pip install –upgrade virtualenv

使用virtualenv创建项目的虚拟环境
一个项目创建一个virtualenv的虚拟环境,在这个环境中,可以用pip安装项目所需的库,不会影响其他项目。切记一个项目一个虚拟环境,否则可能会发生莫名的错误。

1.首先创建项目目录

$ mkdir myproject
$ cd myproject

2.创建项目的虚拟环境

$ virtualenv –no-site-packages venv #会创建一个不带其他pip包的干净虚拟环境
Using base prefix ‘/root/.pyenv/versions/3.6.4’
New python executable in /root/myproject/venv/bin/python3.6
Also creating executable in /root/myproject/venv/bin/python
Please make sure you remove any previous custom paths from your /root/.pydistutils.cfg file.
Installing setuptools, pip, wheel…done.

3.切换到虚拟环境

$ source venv/bin/activate

(venv) python@ubuntu:/myproject$ # (venv)表示该项目处于虚拟环境中

验证

(venv) python@ubuntu:/myproject/blog$ python
Python 3.6.4 (default, Mar 29 2018, 10:33:37)
[GCC 5.4.0 20160609] on linux
Type “help”, “copyright”, “credits” or “license” for more information.

4. 切出虚拟环境

(venv) python@ubuntu:/myproject$ deactivate

使用pip下载库
使用pip下载,会从国外的网站下载,速度超慢,所以要切换pip到国内的镜像源,一般会用psm切换pip的源

1.安装一个软件psm

python@ubuntu:/myproject$ pip install psm
Looking in indexes: http://mirrors.aliyun.com/pypi/simple/
Collecting psm
Collecting docopt>=0.6.2 (from psm)
Installing collected packages: docopt, psm
Successfully installed docopt-0.6.2 psm-0.1.0

2.psm的使用
以下操作需要在虚拟环境外进行,选择好镜像源后在进入虚拟环境

1.查看列出pip的镜像源

python@ubuntu:/myproject$ psm ls

pypi https://pypi.python.org/simple/
douban http://pypi.douban.com/simple/
aliyun http://mirrors.aliyun.com/pypi/simple/

查看当前的镜像源

python@ubuntu:/myproject$ psm show

Current source is aliyun

2.选择指定的镜像源

python@ubuntu:/myproject$ psm use douban

Source is changed to douban.

3 使用pip下载库

(venv) python@ubuntu:/myproject$ pip install pymysql