• 一文掌握Python虚拟环境-提升你的开发效率


    在真正开始Python代码编写、编译、运行、调试和开发项目之前,必须要了解下Python的虚拟环境的配置,熟悉使用后,会大大提升后续的开发效率,减少非代码原因导致的问题。virtualenv就是Python中的Virtual Environment-虚拟环境。本文将介绍Python虚拟环境的基础知识、如何使用,以及其工作原理是怎样的。

    一 虚拟环境基础知识

    Python在开发人员中大受欢迎,最大的原因之一是它广泛且不断扩大的第三方包选择。虚拟环境可以为每个项目创建单独的隔离环境,达到分离不同项目的依赖关系的目的。

    Python有针对不同应用程序的各种模块和包。在我们的项目开发中,可能需要一些三方库,那么就需要安装这个库,而另一个项目可能不需要任何其他第三方包,或者是需要其中某些三方包的其他的版本。当不同的Python项目需要相同插件的竞争或不兼容版本时,就会出现问题,导致程序莫名的异常。

    另外开发用的电脑,可能同时安装了Python2和Python3,而Python2和Python3又有更多的小版本号,而有些现成的项目可能开发比较早,只支持用Python2编译,而有些则必须要Python3才行,这样如果没有隔离,则也会导致程序无法运行。

    因此,虚拟环境此时能够发挥作用,为不同的Python安装版本、或不同的项目创建单独的隔离环境,每个项目可以从其特定的环境中存储和检索包,使用特定的Python版本。

    二 如何使用虚拟环境

    这里通过具体操作执行进行示例说明。

    2.1 安装virtualenv

    要创建虚拟环境,需要先安装一个名为virtualenv的模块。首先要确保在计算机上安装了pip。

    # 如果计算机上没有安装pip,需使用以下命令先安装pip,不同的操作系统命令会有差异:
    sudo apt-get install python-pip
    
    # 然后通过pip来安装virtualenv,安装后可以检查下virtualenv的版本:
    pip install virtualenv
    virtualenv --version

    2.2 创建虚拟环境并激活

    成功安装virtualenv之后,可以使用以下命令创建一个特定名称的虚拟环境:

    # 创建特定名称的虚拟环境,myvenv可以换成任意你喜欢的名字都行
    virtualenv myvenv
    # 执行以上命令会创建myvenv的文件夹,包含运行Python项目所需的所有可执行文件
    
    # 如果要指定Python版本,可以通过下面指令来创建虚拟环境:
    python2.7 virtualenv myvenv    # 创建使用Python2.7的虚拟环境
    # 也可以通过下面的命令来创建虚拟环境,效果和上面的一样的
    python3 -m venv myvenv         # 创建使用Python3的虚拟环境
    
    # 在创建好虚拟环境后,还需要用如下命令启用,激活进入特定的隔离环境
    source venv/bin/activate
    # 如果是在Windows系统下,上面的激活命令略有差异:
    venv/Scripts/activate

    成功激活进入虚拟环境后,如下图所示,会在命令行前面看到有(.venv)的标志:

    成功创建并激活了虚拟环境后,就可以安装项目所需的依赖项和需求,而不会干扰到其他项目了。

    2.3 退出虚拟环境

    一旦完成了当前项目的工作,可以返回到系统默认环境,只需要使用deactivate命令即可退出。

    三 虚拟环境的工作原理

    如果没有使用虚拟环境时,Python的第三方包都会被pip安装到Python安装路径的site-packages目录下。当使用虚拟环境时,按照前面的“python3 -m venv myvenv”等方式创建虚拟环境后,可以查看当前目录,会看到几个文件:

    • bin目录:python3、pip3等可执行文件,其实就是是软链接到Python系统目录(或者是复制的副本)的
    • lib/python3.10/site-packages:用于该虚拟环境下安装的三方包的存储目录的

    所以,通过venv,会将系统的Python软链接到venv的环境下,当用source命令激活虚拟环境时,就会启用该venv下面的python和pip了,同时过程中安装的三方包都是放在venv/lib/pythonx.x/site-packages下面的,这样系统的Python环境是不会受到任何影响的。

    四 虚拟环境的更多用法

    4.1 三方包依赖需求生成与重新安装

    如前所述,在创建一个新的虚拟环境后,pip和setuptools包会被软链接(或复制)到虚拟环境下,接下来可以安装在环境中使用的任何其他包。对于具有复杂需求的项目,在项目的根目录中最好能保留一个requirements.txt的文件,这个文件列出了项目的三方包依赖的需求。这样,如果需要重新创建虚拟环境,可以使用pip install -r requirements.txt命令重新安装所有需要的包。

    在项目的虚拟环境中安装完所需的库后,可使用pip list查看当前所有已安装的库,然后可以通过运行以下命令生成一个文本文件,列出所有项目依赖项:

    pip freeze > requirements.txt

    那么在其他计算机上重新搭建这个项目的环境时,则可以快速通过如下命令,一次将所有依赖的三方包安装齐全:

    pip install -r requirements.txt

    4.2 虚拟环境更新升级

    虚拟环境中的pip和setuptools副本是该虚拟环境的本地副本,需要独立地进行更新和维护。所以会遇到某些虚拟环境中pip过时的警告,而在其他虚拟环境中则不会,pip必须在每个虚拟环境中分别更新才行。

    因此当升级系统上的Python运行时时,使用该版本的Python的虚拟环境是不会自动升级的,这样设计也是合理的,因为无意中升级到新Python版本可能会破坏它们的三方包依赖。

    具体的虚拟环境更新升级操作如下:

    Python小版本升级:

    如果已经升级了一个现有的Python小版本,比如从Python 3.9.5到Python 3.9.7,那么可以在项目目录下通过如下方式升级虚拟环境(不要提前激活虚拟环境,否则可能导致升级失败):

    python -m venv myvenv --upgrade

    Python大版本升级:

    如果已经安装了一个主要的新版本的Python,比如已经有了Python 3.8,现在将安装Python 3.9,那么就不要用上面的升级方式了,而是重新创建一个新的虚拟环境,专门使用新的Python大版本。

    五 Visual Studio Code中如何配置venv

    除了前面介绍的virtualenv的使用,还有conda也带有虚拟环境的功能。conda在Anaconda和Miniconda里会安装好,对于用来开发数据科学的项目而言应当会用到。

    在VS Code中,如果通过命令行方式创建了虚拟环境,并且在项目目录下面,VS Code是能够自动检测到的,如果没有通过前面的命令行方式创建,那么也可以通过下面的方式来创建。在VS Code里通过“Command+Shift+P”调出交互命令,输入Python: env...,如下图:

    然后接着可以选择创建虚拟环境的工具,可选的有Venv和Conda:

    然后选择该虚拟环境的Python版本:

    接下来等待小段时间,等待VS Code中的虚拟环境自动创建完成。

    最后,可以编写测试程序,如下所示,通过点击右边的三角形按钮,可以对.py代码进行运行、或调试:

    参考文献:

    https://blog.loginradius.com/engineering/python-virtual-environments/

    Virtualenv and venv: Python virtual environments explained | InfoWorld

    How to Set Up a Virtual Environment in Python – And Why It's Useful

    venv — Creation of virtual environments — Python 3.11.0 documentation

  • 相关阅读:
    Oracle EBS fndgfm.jsp error : 您没有访问此文件内容的权限
    epoll介绍
    【MongoDB】<基于官方文档 6.0> MongoDB数据库安装和卸载
    copy archived log from ASM 异地恢复归档
    手机备忘录怎么扫描图片上的文字
    Understanding Entity Relationship Behaviors in Microsoft Dynamics 365/CRM
    Java8中anyMatch()、allMatch()、noneMatch()用法详解
    selenium.chrome怎么写扩展拦截或转发请求?
    【Unity入门计划】利用Cinemachine实现简单的相机跟随&设置相机边界
    数据趣事:历史最高温的是新疆吐鲁番?重庆45℃高温仅排全国第二
  • 原文地址:https://blog.csdn.net/suxiang198/article/details/127992039