Python语言特性:虚拟化

Virutalenv简介

Virtualenv是虚拟化python环境的工具,它不能实现完全的虚拟化,只允许虚拟化python的可执行程序和一系列库。

Virtualenv不能实现一个完整的独立运行环境,不能在生产环境中使用该工具,应用程序与外部数据库、Web服务器、文件交互,而virtualenv并不能虚拟化该外部工具。

一个主要的问题是,很多python库采用C语言实现,通过python调用C语言包,例如psycopg2是一个python处理PostgreSQL数据库的连接库,该连接库采用本机C语言编译器编译而来,如果采用virtualenv虚拟化则不会考虑这些C语言库。为了完全模拟生产环境,必须采用相同的机器架构、操作系统版本、各种依赖库,如果这样的话,必须采用docker来虚拟化。

Virtualenv方便的地方在于可以虚拟化不同的python版本、不同的python包,每个工程可以拥有不同的开发环境,如在生产环境中使用则必须保证相关的操作系统、编译器、机器架构等。

Python virtualenv的好处

独立的安装包:每个工程可以使用不同的安装包

独立的python环境:每个工程可以使用不同的python版本。

为什么你需要这些虚拟环境

很多原因可以解释这个问题,其中主要的原因为一个工程需要不同版本的python包,你选择安装或不安装,有以下的替代方案:

系统安装包统一安装;

使用pip单独安装

使用virtualenv

构造一个安装包(deb或者rmp)可能并不是一件容易的事情,如果你有一个python程序任务,完全没有必要来花费几周时间来通读构件库的文档,即使你愿意这样做,你的客户也不愿意。

在Linux后台程序中有大量的python程序,可以通过命令ps uaxf|grep python来查看。在我的Ubuntu系统中,甚至网络连接程序也是python脚本(wcid),这些脚本封装在系统包中。如果你的工程依赖于一些python库,此时又想升级到更高版本库,这样就会导致原有依赖库出现不兼容的问题,严重的情况可能会导致无法联网。

不过最简单的情况就是将依赖包安装在本地文件夹,改变查找这些依赖包的路径,这样就会替换系统默认包,这也就是virtualenv的原理。

使用不同版本的python

Virtualenv允许不同版本的python,当你构造一个python虚拟环境时,你可以创建一个单独python版本,所有依赖的库也在同一目录。

Virtualenv缺点

Virtualenv很方便,但是过于复杂,现在我已经很久没使用它了。

Virtualenv VS Virutalenvwrapper

Virtualenv很复杂,但有一些管理这些复杂工作的简单版本,这也就是virtualenvwrapper,该工具可以更好更方便地使用。

Virtualenvwrapper使用说明

安装virtualenvwrapper

Unbuntu安装命令

sudo pip install virtualenvwrapper(windows环境直接安装)

2. 创建一个virtualenv虚拟目录用于安装虚拟库

mkdir ~/.virtualenv

3. 在~/.bashrc中配置环境变量

export WORKON_HOME=$HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

其中virtualenvwrapper.sh的安装目录通过命令查看

which virtualenvwrapper.sh

使用virtualenvwrapper

Virtualenv提供了许多命令来交互虚拟环境,首先创建一个虚拟环境:

root@root-ubuntu:~/program/web/projects$mkvirtualenv test

New python executable in /home/root/.virtualenvs/test/bin/python

Installing setuptools, pip, wheel...done.

2. 切换到该虚拟环境进行安装依赖包

进入该虚拟环境后在命令行前面会出现一个环境名称

(test) root@root-ubuntu:~/program/web/projects$

3. 安装依赖库文件

(test) root@root-ubuntu:~/program/web/projects$pip install django

4. 查看当前环境包信息

(test) root@root-ubuntu:~/program/web/projects$pip freeze

Django==1.11.12

pytz==2018.4

5. 退出该虚拟环境

(test) root@root-ubuntu:~/program/web/projects$deactivate

6. 重新登录该环境

root@root-ubuntu:~/program/web/projects$workon test

(test)root@root-ubuntu:~/program/web/projects$

翻译原文:

http://www.simononsoftware.com/virtualenv-tutorial-part-2/

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180505G0FCI200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券