Python多环境扩展管理
Python发展至今,版本众多,在使用过程中经常遇到第三方库依赖的Python版本和系统Python版本不一致的情况。同时又因系统底层需调用当前版本Python,所以不能随意变更当前系统Python版本。如此情境下就会有Python多版本共存的情况。于是,Python多环境管理工具应运而生。Pyenv和Virtualenv均为Python管理工具,不同的是,Pyenv是对python的版本进行管理,实现不同版本之间的切换和使用;而Virtualenv则通过创建虚拟环境,实现与系统环境以及其他python环境的隔离,避免相互干扰。
1、Pyenv的部署和使用
Pyenv是一个简单的python版本管理工具,以前叫做Pythonbrew。它让你能够方便地切换全局python版本,安装多个不同的python版本,设置独立的某个文件夹或者工程目录特异的python版本,同时创建python虚拟环境(virtualenv's)。所有这些操作均可以在类Unix系统的机器上(Linux和OS X)不需要依赖python本身执行,而且它工作在用户层,不需要任何sudo操作。
(1)部署
pyenv作为python的版本管理工具,通过改变shell的环境变量来切换不同的python版本,以达到多版本共存的目的。该工具不支持windows系统。具体工作原理如下:
接下来开始部署pyenv
# git clone https://github.com/pyenv/pyenv.git ~/.pyenv
# echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
# echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
# echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
# exec "$SHELL"
若只有系统一个python版本,执行pyenv versions会显示:
若系统里有多个python版本,执行pyenv versions会显示:
实践操作:
system显示的是2.7.5版本,要再切回来的话执行:pyenv global system 而不是pyenv global 2.7.5
2、Virtualenv的部署与使用
virtual是底层基于python开发的python环境隔离工具,其通过虚拟目录的方式来实现多环境并存。工作原理如下:在你所需要的地方创建工作目录,该目录类似系统安装的python目录,保留完整的python环境、解释器、标准库和第三方库等,当我们需要的时候,切换环境变量激活即可使用。
安装pip:
yum -y install python-pip python-devel
实践操作:
[root@localhost ~]# virtualenv /data/datafile/software/virtualpy # 创建虚拟工作目录
New python executable in /data/datafile/software/virtualpy/bin/python2
Also creating executable in /data/datafile/software/virtualpy/bin/python
Installing setuptools, pip, wheel...done.
[root@localhost ~]# source /data/datafile/software/virtualpy/bin/activate # 切换并激活虚拟工作环境
(virtualpy) [root@localhost ~]# deactivate # 退出虚拟工作目录
[root@localhost ~]#
最新文章
- css实现垂直居中的方法
- STL整理
- arm-linux-objdump
- Read / Write Excel file in Java using Apache POI
- 2、分布式文件系统---HDFS
- JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
- Android获取设备採用的时间制式(12小时制式或24小时制式)
- <;3>;Centos系统完整安装python流程
- sql server 关于日期格式转换查询备注
- Apache Tomcat 7 Configuration BIO NIO AIO APR ThreadPool
- redis的list取出数据方式速度测试
- VUE iview date-picker取时间范围...
- group by 用法解析
- 序列化还是JSON存储对象?
- Android SDK manager里面什么是必须下载的?
- XAMPP与本地Mysql冲突解决方法
- C# 自己动手实现Spy++(一)
- 转:sqlserver 临时表、表变量、CTE的比较
- Html Agility Pack - API
- eclipse使用maven打包时去掉测试类