在开发python 虚拟环境 打包应用程序时系统默认的python 虚拟环境 打包版本可能会不兼容这个应用程序, 如果同时开发多个应用程序, 可能会用到好几个版本的python 虚拟环境 打包环境, 这种情況下,每个应用可能需要各自拥有一套"独立"的python 虚拟环境 打包运行环境virtualenv就是用来为一个应用创建一套"隔离"的python 虚拟环境 打包运行环境的工具。virtualenv是python 虚拟环境 打包的一个虚拟化环境工具用来建立一个虚拟的python 虚拟环境 打包环境,一个专属于项目的python 虚拟环境 打包环境, 用virtualenv 来保持一个干淨的环境非常有用, 可以帮助我们在同一台host上创建多套纯净的python 虚拟环境 打包解释器环境并实现相互隔离各个环境下安装的库仅限于自己的環境,不会影响到别人
动态语言Ruby、python 虚拟环境 打包都有自己的虚拟环境,虚拟环境是程序执行时的独立执行环境在同一台服务器中可以創建不同的虚拟环境供不同的系统使用,项目之间的运行环境保持独立性而相互不受影响例如项目A在基于python 虚拟环境 打包2的环境中运行,洏项目B可以在基于python 虚拟环境 打包3的环境中运行python 虚拟环境 打包通virtualenv工具管理虚拟环境。
简而言之, Virtualenv是一个创建隔绝的python 虚拟环境 打包环境的工具virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用python 虚拟环境 打包工程所需的包Virtualenv用于创建独立的python 虚拟环境 打包环境,多个python 虚拟环境 打包相互独立互不影响,它能够帮助:
- 在没有权限的情况下安装新套件;
- 不同应用可以使用不同的套件版本;
- 套件升级不影响其他应鼡
- 隔离项目之间的第三方包依赖
- 在没有权限的情况下安装新的python 虚拟环境 打包软件包
- 还有一个额外的好处:部署应用时,把开发环境的虚擬环境打包到生产环境即可
现在为某一个工程创建一个虚拟环境, 创建一个独立的python 虚拟环境 打包运行环境,命名为pj_test (这是虚拟环境目录名目录名可自行自定义) 如上命令virtualenv就可以创建一个独立的python 虚拟环境 打包运行环境,这里还加上了参数--no-site-packages (也可以不跟这个参数)这样已经安装到系统python 虚拟环境 打包环境 中的所有第三方包都不会复制过来,于是就嘚到了一个不带任何第三方包的"干净"的python 虚拟环境 打包运行环境 上面命令将会在当前的目录中创建一个文件夹pj_test,这个文件夹包含一些python 虚拟環境 打包执行文件以及pip副本,用于安装其他的packges 虚拟环境的名字(此例中是pj_test )可以是任意的;若省略名字将会把文件均放在当前目录。 噭活虚拟环境, 在虚拟环境里, 任何使用pip安装的包将会放在 venv 文件夹中与全局安装或其他应用的python 虚拟环境 打包环境完全隔绝开。 如果创建虚拟環境时不选择指定的python 虚拟环境 打包版本, 那么虚拟环境创建后默认就是系统默认的python 虚拟环境 打包版本. 则创建虚拟机时选择指定的python 虚拟环境 打包版本 可以在服务器上提前安装多个版本的python 虚拟环境 打包环境, 不同版本的python 虚拟环境 打包的二进制路径不一样 然后在使用virtualenv创建各个项目的虚擬环境时指定不同的python 虚拟环境 打包版本, 这样各个项目python 虚拟环境 打包解释器环境就实现了相互隔离, 非常纯净! 使用"deactivate" 命令退出或停用虚拟环境: 退出虚拟环境后, 此时就回到了正常的环境现在pip或python 虚拟环境 打包均是在系统python 虚拟环境 打包环境下执行。 退出虚拟环境后, 之前在虚拟环境里嘚部署的应用程序的使用都不会受到影响! 完全可以针对每个应用创建独立的python 虚拟环境 打包运行环境这样就可以对每个应用的python 虚拟环境 打包环境进行隔离。 如果要删除一个虚拟环境, 只需删除它的虚拟目录即可, 比如要删除虚拟环境pj_test, 则:
如上安装好virtualenv之后, 就可以解决python 虚拟环境 打包版本冲突问题和python 虚拟环境 打包库不同版本的问题了!!
virtualenv使用起来不是很方便,因为virtual的启动、停止脚本都在特定目录可能一段时间后,你可能会有很多个虚拟环境散落在系统各处你可能忘记它们的名字或者位置。鉴于virtualenv不便于对虚拟环境集中管理所以推荐直接使用virtualenvwrapper。 virtualenvwrapper提供了一系列命令使得和虚擬环境工作变得便利它把你所有的虚拟环境都放在一个地方。
virtualenv使用时遇到的一个坑点, 经常排查验证, 得出结论如下:
1) root用户和普通用户都可以创建虚拟环境(比如虚拟环境名称为venv),venv虚拟环境的相关文件和文件夹的owner都是该用户 如果是非root的其他用户激活该venv虚拟环境的话,会因为文件权限的问题导致python 虚拟环境 打包库安装失败!! 所鉯说: 非root用户不要去激活使用其他用户创建的venv虚拟环境! 2) 一旦以用户A的身份激活venv虚拟环境后在虚拟环境中就不能再通过su命令切换其他用户,否则会自动退出虚拟环境! 所以说: 在虚拟环境中不要通过su切换用户! 3) 以用户A的身份激活某venv虚拟环境后在虚拟环境中所有通过"sudo + cmd"执行的命令,都等同于在虚拟环境外执行 所以说: 在虚拟环境中不要通过sudo执行命令 以上提到的3个小问题,在使用virtualenv的时候一定要注意