Virtual environment

Python 虚拟环境

Written with StackEdit.

virtualenv 是一个创建隔绝的Python环境的工具。virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包。

它是一个虚拟化,从电脑独立开辟出来的环境。通俗的来讲,虚拟环境就是借助虚拟机docker来把一部分内容独立出来,我们把这部分独立出来的东西称作“容器”,在这个容器中,我们可以只安装我们需要的依赖包,各个容器之间互相隔离,互不影响。

譬如,本次学习需要用到Django,我们可以做一个Django的虚拟环境,里面只需要安装Django相关包就可以了,需要Scrapy库,就在开辟一个独立空间来学习Scrapy库相关就行了。

在实际项目开发中,我们通常会根据自己的需求去下载各种相应的框架库,如Scrapy、Beautiful Soup等,但是可能每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要我们根据需求不断的更新或卸载相应的库。直接怼我们的Python环境操作会让我们的开发环境和项目造成很多不必要的麻烦,管理也相当混乱。如一下场景:

场景1:项目A需要某个框架1.0版本,项目B需要这个库的2.0版本。如果没有安装虚拟环境,那么当你使用这两个项目时,你就需要 来回 的卸载安装了,这样很容易就给你的项目带来莫名的错误;

场景2:公司之前的项目需要python2.7环境下运行,而你接手的项目需要在python3环境中运行,想想就应该知道,如果不使用虚拟环境,这这两个项目可能无法同时使用,使用python3则公司之前的项目可能无法运行,反正则新项目运行有麻烦。而如果虚拟环境可以分别为这两个项目配置不同的运行环境,这样两个项目就可以同时运行。

Python 虚拟环境

python virtual enviorments

  • 2014-10-10更新: 更新描述。
  • 2015-04-18更新: 加入 ubuntu 14.04 下 pyvenv bug 的解决。

为了解决包依赖、安装权限和 python 版本问题,程序员们制造了许多工具。我把它们做一个汇总,便于查找。

这里介绍的工具都是当前流行的,不会包含已经不再维护的工具。

virtualenv

virtualenv 是目前最流行的 python 虚拟环境配置工具。它不仅同时支持 python2 和 python3,而且可以为每个虚拟环境指定 python 解释器,并选择不继承基础版本的包。

virtualenvwrapper

顾名思义,virtualenvwrapper 是对 virtualenv 的一个封装,目的是使后者更好用。

关于为什么使用 shell 脚本开发,作者专门 进行了解释

virtualenvwrapper 还有针对 vim 用户和 emacs 用户的 扩展

virtualenvwrapper 能支持 bash/ksh/zsh ,所以我们可以看出,它不支持 Windows。

virtualenvwrapper-win

由于 virtualenvwrapper 基于 shell 开发,因此不能在 Windows 系统上使用。但我们可以使用针对 Windows batch shell 的 virtualenvwrapper-win

venv

Python 从3.3 版本开始,自带了一个虚拟环境 venv,在 PEP-405 中可以看到它的详细介绍。它的很多操作都和 virtualenv 类似。

因为是从 3.3 版本开始自带的,这个工具也仅仅支持 python 3.3 和以后版本。所以,要在 python2 上使用虚拟环境,依然要利用 virtualenv

在 *nix 系统上,可以直接执行 pyvenv /path/to/new/virtual/enviorment 来创建一个虚拟环境,在 Windows 系统上,则可以使用 python -m venv myenv 来创建。

2015-04-18 更新:

pyvenv 3.4 在 Ubuntu 14.04 下有 bug,如下:

解决方法是创建一个不含 pip 的虚拟环境,然后手动安装 pip :

参见:

pyenv

我们可以用许多方法让不同的 Python 版本在系统上共存。

例如在 OS X 上,如果使用官方提供的 DMG 版本安装,那么自带的 python2 和新安装的 python3 是可以共存的。python3 可以使用 python3 来调用,甚至 pip 都可以使用 pip3 来调用。

但如果还有其它小版本需要共存么?我要记忆多少命令呢?

pyenv 用来解决这类问题。它可以安装、卸载、编译、管理多个 python 版本,并随时将其中一个设置为工作环境。

pyenv 不支持 Windows 系统。

pywin

Windows 上有一个 pyenv 的替代品,是 pywin 。它用来在多个安装的 Python 版本之间进行切换,也支持 MSYS/MINGW32

Python Launcher for Windows

Python 从3.3版本开始(又是3.3?),在 Windows 系统中自带了一个 py.exe 启动工具。如果你是使用 Python.org 官网下载的安装包安装的 Python 3.3(或更新版本)环境,那么可以直接在命令提示符中使用这个工具。

py 可以打开默认的 python 提示符; py -2.7py -3 打开对应的 Python 版本。

—- 分割线 —-

上面介绍的工具中,前四个是虚拟环境切换工具,后三个是 Python 版本环境切换工具。将这两套工具结合使用,可以完美解决 python 多版本环境的问题。

在此电脑中启动虚拟环境, 需要使用:

pyenv versions 
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
pyenv activate XXXXX

How to use virtual environment in jupyter notebook.
基本思想就是利用建立好的环境, 在jupyter notebook 中添加kernel.
首先检查虚拟环境中jupyter notebook是否正确安装:

pip list | grep jupyter 

如果没有争取安装, 就要在虚拟环境中安装
然后查看路径

jupyter --path

激活环境, 查看环境的路径

pyenv activate tfpy352
pyenv which python
pyenv deactivate 

建立jupyter notebook 的虚拟环境

mkdir /Users/motta/Library/Jupyter/kernels/tfpy352

建立kernel.json, 并且写入刚才建立的文件夹之下
{
“argv”: [
“/Users/Hall/.pyenv/versions/tfpy352/bin/python”,
“-m”,
“ipykernel_launcher”,
“-f”,
“{connection_file}”
],
“display_name”: “tfpy”,
“language”: “python”
}

切换kernal:

https://www.alfredo.motta.name/create-isolated-jupyter-ipython-kernels-with-pyenv-and-virtualenv/

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s