pyenv安装python虚拟环境

简介: pyenv安装python虚拟环境

pyenv介绍

pyenv是一个forked自ruby社区的简单、低调、遵循UNIX哲学的Python环境管理工具, 它可以轻松切换全局解释器版本, 同时结合vitualenv插件可以方便的管理对应的包源。

为什么我们需要pyenv

Python解释器版本混乱, 2和3差别巨大, 而且细分版本也不尽相同, 难以选择和管理.

不同Linux发行版自带Python不同, 如ubuntu16自带2.7和3.5版本, 其中系统许多组件依赖于自带解释器, 一旦删除或者更改都可能会造成系统出问题.

不同的Python解释器软件包管理也是问题, 如pip和ipython等必备包组件, 而且在项目开发中如何保证不同的包环境互不干扰也是一个问题.

准备工作

本次我在CentOS 7.9下安装pyenv,在安装之前需要先进行一些准备工作

yum -y install git curl wget 
yum -y install gcc make patch gdbm-devel openssl-devel      # Python编译需要的工具包
yum -y install sqlite-devel readline-devel zlib-devel bzip2-devel

pyenv是源代码编译安装Python解释器,所以一定要安装gcc等依赖

如果想更加安全的话可以新建一个普通用户并切换过去再进行后续操作

useradd -r python -m 
echo '1' |passwd --stdin python
su - python

安装pyenv

pyenv官网

在GitHub项目地址有多种操作系统安装方式(包括MacOS,Windows等),本次我使用的是CentOS来进行安装

curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
# 或
curl -L https://github.com/pyenv/pyenv-installer/blob/master/bin/pyenv-installer

脚本本质上是去github进行克隆,如果这一步都失败了,那么其实是安装不上的,因此可以将这个脚本github修改为gitee,当然如果你可以上GitHub那可以直接忽略这一步

当你无法访问GitHub的话:

#!/usr/bin/env bash
set -e
[ -n "$PYENV_DEBUG" ] && set -x
if [ -z "$PYENV_ROOT" ]; then
  export PYENV_ROOT="${HOME}/.pyenv"
fi
colorize() {
  if [ -t 1 ]; then printf "\e[%sm%s\e[m" "$1" "$2"
  else echo -n "$2"
  fi
}
# Checks for `.pyenv` file, and suggests to remove it for installing
if [ -d "${PYENV_ROOT}" ]; then
  { echo
    colorize 1 "WARNING"
    echo ": Can not proceed with installation. Kindly remove the '${PYENV_ROOT}' directory first."
    echo
  } >&2
    exit 1
fi
failed_checkout() {
  echo "Failed to git clone $1"
  exit -1
}
checkout() {
  [ -d "$2" ] || git clone --depth 1 "$1" "$2" || failed_checkout "$1"
}
if ! command -v git 1>/dev/null 2>&1; then
  echo "pyenv: Git is not installed, can't continue." >&2
  exit 1
fi
if [ -n "${USE_GIT_URI}" ]; then
  GITHUB="git://github.com"
else
  GITHUB="https://github.com"
fi
GITHUB="https://gitee.com"
checkout "${GITHUB}/ibuki_fuuko/pyenv.git"            "${PYENV_ROOT}"
checkout "${GITHUB}/codeseth/pyenv-doctor.git"     "${PYENV_ROOT}/plugins/pyenv-doctor"
checkout "${GITHUB}/yuebanlaosiji/pyenv-installer.git"  "${PYENV_ROOT}/plugins/pyenv-installer"
checkout "${GITHUB}/codeseth/pyenv-update.git"     "${PYENV_ROOT}/plugins/pyenv-update"
checkout "${GITHUB}/unicode233/pyenv-virtualenv.git" "${PYENV_ROOT}/plugins/pyenv-virtualenv"
checkout "${GITHUB}/mouday/pyenv-which-ext.git"  "${PYENV_ROOT}/plugins/pyenv-which-ext"
if ! command -v pyenv 1>/dev/null; then
  { echo
    colorize 1 "WARNING"
    echo ": seems you still have not added 'pyenv' to the load path."
    echo
  } >&2
  { # Without args, `init` commands print installation help
    "${PYENV_ROOT}/bin/pyenv" init || true
    "${PYENV_ROOT}/bin/pyenv" virtualenv-init || true
  } >&2
fi

拷贝代码至文件pyenv_install.sh

bash pyenv_install.sh

执行完成之后有如下输出

cc04411ea1d84bc6b335d75ff58621bd.png这里就提示我们设置环境变量了

cat >> ~/.bashrc <<EOF
export PYENV_ROOT="\$HOME/.pyenv"     
export PATH="/home/python/.pyenv/bin:\$PATH"
eval "\$(pyenv init --path)"
eval "\$(pyenv init -)"
eval "\$(pyenv virtualenv-init -)"
EOF
# \是用来转义$的,如果是直接打开.bashrc进行修改的话需要去掉\
source ~/.bashrc

安装python多版本

pyenv install -l  
# 列出可安装的版本,会输出很多
# 等价于 pyenv install --list
pyenv install 3.6.9 -vvv  
# -vvv是打印详细信息,也可不加
pyenv install 3.7.7

安装的版本会在~/.pyenv/versions目录下。

对于比较大的版本文件,例如anaconda,可以先到官网下载,然后将文件放在~/.pyenv/cache目录下,再执行安装命令时,pyenv不会重复下载。

$ ls .pyenv/versions/
3.6.9  3.7.7

如果要卸载的话就是将install修改为uninstall

也可以直接打印已安装的版本

$ pyenv version   # 打印当前使用版本
$ pyenv versions  # 打印所有已安装版本,*星号表示当前版本

设置虚拟环境

由于不同项目,或使用不同Python版本,或使用同版本Python但使用不同版本库,很难将它们部署在一

起,所以,应该使用不同的虚拟环境隔离部署。

使用pyenv local 命令建立一个目录和一个Python版本或虚拟版本之间的关系,该目录的子孙目录默认

也继承这个版本。

设置一个python3.6.9的虚拟环境

[python@k82 ~]$ mkdir -p projects/test369     # 新建一个目录,以后在这个目录下的python环境为3.6.9
[python@k82 ~]$ cd projects/test369/
[python@k82 test369]$ pyenv virtualenv 3.6.9 py369  # 设置py369的python版本为python3.6.9
[python@k82 test369]$ pyenv local py369       # 设置当前目录的python本地版本为py369
(py369) [python@k82 test369]$ python -V
Python 3.6.9
(py369) [python@k82 test369]$ pyenv version
py369 (set by /home/python/projects/test369/.python-version)

同理设置一个python3.7.7的虚拟环境

[python@k82 ~]$ mkdir -p projects/test377
[python@k82 ~]$ cd projects/test377/
[python@k82 test377]$ pyenv virtualenv 3.7.7 py377
[python@k82 test377]$ pyenv local py377 
(py377) [python@k82 test377]$ python -V
Python 3.7.7
(py377) [python@k82 test377]$ pyenv version
py377 (set by /home/python/projects/test377/.python-version)

但是此时全局的python版本并未发生改变

[python@k82 ~]$ pwd
/home/python
[python@k82 ~]$ python -V 
Python 2.7.5
[python@k82 ~]$ pyenv version
system (set by /home/python/.pyenv/version)
[python@k82 ~]$ pyenv versions
* system (set by /home/python/.pyenv/version)
  3.6.9
  3.6.9/envs/py369
  3.7.7
  3.7.7/envs/py377
  py369
  py377


目录
相关文章
|
1月前
|
IDE 开发工具 索引
在Python中安装第三方库
在Python中安装第三方库
514 30
|
15天前
|
Ubuntu Shell Linux
pyenv 管理多个 Python 版本(1)
pyenv 管理多个 Python 版本(1)
142 86
pyenv 管理多个 Python 版本(1)
|
10天前
|
Shell Python
使用 pyenv 来管理多个 Python 版本(2)
使用 pyenv 来管理多个 Python 版本(2)
101 71
使用 pyenv 来管理多个 Python 版本(2)
|
8天前
|
Linux Python
Linux 安装python3.7.6
本教程介绍在Linux系统上安装Python 3.7.6的步骤。首先使用`yum`安装依赖环境,包括zlib、openssl等开发库。接着通过`wget`下载Python 3.7.6源码包并解压。创建目标文件夹`/usr/local/python3`后,进入解压目录执行配置、编译和安装命令。最后设置软链接,使`python3`和`pip3`命令生效。
|
1月前
|
存储 JSON 网络安全
使用 EFS 在 AWS Lambda 上安装 Python 依赖项
使用 aws lambda 时,开发人员面临的常见挑战之一是管理大型 python 依赖项。
31 1
|
1月前
|
Ubuntu Linux iOS开发
安装Python
安装 Python 是相对简单的过程,但需要根据不同的操作系统选择合适的方法。同时,合理使用虚拟环境可以更好地管理项目的依赖和环境,提高开发效率。希望这些步骤和注意事项能帮助你顺利安装 Python。
|
关系型数据库 MySQL 数据库
【100天精通python】Day32:使用python操作数据库_MySQL下载、安装、配置、使用实战
【100天精通python】Day32:使用python操作数据库_MySQL下载、安装、配置、使用实战
86 0
|
Python Windows
Python3+PyCharm环境的安装及配置
近期碰到有同学入门Python还不会安装并配置Python编程环境的,在这里做一期教程手把手教大家安装与配置使用(以 Python 3.9.9 以及 PyCharm 2021.3.1 为例)
707 0
Python3+PyCharm环境的安装及配置
|
4月前
|
Python Windows
Python安装第三方库太慢?配置好这个速度飞起
Python安装第三方库太慢?配置好这个速度飞起
|
4月前
|
Linux 测试技术 Python
Python笔记1 安装并配置Python
本文是作者关于Python复习笔记的系列文章第一篇,介绍了Python语言的特点、在不同操作系统上搭建Python环境的方法,包括下载编辑器和配置解释环境,并通过在编辑器中运行“Hello World!”程序来测试环境是否成功搭建。
43 0