pyenv虚拟环境管理python多版本和软件库的方法


Posted in Python onDecember 26, 2019

可能大家在日常工作中会遇到这么个问题,现在基本的linux系统都是自带老版本的python2.7.x版本,我又不想用老版本,但直接升级可能会出问题,或是依赖老版本的程序就运行不了,有没办法能安装3.x新版本的?

答案是有的,请使用pyenv,可以支持管理多个python版本,任意使用。

其实官方于2019年底将不再提供支持了,截至倒计时还有6天:https://pythonclock.org/

那有人可能会问,那在一个系统下,不同的库依赖不同的python版本,就比如说python2.x版本需要django1.0版本,python3.x版本需要django2.0版本,那这样系统只能装一个django版本,这又怎么解决呢?

答案是有的,pyenv自带的插件pyenv-virtualenv,创建两个虚拟环境,互相独立,各不影响。

实验环境:

linux系统:CentOS 7 x64

pyenv常用命令:

[python@localhost ~]$ pyenv install -l //查看可用的安装版本
[python@localhost ~]$ pyenv install 3.6.9 //在线安装python3.6.9版本
[python@localhost ~]$ pyenv virtualenv 3.6.9 py3 //创建虚拟环境,3.6.9为python版本,py3为别名
[python@localhost test]$ pyenv local 3.6.9 //进入目录,设置或显示本地python版本(本目录有效)
[python@localhost test]$ pyenv global system //设置或显示全局python版本
[python@localhost test]$ pyenv version //显示当前python版本
[python@localhost test]$ pyenv versions //显示可用的所有python版本
[python@localhost test]$ pyenv update //更新pyenv
[python@localhost ~]$ pyenv virtualenvs //查看所有虚拟环境
[python@localhost ~]$ rm -fr ~/.pyenv //卸载pyenv
[python@localhost ~]$ pyenv virtualenv-delete py3 //删除虚拟环境

创建用户名及密码:
说明:不要用root账户,养成习惯

[root@localhost ~]$ useradd python
[root@localhost ~]$ su - python
[python@localhost ~]$ echo python | passwd python --stdin

安装依赖组件:

[python@localhost ~]$ yum install gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel
zlib-devel bzip2-devel git curl

安装pyenv:

#方法1:在线安装
[python@localhost ~]$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

#方法2:为避免受制墙限制而无法在线安装,复制如下链接的shell脚本到本地pyenv.sh:
https://github.com/pyenv/pyenv-installer/blob/master/bin/pyenv-installer

[python@localhost ~]$ touch pyenv.sh //新建文件,把上面的shell代码贴进来,保存
[python@localhost ~]$ bash pyenv.sh

安装完成后,按照提示,设置系统环境变量,在 '.bashrc' 增加如下代码:

[python@localhost ~]$ vim .bashrc 

#最下面,新增如下脚本
export PATH="/home/python/.pyenv/bin:$PATH" 
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

重启shell,使路径更改生效:

[python@localhost ~]$ exec $SHELL

提前在官方下载python安装包并通过winSCP上传到centos目录下:

  • Python-3.6.9.tar.xz
  • Python-3.8.0.tar.xz
#在.pyenv目录下创建cache目录,已通过winSCP上传好
[python@localhost ~]$ cd .pyenv
[python@localhost .pyenv]$ mkdir cache
[python@localhost cache]$ ll
总用量 34224
-rw-rw-r--. 1 python python 17212164 12月 15 01:56 Python-3.6.9.tar.xz
-rw-rw-r--. 1 python python 17829824 12月 15 01:57 Python-3.8.0.tar.xz

备注:如果直接通过'pyenv install 3.6.9 '去安装,会很慢,因为要连接到国外。

开始安装

[python@localhost pkg]$ pyenv install 3.6.9 -vvv //-v 可以看到安装详细的过程
[python@localhost ~]$ pyenv install 3.8.0 -vvv //-v 可以看到安装详细的过程

创建项目文件夹:

#举个栗子:
 #1.Python目录,使用python3.6.9版本
 #2.My_django目录,使用python3.6.9版本
 #3.test目录,使用python3.8.0版本

[python@localhost Python]$ mkdir -pv network/Python/
[python@localhost Python]$ mkdir -pv network/My_django/
[python@localhost Python]$ mkdir -pv network/test/

创建虚拟环境,效果如下:

#Python目录:
[python@localhost ~]$ pyenv virtualenv 3.6.9 py3 //设置别名py3
[python@localhost Python]$ pyenv local py3
(py3) [python@localhost Python]$ pyenv version
py3 (set by /home/python/network/Python/.python-version)
(py3) [python@localhost Python]$  //左边看到(py3)说明已在虚拟环境中,是独立的

#My_django目录:
[python@localhost ~]$ pyenv virtualenv 3.6.9 py369 //设置别名py369
[python@localhost My_django]$ pyenv local py369
(py369) [python@localhost My_django]$ pyenv version
py369 (set by /home/python/network/My_django/.python-version)
(py369) [python@localhost My_django]$

#test目录:
[python@localhost ~]$ pyenv virtualenv 3.8.0 py380 //设置别名py380
[python@localhost test]$ pyenv local py380
(py380) [python@localhost test]$ pyenv version
py380 (set by /home/python/network/test/.python-version)
(py380) [python@localhost test]$

#验证效果
 #在My_django虚拟环境下安装pip install redis
 #其他虚拟目录没有redis
#My_django虚拟环境
(py369) [python@localhost My_django]$ pip list
Package  Version
---------- -------
pip    19.3.1 
redis   3.3.11 
setuptools 40.6.2
#Python虚拟环境
[python@localhost Python]$ pip list
Package  Version
---------- -------
pip    19.2.3 
setuptools 41.2.0

说明:你可以在每个项目安装所需要的软件版本,都是独立的,互不影响。

pyenv官方链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
如何解决django配置settings时遇到Could not import settings 'conf.local'
Nov 18 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
Python基于pycrypto实现的AES加密和解密算法示例
Apr 10 Python
django的登录注册系统的示例代码
May 14 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
python3.7.0的安装步骤
Aug 27 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
python读写csv文件实例代码
Jul 05 Python
win10下python2和python3共存问题解决方法
Dec 23 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
Django用户认证系统如何实现自定义
Nov 12 Python
python爬取微博评论的实例讲解
Jan 15 Python
Python嵌套函数,作用域与偏函数用法实例分析
Dec 26 #Python
python 串口读取+存储+输出处理实例
Dec 26 #Python
使用Python串口实时显示数据并绘图的例子
Dec 26 #Python
简单了解python字符串前面加r,u的含义
Dec 26 #Python
python关于调用函数外的变量实例
Dec 26 #Python
python3 实现调用串口功能
Dec 26 #Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 #Python
You might like
PHP脚本数据库功能详解(中)
2006/10/09 PHP
Banner程序
2006/10/09 PHP
PHP Smarty生成EXCEL文档的代码
2008/08/23 PHP
PHP 编写大型网站问题集
2010/05/07 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
jQuery load方法用法集锦
2011/12/06 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
JavaScript中Function详解
2015/02/27 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
JavaScript Base64 作为文件上传的实例代码解析
2017/02/14 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
python 录制系统声音的示例
2020/12/21 Python
英国优质家居用品网上品牌:URBANARA
2018/06/01 全球购物
机械设计制造专业个人求职信
2013/09/25 职场文书
求职简历中个人的自我评价
2013/12/25 职场文书
厨师长岗位职责
2014/03/02 职场文书
放飞梦想演讲稿600字
2014/08/26 职场文书
大学生赌博检讨书
2014/09/22 职场文书
党员公开承诺书2015
2015/01/21 职场文书
导游词之山海关
2019/12/10 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python
在项目中使用redis做缓存的一些思路
2021/09/14 Redis