• python的虚拟环境详解


    我们在使用Pycharm中的Project Interpreter 发现有4中选择: Virtualenv Environment、Conda Environment、System Interpreter、Pipenv Environment,那么每个的具体含义是什么呢?下面我们就来学习一下吧。

    System Interpreter 如字面意思是系统里安装的本地Python作为解释器,一般很少用,不推荐

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

    virtualenv 的优点

    使得不同Python应用的开发环境相互独立
    开发环境升级不影响其他应用的开发环境,也不会影响全局的环境(默认开发环境是全局开发环境),因为虚拟环境是将全局环境进行私有的复制,当我在虚拟环境进行 pip install 时,只会安装到选择的虚拟环境中。
    它可以防止系统中出现包管理混乱和版本的冲突
    virtualenv 的简单使用

    pip 安装 virtualenv
    pip3 install virtualenv # 使用自己对应安装的pip版本
    1
    创建虚拟环境目录
    mkdir myproject
    cd myproject
    1
    2
    创建一个独立的Python运行环境: myenv
    virtualenv --no-site-packages myenv
    1
    注: 1)参数:--no-site-packages (可省略) 其意义在于不复制已经安装到系统Python环境中的所有第三方包从而得到一个“纯净”的运行环境。
    2) 此时当前目录下会生成一个名为:“myenv” 的目录,该目录中存放刚生成的虚拟环境文件

    激活虚拟运行环境
    # Windows:
    myenvScriptsactivate.bat
    # Linux:
    source myenv/bin/activate
    1
    2
    3
    4
    注: 以上命令执行完后会发现命令提示符变了,有个(myenv)前缀,表示当前环境是一个名为“myenv”的Python环境,此时可以在该环境中按照我们熟悉的方式安装库、运行程序等。

    安装各种第三方包,并运行Python命令
    pip install jieba
    python myapp.py
    1
    2
    注: 因为此时虚拟环境已经激活,所以可以直接使用命令pip、python而不是pip3和python3。

    使用deactivate命令退出当前的myenv环境
    deactivate
    1
    其他详细介绍,请参考 virtutalenv 官网:https://virtualenv.pypa.io/en/latest/reference/

    venv:
    Python 从3.3 版本开始,自带了一个虚拟环境 venv,在 PEP-405 中可以看到它的详细介绍。它的很多操作都和 virtualenv 类似,但是两者运行机制不同。因为是从 3.3 版本开始自带的,这个工具也仅仅支持 python 3.3 和以后版本。所以,要在 python2 上使用虚拟环境,依然要利用 virtualenv 。
    有关venv与virtualenv的区别,virtualenv官网: https://virtualenv.pypa.io/en/latest/reference/#compatibility-with-the-stdlib-venv-module 有详细介绍,博主英文水平不够,请有需要的同学自行解读。

    venv 安装
    # Windows 中venv已经以标准库的形式存在,不用再单独安装
    # Linux
    sudo apt-get install python3-venv # 如有不同版本的Python3,可指定具体版本venv:python3.5-venv
    1
    2
    3
    在当前目录创建一个独立的Python运行环境: myenv
    # Windows
    py -3 -m venv myenv
    # Linux
    python3 -m venv myenv
    1
    2
    3
    4
    激活虚拟运行环境、安装第三方包、运行程序及退出虚拟环境等操作均与 virtualenv 相同,在此不再赘述。
    其他详细介绍,请参考 venv 官网:https://docs.python.org/zh-cn/3/tutorial/venv.html

    什么是conda
    最近有人问我venv和conda有什么区别,其实在我看来区别不是特别大。主要如下。

    如果说venv是虚拟环境管理器,pip是包管理器,那么conda则是两者的结合。
    遗憾的是conda的包管理器做的一般且会安装过多依赖如TensorFlow自动安装cudnn(在主机配置了cudnn的情况下),大多数时候还是使用pip安装包。
    但是,注意,pip只能安装Python的包,conda可以安装一些工具软件,即使这些软件不是基于Python开发的。
    但是conda的虚拟环境管理还是可以的,一般使用venv会在该项目下创建虚拟环境,再不济也会在项目下创建venv的文件夹(含配置文件),当然pycharm下创建虚拟环境另说;然而conda每个虚拟环境不会占用项目文件夹的空间,它创建在用户设定的一个位置,这使得多个项目共享一个虚拟环境更加方便(只是方便,venv也是可以的,但是venv一般占用项目文件夹空间,而且venv命令行使用具有局限性)。
    conda虚拟环境是独立于操作系统解释器环境的,即无论操作系统解释器什么版本(哪怕2.7),我也可以指定虚拟环境python版本为3.6(见文章开头所说原博客),而venv是依赖主环境的。
    对于科学计算和大数据领域的人,conda是环境自动集成了numpy这样的主流科学计算包的,venv每个包都要自行下载。
    conda有图形化环境管理器,venv没有。(虽然开发人员几乎不用图形界面conda)

  • 相关阅读:
    【BZOJ2879】【NOI2012】美食节(费用流)
    HN2018省队集训
    【HDU5421】Victor and String(回文树)
    【BZOJ2878】【NOI2012】迷失游乐园(动态规划)
    【BZOJ5338】[TJOI2018]异或(主席树)
    【BZOJ2432】【NOI2011】兔农(数论,矩阵快速幂)
    【BZOJ2436】【NOI2011】NOI嘉年华(动态规划)
    【BZOJ2437】【NOI2011】兔兔与蛋蛋(博弈论,二分图匹配)
    【BZOJ2109/2535】【NOI2010】航空管制(贪心)
    【BZOJ1565】【NOI2009】植物大战僵尸(网络流)
  • 原文地址:https://www.cnblogs.com/Mango886/p/13307433.html
Copyright © 2020-2023  润新知