python 虚拟环境搭建

来源:互联网 发布:ios软件开发工程师招聘 编辑:程序博客网 时间:2024/05/20 07:19

参考:http://www.cnblogs.com/wilber2013/p/4774022.html

  1. virtualenv documentation: https://virtualenv.pypa.io/en/latest/

  2. virtualenvwrapper documentation: http://virtualenvwrapper.readthedocs.org/en/latest/

  3. http://docs.python-guide.org/en/latest/dev/virtualenvs/

  4. http://pythonguidecn.readthedocs.io/zh/latest/dev/virtualenvs.html

  5. virtualenv 中文文档地址 : http://virtualenv-chinese-docs.readthedocs.io/en/latest/#


前言


由于Python的版本众多,还有Python2和Python3的争论,因此有些软件包或第三方库就容易出现版本不兼容的问题。同时在python开发中,我们可能会遇到一种情况,就是当前的项目依赖的是某一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲突。

对于上面的问题,已经有很多现成的个工具可以解决。根据解决上面问题的方法,这些工具大概可以分为两类:

  • Python 版本环境切换工具
  • 特定Python版本虚拟环境切换工具

Python 版本环境切换工具

Python版本环境切换工具的作用就是让多个不同版本的Python可以在系统上共存。并且提供简单的命令来支持不同Python版本之间的切换。

工具

介绍

pyenv

目前最流行的 python版本环境切换工具,但是不支持Windows

pywin

Windows 上pyenv 的替代品,但是功能相对pyenv比较少

py.exe

Python 3.3 版本以后Windows系统自带的启动工具(Python Launcher for Windows),可以直接在命令行中使用

特定 Python 版本虚拟环境切换工具

简单的说,虚拟环境切换工具就是可以根据当前使用的Python版本环境来创建多个虚拟的Python环境。这些虚拟的环境之间相互独立,可以安装各个环境所需的Python包。

工具

介绍

virtualenv

目前最流行的 python 虚拟环境配置工具

virtualenvwrapper

使用shell开发,是对virtualenv的一个封装,简化了virtualenv命令的使用,并且进行了一些功能扩展

virtualenvwrapper-win

使用Windows batch shell开发的virtualenvwrapper

venv

Python 3.3 版本以后自带的虚拟环境工具,仅支持 python 3.3 和以后版本


pywin


现在看看Windows上Python版本环境切换工具 pywin

对于pywin的工作原理就可以简单的理解为,通过pywin提供的命令可以简单的以设置环境变量的方式决定优先使用特定版本的Python。

安装

对于pywin,我们可以使用源码、easy_install和pip三种方式进行安装,关于这些安装方式的关系,请参考前一篇文章

下面通过pip来安装pywin:


常用命令

安装完成之后就看看pywin的常用命令。

"pyassoc"和"pywin genlaunchers"是两个配置相关的命令。我本机安装了2.7和3.4两个版本的Python,默认环境变量指向2.7,配置完成后就会就会在2.7目录中生成本机安装所

有Python版本的launcher。


配置完成之后,就可以通过pywin进行不同版本之间的Python切换了。

1. 打开环境变量PAHT中第一个Python版本环境

C:\Users\tianw1>pywinPython 2.7.7 (default, Jun  1 2014, 14:17:13) [MSC v.1500 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> exit()

2. 打开Python 3.4

C:\Users\tianw1>pywin -3.4Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> exit()

3. 将Python 3.4设置为默认的Python执行环境,根据输出也可以看出,其实就是将Python 3.4目录放在环境变量PATH的前面位置

C:\Users\tianw1>pywin setdefault 3.4    Setting default python for active session to: 3.4    C:\Python34;C:\Python34\Scripts -- now at front of PATH# 由于Python 3.4中没有安装pywin,所以会报错C:\Users\tianw1>pywin'pywin' is not recognized as an internal or external command,operable program or batch file.C:\Users\tianw1>pythonPython 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> exit()

4. 即使上面通过pywin将默认Python版本环境设为3.4,但是由于文件的查找还是先本地,然后环境变量PATH。所以,下面方式使用的还是2.7版本,同时也可以再通过pywin将2.7设置为默认Python版本环境。

C:\>cd Python27C:\Python27>pythonPython 2.7.7 (default, Jun  1 2014, 14:17:13) [MSC v.1500 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> exit()C:\Python27>pywin setdefault 2.7    Setting default python for active session to: 2.7    C:\Python27;C:\Python27\Scripts -- now at front of PATHC:\Python27>


virtualenvwrapper-win

在Windows环境中使用"virtualenvwrapper-win"还是比较方便的。

安装。同样使用pip进行安装:pip install virtualenvwrapper-win

常用命令。安装完成之后,就可以直接使用"virtualenvwrapper-win"提供的命令来创建虚拟环境了。

1. 新建虚拟环境:mkvirtualenv env_name

C:\Users\tianw1>mkvirtualenv py27_dev1New python executable in py27_dev1\Scripts\python.exeInstalling setuptools, pip, wheel...done.(py27_dev1) C:\Users\tianw1>pip listpip (7.1.2)setuptools (18.2)wheel (0.24.0)

注意,默认情况虚拟环境不会自通引用原始Python环境中的软件包,但是可以通过"--system-site-packages"参数来使虚拟环境引用原始Python环境中的软件包。

C:\Users\tianw1>mkvirtualenv --system-site-packages py27_dev2New python executable in py27_dev2\Scripts\python.exeInstalling setuptools, pip, wheel...done.(py27_dev2) C:\Users\tianw1>pip list

2. 离开虚拟环境:deactivate

(py27_dev1) C:\Users\tianw1>deactivateC:\Users\tianw1> 

3. 列出虚拟环境列表:workon 或lsvirtualenv

C:\Users\tianw1>workonPass a name to activate one of the following virtualenvs:==============================================================================py27_dev1py27_dev2C:\Users\tianw1>lsvirtualenvdir /b /ad "C:\Users\tianw1\Envs"==============================================================================py27_dev1py27_dev2C:\Users\tianw1>

4. 删除虚拟环境:rmvirtualenv env_name

virtualenv

virtualenv 通过创建一个虚拟化的python运行环境,将我们所需的依赖安装进去的,不同项目之间相互不干扰。然后在每个环境中安装需要的软件包(配合 pip 使用),这一系列的环境是相互隔离的。作为一个独立的环境就不容易出现版本问题,还方便部署。


  1. Github: https://github.com/pypa/virtualenv
  2. Doc: https://virtualenv.pypa.io/en/latest/


virtualenv安装


VirtualEnv 用于在一台机器上创建多个独立的 Python 运行环境,VirtualEnvWrapper 为VirtualEnv 提供了一些便利的命令行上的封装。

Virtualenv 可用于创建独立的Python环境,是一个非常好的virtual python environment builder,他最大的好处是,可以让每一个python项目单独使用一个环境,而不会影响python系统环境,也不会影响其他项目的环境。在这些环境里面可以选择不同的Python版本或者不同的Packages,并且可以在没有root权限的情况下在环境里安装新套件,互相不会产生任何的影响。

为什么要用virtualenv ?

- 隔离项目之间的第三方包依赖,如A项目依赖django1.2.5,B项目依赖django1.3。

- 为部署应用提供方便,把开发环境的虚拟环境打包到生产环境即可,不需要在服务器上再折腾一翻。在服务器上都不用安装virtualenv,直接将virtualenv创建的目录拷贝到服务器,修改路径,进行虚拟环境迁移就可以用了

还可以用在没有root权限的python环境配置上,如果没有root权限,可以先自己搞一个virtualenv,再在virtualenv中使用pip安装。(系统中没有pip,并且也没有root权限使用sudo apt-get安装)

虚拟环境中安装的库的位置在哪 ?

在虚拟环境中安装的库在 env/Lib/site-packages/目录里,而不是在系统的python的Lib/site-packages目录里,这就是为什么虚拟环境是分开的。

Note:virtualenv 创建的虚拟环境与主机的 Python 环境完全无关,你主机配置的库不能在 virtualenv 中直接使用。你需要在虚拟环境中利用 pip install 再次安装配置后才能使用。


安装virtualenv比较简单,无论是在linux系统上还是windows上都可以通过pip来进行安装,如下:pip install virtualenv
如果安装不成功也可以下载virtualenv源码package,通过执行setup.py来安装virtualenv。同时因为python2和python3的不同,因此也有了两种pip和pip3两种python包安装工具,而两种工具安装的virtualenv也是不相同的,py2安装的virtualenv虚拟化出来的python运行环境是python2的,py3安装的virtualenv默认虚拟化环境则是python3的。
网速较好可以通过 pip 来安装, 系统没有 pip 的请参考 pip2 或 pip3

pip install virtualenvpip install setuptools     # 如果提示安装就执行这个

创建

mkdir myproject              创建项目文件夹 myprojectcd myproject                 进入项目目录virtualenv myproject_ENV     创建虚拟环境 myproject_ENV

这时候会发现在 myproject 目录下新增了一个 myproject_ENV 的文件夹。

使用

cd myproject_ENV            进入虚拟环境目录 myproject_ENVsource ./bin/activate       激活

这时候在命令行的最左边会显示该虚拟环境的名称。不妨使用下面的命令查看一下变化:

which pythonwhich pippip list

如果想要退出虚拟环境,使用这个命令就可以了:deactivate


virtualenv 的基本使用

$ virtualenv venv                          创建虚拟环境 $ virtualenv -p /usr/bin/python2.7 venv    为环境指定Python解释器: $ source venv/bin/activate                 激活虚拟环境$ deactivate                               停止虚拟环境。退出虚拟环境删除虚拟环境    直接删除目录即可

激活虚拟环境之后就可以通过命令pip install 来安装python包了,这里安装python包就不需要root权限了,直接就可以安装十分方便。

在venv的环境中,使用pip安装的包都不会再是全局性的包,只会在当前的虚拟环境中起作用,避免了污染系统环境。

运行pip带 –no-site-packages 选项的 virtualenv 将不会包括全局安装的包. 这可用于保持包列表干净, 以防以后需要访问它. (这在 virtualenv 1.7及之后是默认行为)

virtualenv各种其他命令如下:

$ virtualenv [OPTIONS] DEST_DIR选项:--version        显示当前版本号。-h, --help       显示帮助信息。-v, --verbose    显示详细信息。-q, --quiet不显示详细信息。-p PYTHON_EXE, --python=PYTHON_EXE                        指定所用的python解析器的版本,比如 --python=python2.5 就使用2.5版本的解析器创建新的隔离环境。             默认使用的是当前系统安装(/usr/bin/python)的python解析器--clear             清空非root用户的安装,并重头开始创建隔离环境。--no-site-packages        令隔离环境不能访问系统全局的site-packages目录。--system-site-packages    令隔离环境可以访问系统全局的site-packages目录。--unzip-setuptools        安装时解压Setuptools或Distribute--relocatable             重定位某个已存在的隔离环境。使用该选项将修正脚本并令所有.pth文件使用相当路径。--distribute              使用Distribute代替Setuptools,也可设置环境变量VIRTUALENV_DISTRIBUTE达到同样效要。--extra-search-dir=SEARCH_DIRS       用于查找setuptools/distribute/pip发布包的目录。可以添加任意数量的–extra-search-dir路径。--never-download                     禁止从网上下载任何数据。此时,如果在本地搜索发布包失败,virtualenv就会报错。--prompt==PROMPT                     定义隔离环境的命令行前缀。

使用

[root@localhost home]# virtualenv MTP            # 创建名为MTP的虚拟环境
New python executable in /home/MTP/bin/python
Installing setuptools, pip, wheel...done.
[root@localhost home]# ls                               #  会在当前目录生成一个目录
MTP
[root@localhost home]# cd MTP/
[root@localhost MTP]# ls
bin  include  lib  lib64  pip-selfcheck.json
[root@localhost MTP]# source ./bin/activate       #  启动虚拟环境后, 此时命令行会多一个(MTP)
(MTP) [root@localhost MTP]# pip freeze    # MTP为虚拟环境名称, 接下来所有模块都只会安装到该目录
(MTP) [root@localhost MTP]# pip list
pip (9.0.0)
setuptools (28.7.1)
wheel (0.30.0a0)
(MTP) [root@localhost MTP]# deactivate      #  退出虚拟环境, 将回到系统默认的Python解释器环境
[root@localhost MTP]#

删除
删除一个虚拟环境, 只需要删除它的目录.  有必要请执行( rm -rf venv )


扩展包 Virtualenvwrapper

为了使用virtualenv更方便,可以借助 virtualenvwrapper。Virtualenvwrapper 的作用是:更方便的创建/激活/管理/销毁虚拟环境。

Virtaulenvwrapper是virtualenv的扩展包,它提供了一系列命令用于更方便管理虚拟环境,它可以做:
1. 将所有虚拟环境整合在一个目录下
2. 管理(新增,删除,复制)虚拟环境
3. 切换虚拟环境 …

virtualenvwrapper 提供环境名字的tab补全功能.

$ sudo pip install virtualenvwrapper            安装 virtualenvwrapper $ source /usr/local/bin/virtualenvwrapper.sh    加载 virtualenvwrapper 创建虚拟环境 默认创建的虚拟环境位于 ~/.virtualenvs ,可以通过环境变量 $WORKON_HOME 来定制。 $ mkvirtualenv test2-env     创建 test2-env 虚拟环境后,会自动激活环境,注意看Shell提示符的改变:(test2-env)CL-USER> test2-env$ $ mkvirtual [环境名称]       创建 虚拟环境$ lsvirtualenv        列出所有虚拟环境$ workon test2-env    激活 test2-env 虚拟环境 $ cdvirtualenv        进入到当前激活的虚拟环境的目录中$ cdsitepackages      进入到当前激活的虚拟环境的 site-packages 目录 $ lssitepackages      列出 site-packages 目录的所有软件包 $ deactivate          停止虚拟环境。离开虚拟环境 $ rmvirtualenv test2-env    删除虚拟环境 

安装

[root@localhost MTP]# pip install virtualenvwrapper
[root@localhost MTP]# echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.bashrc
[root@localhost MTP]# source  ~/.bashrc
[root@localhost MTP]# source $(find /usr -type f -name virtualenvwrapper.sh)

此时virtualenvwrapper就可以使用了; 对于Windows, 可以使用 virtualenvwrapper-win

或者

安装:sudo easy_install virtualenvwrapper  
此时还不能使用virtualenvwrapper,默认virtualenvwrapper安装在/usr/local/bin下面,实际上你需要运行virtualenvwrapper.sh文件才行。
先别急,打开这个文件看看,里面有安装步骤,我们照着操作把环境设置好。

创建目录用来存放虚拟环境
mkdir $HOME/.virtualenvs
在~/.bashrc中添加行: export WORKON_HOME=$HOME/.virtualenvs
在~/.bashrc中添加行:source /usr/local/bin/virtualenvwrapper.sh
运行: source ~/.bashrc
此时virtualenvwrapper就可以使用了。


Linux 下的 Python 多版本管理(pyenv)


From: https://my.oschina.net/lionets/blog/267469


pyenv可以帮助你在一台开发机上建立多个版本的python环境, 并提供方便的切换方法。

virtualenv则提供了一种功能, 就是将一个目录建立为一个虚拟的python环境, 这样的话, 用户可以建立多个虚拟环境, 每个环境里面的python版本可以是不同的, 也可以是相同的, 而且环境之间相互独立。

如果解释得还不是很清楚的话,我们举例说明。

首先我们可以用pyenv 安装多个python 版本, 比如安装了2.5, 2.6, 3.3 三个版本。 用户可以随意切换当前默认的python版本。 但这时候, 每个版本的环境仍是唯一的, 如果我们想在环境中安装一些库的话, 还是会导致这个版本的环境被修改。 这个时候, 如果我们用virtual env去建立虚拟环境, 就可以完全保证系统路径的干净。无论你在虚拟环境中安装了什么程序, 都不会影响已安装版本的系统环境。



Python3 venv 创建虚拟环境

https://docs.python.org/3/library/venv.html

Python3.3以上的版本通过venv模块原生支持虚拟环境,可以代替Python之前的virtualenv。该venv模块提供了创建轻量级“虚拟环境”,提供与系统python的隔离支持。每一个虚拟环境都有其自己的Python二进制(允许有不同的Python版本创作环境),并且可以拥有自己独立的一套Python包。需要注意的是,在Python3.3中使用”venv”命令创建的环境不包含”pip”,你需要进行手动安装。在Python3.4中改进了这一个缺陷。


重建Python环境

冻结环境

所谓 冻结(freeze) 环境,就是将当前环境的软件包等固定下来:

$ pip freeze > requirements.txt$ $ cat requirements.txt


重建环境

重建(rebuild) 环境就是在部署的时候,在生产环境安装好对应版本的软件包,不要出现版本兼容 等问题.

$ pip install -r requirements.txt  配合pip,可以批量安装对应版本的软件包,快速重建环境,完成部署


后记

使用Python虚拟环境的另一个好处是可以方便的进行部署,对于每个虚拟环境,都可以通过下面的命令很方便的进行环境部署:

  • pip freeze > requirements.txt      将包依赖信息保存在requirements.txt文件
  • pip install -r requirements.txt     会自动从网上下载并安装所有包

virtualenv就是一个搭建虚拟化的python环境,便于不同的项目在同一台机器上开发运行。
virtualenv更多的还是适用于本地开发不同的项目,但是在生产环境中还是使用docker给不同的项目创建不同的容器,各自分开运行为好,不宜放在一个单独的物理机中运行。