python3 venv 虚拟环境使用方法

Python014

python3 venv 虚拟环境使用方法,第1张

python3默认安装了venv虚拟环境,所以直接使用即可

1.创建虚拟环境

在cmd命令行下执行

python -m venv 英文格式的虚拟环境目录名称

创建以后在对应的文件夹可以看到如下文件:

2.激活需要环境:

注意:只有激活之后,才算进入该虚拟环境,否则安装包时,依然是安装在全局环境之下

激活文件在Script文件夹下,如图所示。激活:activate.bat,退出:deactivate.bat

激活方式为:dos 界面进入pyton虚拟环境文件夹/Script,然后输入activate.bat (也可直接输入activate)即可激活环境,输入python 就进入python3.6环境了。

退出方式:输入deactivate.bat 或 deactivate

廖雪峰 virtualenv

Python 项目管理的利器:虚拟环境 venv 的使用

virtualenv 用于解决环境依赖而存在,通过 virtualenv 命令可以生成项目的独立依赖环境。

如果本地有多个版本的 Python ,需要对不同版本的 Python 单独安装 virtualenv 。

不清楚管理多个版本 Python 的,可以参考我的另一篇 Mac管理多版本Python

不久之前,重装了系统,发现 system 下的 Python (系统自带的版本)默认没有安装 pip

先安装下 pip ,终端下执行:

安装完毕如下:

安装virtualenv

出现这样的警告:

说是 Python 2.7 将于2020年1月1日结束它的生命。。。

看来 Python3 大势已定。

如果出现这样的错误:

应该是权限问题,根据提示加上 --user 试试。

安装成功:

查看当前 Python 版本: system ,已经安装的库:

新建一个文件夹test,test作为工程文件夹,在该文件夹中创建 venv 环境。

使用virtualenv命令,可以自动创建 venv 环境。

可以发现 virtualenv 已经安装,但是会提示无此命令:

可以再执行一次安装命令,终端会提示 virtualenv 的安装路径:

顺着这条路径

/Users/wuxiaoxin/Library/Python/2.7/lib/python/site-packages

可以找到 virtualenv 命令文件所在路径

/Users/wuxiaoxin/Library/Python/2.7/bin/virtualenv

这个命令 virtualenv 可以成功执行。至于为什么安装后不会自动设置环境变量,原因不详。

这时候有两种方式可以尝试下

重启终端,查看 PATH ,发现路径已经成功加到 PATH

测试成功:

这里其实不需要考虑 Python 版本问题, virtualenv 命令已经限定了 Python 版本。

如果你将 .bash_profile 中关于 virtualenv 的路径设置注释掉,重启终端,再执行 virtualenv ,会发现:

现在可以正常使用了:

加上了参数 --no-site-packages ,这样,已经安装到系统 Python 环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的 Python 运行环境。

实测不加这么个参数,直接执行 virtualenv venv 也是一样的效果呢。

如何知道?启动该虚拟环境,在该环境下 pip list 即可一目了然。

比如我的一个虚拟环境安装在这个路径下:

/Users/vampire/Desktop/test3/venv

那么可以这样启动虚拟环境:

如图,已经启动虚拟环境:

如下,test3中使用参数 --no-site-packages ,test4中不使用参数 --no-site-packages ,实测可以看出, --no-site-packages 参数加上和不加上,效果一样:

只有一种可能, --no-site-packages 是默认参数。

终端下执行virtualenv可以看到:

那么 --system-site-packages 就是它的对立参数了,测试下:

可以看到,安装在系统的 Python 环境中的库,也复制到这个虚拟环境中来了。

还需要注意的是这个参数:

可以看出,执行 virtualenv 命令生成的虚拟环境,默认是依据

/usr/bin/python 目录下的 Python 环境。其实也就是当前安装 virtualenv 所属的 Python 的版本。

当前电脑下有两个 Python 环境:

如果这样执行命令,会怎样?

如果是这样限制的话,需要创建源自 python3.7.4 版本的依赖环境,直接使用 pyenv 进行切换即可, virtualenv 不需要带这个参数 --python 了。

假设一个新的 venv 虚拟环境所在的目录如下:

/Users/vampire/Desktop/test/venv

venv 目录中包含如下文件夹:

退出虚拟环境的命令:

终端下先进入该venv环境,再执行 pip install 安装。

一般我们使用 virtualenv 的目的是为了让一个工程拥有独立的依赖环境。

我们会把 virtualenv 生成的环境 venv 放置在工程路径下。

如果我们移动了这个工程的路径, venv 路径也会随之改变,因此注意修改这个命令文件

activate ,打开这个文件,你会发现其实就是 bash shell 脚本,该命令的路径也固定写在其中:

操作系统:ubuntu16.04

举个例子,tensorflow(tf)是一个十分流行的python机器学习库,你现在手里有两个tf项目,其中项目A需要使用 python2.7 + f1.2 ,项目B需要使用 python2.7 + tf1.6 .这两个项目你得同时进行,怎么办?

愚蠢的办法是需要运行项目A时,将python2.7中的tf1.6卸载掉,安装tf1.2;需要运行项目B时,将python2.7中的tf1.2卸载掉,安装tf1.6。如果是单个模块还好,但是tf的不同版本又依赖于python中的其他已安装模块,而且tf1.2和tf1.6对依赖模块有不同的版本要求,那么转换一次得卸载安装好几个模块,是不是很爆炸?

课题组里几个同门共用一台服务器,每个人拥有一个系统账户,其中只有一个人拥有root权限,里面每个人都需要使用python跑程序,而且每个人对python版本以及python模块的版本都有不同需求,很多人又没有root权限,如何解决?

使用python的虚拟环境可以轻松解决上面的问题!

python虚拟环境是一个隔离/独立的python开发环境,和系统python环境可以完全隔离,互不相关,相当于多了一个python开发环境。而且你在python虚拟环境中的开发过程和使用系统python一模一样,你可以在你创建的python虚拟环境中使用pip工具安装任何你需要的模块,该模块和系统python环境完全不相关。虚拟环境的这个特点就能解决上面的问题了。

python有两个模块可以用于创建和管理python虚拟环境:

其中,venv模块在python3.3以上的版本可以使用,而virtualenv在python2.7+和python3.3+都可以使用。

默认的系统python中是没有安装以上两个工具的,需要使用以下命令安装:

安装好之后,就可以使用这两个工具安装python虚拟环境了。

我的系统python版本有python2.7和python3.5,虚拟环境的版本只能是系统中已有的python版本。使用virtualenv安装虚拟环境的命令如下:

什么参数都不指定的话,它会使用 /usr/bin/python 路径下的python解释器版本,即python2.7。因此会默认安装python2.7虚拟环境, /home/yan/env 表示虚拟环境的安装路径。

如果你要安装的是python3.5的虚拟环境,可以这样:

一般情况下,上面两条命令就够了,这样安装得到的python虚拟环境和系统python环境是完全隔离的。

更多的命令选项可以在命令行中直接输入 virtualenv 命令获取。

venv只有python3可以使用,因此只能创建python3的虚拟环境,创建命令如下:

其中, python3 -m venv 是死命令,最后的安装路径自己指定。

注意: 以上两种安装方式在安装虚拟环境的同时也自动安装了pip工具。

安装好虚拟环境之后,每次使用该虚拟环境前需要使用 source 命令 激活 它。假设前面我在 /home/yan/env3/ 目录下安装了python3.5的虚拟环境,现在我使用以下命令激活它:

激活之后,在命令行提示符前面会有 (env3) 的提示,表示当前你处的python虚拟环境,比如我电脑的情况:

现在你可以在激活环境中干任何事情,比如使用pip命令在你新的python虚拟环境中安装模块:

或者执行python脚本。

使用完该虚拟环境之后,你需要在命令行输入 deactivate 命令来 退出 该虚拟环境:

之后就回到了正常的系统python环境中。

由于你创建该虚拟环境的目的是为了跑某个项目的程序,现在该项目做完了,不需要该虚拟环境了,你可以把该虚拟环境直接删除,如何删?

直接将创建虚拟环境时生成的文件夹删掉,就这么简单。比如我要把我刚才创建的env3虚拟环境删除:

在删除虚拟环境前记得一定得先退出该虚拟环境。

python虚拟环境的好处是:每个虚拟环境之间,以及虚拟环境和系统环境之间是完全隔离的,不同虚拟环境中,你可以安装不同版本的模块,就仿佛你可以同时拥有N多个不同的python开发环境。

唯一麻烦的一点是:每次进入某个虚拟环境之前,都要使用 source 命令激活。每次使用完,都要使用 deactivate 命令退出。