引子
这是我进入这家公司的第三天,作为一个刚进入社会不到一年,之前在研究java,刚开始学习python的菜鸟,我准备开始记录自己的学习过程。那么这个地方非csdn莫属了,下面简单记录下现阶段我对虚拟环境的看法以及对命令做下笔记,如果有说错的还欢迎各位大佬指正。
python虚拟环境
首先,python虚拟环境是一个独立于系统本体之外的环境,个人它主要作用类似于java项目中的pom.xml。java中可以通过配置pom.xml来让maven加载相应的jar包,在python里面则是直接开辟出一个新空间,避免不同版本的包相互影响。
我在了解到这个东西后就有一个疑问,新开辟出的虚拟空间是在哪存储的呢,本机pip下载过的包还需要重新下载么。目前来看好像是的,他会在当前目录下面新创建一个文件夹,所以我之前猜测他会重复占用磁盘空间,现在看来应该是没错了。那么我个人认为,这种机制是不如java中maven来管理依赖来的方便的,也许是有什么底层原理我还不清楚吧。
在摸索的过程中,我遇到了一个坑,因为我学习的是python3,但是很多博客都是针对2版本的,所以前期我在学习的时候有时候会两种虚拟环境混着用,弄得我一头雾水深觉玩不转。下面总结下这两天对2版本和3版本虚拟环境的认知。
两者区别
所使用包
首先,在python2中,虚拟环境是通过下载virtualenv和virtualenvwrapper两个包来实现的,python3则是在上述两者之外标准库中自带了venv。
命令区别
首先,创建一个新目录并进入,例如在用户目录下创建:
mkdir ~/envs && cd ~/envs
python2下
virtualenv
#创建虚拟环境:
$ virtualenv envname
#进入虚拟环境:
$ source envname/bin/activate
#退出虚拟环境:
deactivate
#删除虚拟环境:
rmvirtualenv envname
其中要注意的是
在进入虚拟环境后,命令行前会出现一个(envname)格式的字符串。
删除虚拟环境需要在退出虚拟环境后。
virtualenvwrapper
virtualenvwrapper需要进行环境配置,配置好workon_home后,之后通过他新建的虚拟环境都会放在该目录下。
#查看 virtualenvwrapper.sh 路径:
$ which virtualenvwrapper.sh
#配置环境变量: bash为~/.bashrc ,zsh为~/.zshrc ,也有配置~/.bash_profile文件的(本人采用方式)
export WORKON_HOME=$HOME/.virtualenvs
source virtualenvwrapper.sh的所在位置
环境配置好后,就可以使用各种常用命令来操作虚拟空间了。
#创建虚拟环境:
$ mkvirtualenv envname
#删除虚拟环境:
rmvirtual envname
#切换虚拟环境:
workon envname
#退出虚拟环境:
deactivate
#虚拟环境列表:
lsvirtualenv -b
python3下
python3中上述两者的常用指令基本没有变化,不过在install包的时候需要把pip换成pip3。
进阶:可以使用 mkvirtualenv -p pythonx envname 来创建虚拟环境(pythonx,x指版本号),这样创建可以通过workon+空格+tab(双击)来查看全部虚拟环境。
venv
python3.3版本推出,3.5版本成为虚拟环境推荐工具,为python3环境下虚拟环境首选。
#创建虚拟环境:
$ python3 -m venv envname
#进入虚拟空间:
$ source envname/bin/activate
#退出虚拟空间
$ deactivate
#删除虚拟环境:
$ rm -rf envname
又一个有疑点的地方就是,根据python3.6的说明文档,$ python3 -m venv envname这种脚本语法应该已经被弃用了。
但是我自己尝试的时候该语句还是可以使用的。
此外,在创建一个新的虚拟环境时,使用venv还可以指定要创建的python版本,采用如下语法:
python3.x -m venv envname
x代表小版本版本号,要确保该版本在你本机已经存在。
在磁盘中位置
virtualenv和venv都是在什么位置创建,文件就在什么位置;virtualenvwrapper则是会在WORKON_PATH指定的目录下创建文件。