pyenv安装python虚拟环境

news2024/9/24 5:51:23

文章目录

  • `pyenv`介绍
  • 准备工作
  • 安装`pyenv`
  • 设置虚拟环境

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

执行完成之后有如下输出
在这里插入图片描述
这里就提示我们设置环境变量了

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么关闭win10自动更新?我们可以这么做!

Win10自动更新可以使系统保持最新状态&#xff0c;但也可能导致一些问题&#xff0c;例如占用大量网络流量&#xff0c;导致系统速度减慢等。如果你希望关闭win10自动更新&#xff0c;不要电脑自动更新&#xff0c;我们可以跟着这篇文章这么做&#xff01; 操作环境&#xff1a…

测试行业干了5年,从只会点点点到了现在的测试开发,总算是证明了自己

测试不止是点点点 我感觉我是一个比较有发言权的人吧&#xff0c;我在测试行业摸爬滚打5年&#xff0c;以前经常听到开发对我说&#xff0c;天天的点点点有意思没&#xff1f; 和IT圈外的同学、朋友聊起自己的工作&#xff0c;往往一说自己是测试&#xff0c;无形中也会被大家…

Jmeter 连接 JDBC 报错Communications link failure解决办法(云服务器搭建了LNMP环境必看)

换jar包、加?useSSLfalse&#xff0c;3306加防火墙&#xff0c;都不能解决我的问题。最终我发现是我的LNMP环境导致 错误提示 Response message:java.sql.SQLException: Cannot create PoolableConnectionFactory (Communications link failureThe last packet sent successf…

【跨尺度学习:迭代残差:超分:泛锐化】

Pansharpening via Super-Resolution Iterative Residual Network With a Cross-Scale Learning Strategy &#xff08;基于跨尺度学习策略的超分辨率迭代残差网络泛锐化&#xff09; 全色锐化是利用高空间分辨率全色&#xff08;HR PAN&#xff09;图像恢复低空间分辨率多光…

Vue-Router 路由管理器

文章目录知识点前端路由的概念及作用Vue-Router 的安装Vue-Router 的基本使用知识点 前端路由的概念及作用Vue-Router 的安装Vue-Router 的基本使用 前端路由的概念及作用 需要大家注意的是&#xff0c;这里的路由可不是指我们日常生活中的路由器 &#x1f602; &#xff0c;…

Allegro如何打开或者关闭DFA规则设置操作指导

Allegro如何打开或者关闭DFA规则设置操作指导 在用Allegro做PCB布局的时候,器件与器件之间的DFA规则可以避免器件出现装配问题。如下图 当DFA规则设置好之后,如何打开或者关闭规则,具体操作如下 点击Setup点击Constraints

华为OD机试题,用 Java 解【相同数字的积木游戏 1】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

2023年“网络安全”赛项浙江省金华市选拔赛 任务书

2023年“网络安全”赛项浙江省金华市选拔赛 任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 任务二 Linux操作系统渗透测试 任务三 网页渗透 任务四 Linux系统…

硬件工程师——门控开关的设计

假设自己是一个工程师&#xff0c;那么我们怎么介绍自己呢&#xff1f; 我们首先需要可以自己独立设计项目&#xff0c;需要每一个工程师在开始阶段可以独立做项目&#xff0c;从而提高薪水 那么我们怎么提高做项目的能力呢&#xff1f; 通过项目来积累经验&#xff0c;在短…

百亿数据,毫秒级返回查询优化

近年来公司业务迅猛发展&#xff0c;数据量爆炸式增长&#xff0c;随之而来的的是海量数据查询等带来的挑战&#xff0c;我们需要数据量在十亿&#xff0c;甚至百亿级别的规模时依然能以秒级甚至毫秒级的速度返回&#xff0c;这样的话显然离不开搜索引擎的帮助&#xff0c;在搜…

OpenHarmony的未来和如何做好一个开源社区

今天要分享的文章&#xff0c;可能更多只是作为一种观点。主要包括2个内容。OpenHarmony的未来和如何做好一个开源社区&#xff0c;好的&#xff0c;接下来开始今天的内容。 你对OpenHarmony的未来如何看待&#xff1f; OpenHarmony的未来看起来非常光明&#xff0c;因为它具…

把 ChatGPT 加入 Flutter 开发,会有怎样的体验?

前言 ChatGPT 最近一直都处于技术圈的讨论焦点。它除了可作为普通用户的日常 AI 助手&#xff0c;还可以帮助开发者加速开发进度。声网社区的一位开发者"小猿"就基于 ChatGPT 做了一场实验。仅 40 分钟就实现了一个互动直播 Demo。他是怎么做的呢&#xff1f;他将整个…

如何管理好仓库/库房?

仓库管理是企业管理中不可缺少的一部分&#xff0c;事关企业能否正常运行的关键之一&#xff0c;古人有云&#xff1a;“三军未动粮草先行”&#xff0c;一个企业仓库管理做不好&#xff0c;他的生产管理肯定也是做不好的&#xff0c;不是说生产管理人员的管理能力不具备&#…

跨设备文件传输工具横评

文章目录对比QQ微信SnapDropLocalSendIntelUnisonLANDropTailscaleAirDroidSendAnywhere参考文献对比 传输速度测试条件大致相同&#xff0c;文件大小约为 100 MB 工具优点缺点传输速度备注QQ支持断点续传不要求同一局域网需要安装1.81 MB/s微信方便需要安装不支持大文件传完还…

ESP32设备驱动-ML8511紫外线传感器驱动

ML8511紫外线传感器驱动 1、ML8511介绍 ML8511 是一款紫外线传感器,适用于室内或室外获取紫外线强度。 ML8511 配备了一个内部放大器,可根据紫外线强度将光电流转换为电压。 这种独特的功能提供了与 ADC 等外部电路的简单接口。 在掉电模式下,典型的待机电流为 0.1 μ \mu…

认识 ECharts

文章目录前言知识点什么是 ECharts获取 ECharts 的方式从 CDN 获取ECharts 初体验前言 ECharts 是一个使用 JavaScript 实现的开源可视化库。它可以在 PC 端和移动设备上运行&#xff0c;目前兼容的浏览器有 IE8/9/10/11&#xff0c;Chrome&#xff0c;Firefox&#xff0c;Safa…

数组(三)-- LeetCode[370][1109][1094] 区间加法

1 区间加法 1.1 题目描述 1.2 求解思路 常规的思路很容易&#xff0c;给区间 nums[i: j] 加上 val&#xff0c;那就⼀个 for 循环给它们都加上呗&#xff0c;但这种思路的时间复杂度是 O(N)O(N)O(N)&#xff0c;由于这个场景下对 nums 的修改⾮常频繁&#xff0c;所以效率会很…

【Redis】常见命令介绍(二)

&#x1f697;Redis学习第二站~ &#x1f6a9;起始站&#xff1a;【Redis】概述&环境搭建(一) &#x1f6a9;本文已收录至专栏&#xff1a;数据库学习之旅 &#x1f44d;希望您能有所收获 一.概述 Redis是典型的key-value数据库&#xff0c;key一般是字符串&#xff0c;而…

电子科技大学软件工程期末复习笔记(八):软件维护

目录 前言 重点一览 软件维护的定义 四种类型的维护 软件维护的必要性 软件维护的成本 软件维护的困难性 可维护性的定义 决定软件可维护性的因素 软件维护的过程模型 维护费用估算 软件再工程 软件逆向工程 本章小结 前言 本复习笔记基于王玉林老师的课堂PPT与…

微信小程序开发【贰】

随手拍拍&#x1f481;‍♂️&#x1f4f7; 日期: 2023.01.28 地点: 台州 介绍: 吃完午饭后走在门前的步行道上&#xff0c;恰逢疫情高峰&#xff0c;整条步行道上只有我一个人&#xff0c;旁边的河面上时而掠过几只水鸟&#xff0c;试图打破这宁静的画面。墙上的涂鸦见证了疫情…