今天给大家聊聊关于Python环境隔离问题以及如何进行隔离。
不同的Python项目可能会用到不同的包,而不同的包或不同的python版本之间可能存在冲突。因此,为每个项目创建不同的虚拟环境非常有用。它可以保证一个项目只访问,它所在虚拟环境下安装的包,保持全局解释器的干净整洁,而且由于环境是独立的,因此不需要超户权限。
创建虚拟环境的方式一般有以下几种。
Virtualenv它是一个虚拟化,从电脑独立开辟出来的环境。通俗的来讲,虚拟环境就是借助虚拟机docker来把一部分内容独立出来,我们把这部分独立出来的东西称作“容器”,在这个容器中,我们可以只安装我们需要的依赖包,各个容器之间互相隔离,互不影响。譬如,本次学习需要用到Django,我们可以做一个Django的虚拟环境,里面只需要安装Django相关包就可以了,需要Scrapy库,就在开辟一个独立空间来学习Scrapy库相关就行了。
在实际项目开发中,我们通常会根据自己的需求去下载各种相应的框架库,如Scrapy、Beautiful Soup等,但是可能每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要我们根据需求不断的更新或卸载相应的库。直接怼我们的Python环境操作会让我们的开发环境和项目造成很多不必要的麻烦,管理也相当混乱。
如果不进行环境隔离全局安装就会导致包的冲突,依赖不同,出现问题。这个时候每个应用都需要一套「独立」的Python运行环境。而Virtualenv就是拿来为应用创建这一套「隔离」的Python运行环境。
安装virtualenv
pip install virtualenv
应用
sitin@test:/data/opt/test$ virtualenv venv
sitin@test:/data/opt/test$ source venv/bin/activate
(venv) sitin@test:/data/opt/test$ deactivate
sitin@test:/data/opt/test$
Virtualenvwrapper上面如果我们配置了vitualenvwrapper会更加方便切换进入虚拟环境,做到一键切换进入虚拟环境。不用每次都去到指定项目目录里面进行 source venv/bin/activate。
安装:
pip install virtualenvwrappermkdir ~/.virtualenvs
安装好了,你可以在你的.bashrc或者.zshrc配置virtualenvwrapper,配置如下。
export WORKON_HOME=$HOME/.virtualenvs # 指定目录export VIRTUALENVWRAPPER_PYTHON=/usr/bin/pythonexport VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' # 隔离系统site-packages export PIP_VIRTUALENV_BASE=$WORKON_HOMEexport PIP_RESPECT_VIRTUALENV=trueif [[ -r /usr/local/bin/virtualenvwrapper.sh ]]; then source /usr/local/bin/virtualenvwrapper.shelse echo "WARNING: Can't find virtualenvwrapper.sh"fi
配置好我们可以创建我们虚拟环境方式如下:
mkvirtualenv your_project #创建rmvitualenv your_project #删除workon # 列出项目workon your_project # 进去某个项目
通过上面这种方式,让我们更加方便切换进入虚拟环境了。
Pyenv说了vitualenv,vitualenvwrapper,进行Python 包的环境隔离,我们接下来聊聊我们终极利器pyenv -- Python版本的隔离。
我们都知道python存在2,3问题,我们经常需要维护老版本Python2项目,也要考虑新版本Python3的迁移。
说它是终极利器是它除了python版本问题,也可以结合virtualenv,vitualenvwrapper一起使用。
目前pyenv这个库在github上面有14K+的star,可见受到到了非常多的关注。
这里面我们直接进入Mac的安装环节:
brew install pyenv
brew install pyenv-virtualenv
brew install pyenv-virtualenvwrapper
把下面的配置加入到我们的shell环境中,比如我的就是.zshrc。
# ---pyenv---
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
配置好之后,我们可以看到pyenv的shell补全,如下图。
pyenv的具体使用方式:
pyenv install -l # 获取安装列表
pyenv install 3.7.1 # 安装python3.7
pyenv global 3.7.1 # 设置全局python
pyenv virtualenv test-pyenv-venv # 创建虚拟包
pyenv activate test-pyenv-venv # 进入虚拟环境
pyenv deactivate # 退出
...
这里面我就不过多演示使用了,看一个官方的配图。
干货分享
Ping 还可以这样玩
18 个 Python 高效编程技巧!
如何 SSH 登录到 Linux 服务器的指定目录?
Vim 利剑常磨,见血封喉
Python 的这几个技巧,简直屌爆了
把你的 Linux 打扮的像个黑客屏幕
Linux运维进阶:手把手教你用 Strace 诊断问题
如何使用 netstat 命令验证 DDOS 入侵?
聊聊 Linux 的匿名管道
Linux 性能调优:玩转 ulimit
神奇高效的 Linux 命令行
Linux Shell 生成随机数和随机字符串
学完 Python,为什么还找不到工作?现实很残酷!
Python 和 Java 的区别及薪资对比:Python 和 Java哪个好?
Linux cut 剪断你的千丝万缕
Linux 下 Shell 日期命令的玩法,你能玩转几种?
Linux下find与exec的联手干大事
为什么要用 lambda ??
Python 开发者节省时间的 10 个方法
Redis的N种妙用,不仅仅是缓存
#!/usr/bin/env python与#!/usr/bin/python的区别
好看!快收藏:非常完整的MySQL规范
Python时操作几个坏习惯,你中了吗?
Linux 命令行中点“·”的作用实践探索
Linux中神奇的叹号“!”命令——各类型用法总结
Linux进程列表里多了个奇怪的进程,如何定位可执行文件位置??
问运维攻城狮:RAID磁盘阵列是什么?一看就懂!
不知道这十项Linux常识,别说自己是运维工程师!
如何同时 ping 1000 个IP?一个小技巧节约N小时!
2019运维技能风向标
来聊聊 Shell 脚本中 " #!/bin/bash“和” #!/bin/sh"的区别
有干货,猛戳下面的据说点”好看“2019一定加薪!!