Python 虚拟环境venv详解

目录
  • 什么是虚拟环境
    • 一句话总结
  • 为什么要虚拟环境
    • 说下背景
    • 了解下第三方库的安装目录
    • 带来的问题
  • 通过 venv 操作虚拟环境
    • 创建虚拟环境
    • 激活虚拟环境
    • 关闭虚拟环境
  • Pycharm 项目关联新创建的虚拟环境
    • Python Interpreter 选中虚拟环境
    • 安装项目所需要的库
  • Pycharm 创建虚拟环境
  • 查看虚拟环境的目录
    • bin
    • include
    • lib
  • 从虚拟环境生成 requirement.txt
    • 先看看有哪些包
    • pip freeze
  • 包管理利器 popety

什么是虚拟环境

  • 这是 Python 3.3 的新特性:https://www.python.org/dev/peps/pep-0405/
  • 假设自己电脑主机的 Python 环境称为系统环境,而默认情况下,虚拟环境和系统环境是完全隔离的
  • 每个系统环境下可以有多个虚拟环境
  • 每个虚拟环境都有自己的 Python 二进制文件及单独的包安装目录,可以在虚拟环境中安装属于自己的 Python 包,而系统环境、其他虚拟环境并不会拥有这些 Python 包

一句话总结

Python 虚拟环境主要是为不同 Python 项目创建一个隔离的环境,每个项目都可以拥有独立的依赖包环境,而项目间的依赖包互不影响

为什么要虚拟环境

说下背景

  • 假设一个电脑包含多个 Python 项目
  • 每个项目所需的 Python 版本不一致,比如:Python 2.X、Python 3.X
  • 每个项目所需的依赖包不一致,比如 A 项目只要 Selenium 相关依赖包,B 项目只要 Appium 相关依赖包
  • 不同项目用同一个依赖包,但依赖包版本可能不一致

假设现在不用虚拟环境会有什么问题?

了解下第三方库的安装目录

默认情况下,Python 第三方库都是装在系统固定目录的,比如 Mac 电脑

>>> import site
>>> site.getsitepackages()
['/usr/local/Cellar/python@3.9/3.9.5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages']

电脑上所有项目都会从这个目录去存储、查找第三方库(站点库)

带来的问题

  • 不同项目使用同一个依赖包,但使用不同版本的依赖包时,意味着当开发 A 项目的时候,要装一次依赖包 A 版本,转开发 B 项目时,先要卸载依赖包 A 版本,再重装 B 版本...
  • 一个环境下要安装所有项目需要的依赖包,所以当某个项目需要生成 requirement.txt 的时候,会带上很多用不上的依赖包,要删还得手工一个个删....

通过 venv 操作虚拟环境

Python 3.5 后推荐使用 venv 来创建虚拟环境

创建虚拟环境

python3 -m venv fastapi_test

fastapi_test 是虚拟环境名字,可以自定义

激活虚拟环境

source <环境名称>/bin/activate 

可以看到虚拟环境中的 Package 只有最基础的 pip、setuptools

关闭虚拟环境

deactivate

Pycharm 项目关联新创建的虚拟环境

先在项目目录下创建好虚拟环境

Python Interpreter 选中虚拟环境

安装项目所需要的库

Pycharm 创建虚拟环境

  • 选中 Python Interpreter
  • 查看更多 Interpreters
  • 添加一个新的 Interpreters
  • 选择 New environment,默认选项即可,确定

查看虚拟环境的目录

刚刚创建的两个虚拟环境的目录其实是一样的

bin

与虚拟环境交互的文件

>> ll
total 72
-rw-r--r--  1 polo  staff   8.6K Sep 14 09:26 Activate.ps1
-rw-r--r--  1 polo  staff   1.9K Sep 14 09:26 activate
-rw-r--r--  1 polo  staff   882B Sep 14 09:26 activate.csh
-rw-r--r--  1 polo  staff   2.0K Sep 14 09:26 activate.fish
-rwxr-xr-x  1 polo  staff   269B Sep 14 08:40 pip
-rwxr-xr-x  1 polo  staff   269B Sep 14 08:40 pip3
-rwxr-xr-x  1 polo  staff   269B Sep 14 08:40 pip3.9
lrwxr-xr-x  1 polo  staff     9B Sep 14 08:40 python -> python3.9
lrwxr-xr-x  1 polo  staff     9B Sep 14 08:40 python3 -> python3.9
lrwxr-xr-x  1 polo  staff    39B Sep 14 08:40 python3.9 -> /usr/local/opt/python@3.9/bin/python3.9

include

编译 Python 包的 C 头文件

lib

包含Python 版本的副本(python3.9),以及安装每个依赖包的 site-packages 文件夹

>> pwd
/Users/polo/Downloads/FastAPI_project/fastapi_test/lib/python3.9/site-packages

>> ll
total 224
drwxr-xr-x   3 polo  staff    96B Sep 14 09:27 __pycache__
drwxr-xr-x   5 polo  staff   160B Sep 14 08:40 _distutils_hack
-rw-r--r--   1 polo  staff   152B Sep 14 08:40 distutils-precedence.pth
drwxr-xr-x  28 polo  staff   896B Sep 14 09:27 fastapi
drwxr-xr-x   8 polo  staff   256B Sep 14 09:27 fastapi-0.68.1.dist-info
drwxr-xr-x   8 polo  staff   256B Sep 14 08:40 pip
drwxr-xr-x  10 polo  staff   320B Sep 14 08:40 pip-21.1.1.dist-info
drwxr-xr-x   7 polo  staff   224B Sep 14 08:40 pkg_resources
drwxr-xr-x  53 polo  staff   1.7K Sep 14 09:27 pydantic
drwxr-xr-x   9 polo  staff   288B Sep 14 09:27 pydantic-1.8.2.dist-info
drwxr-xr-x  41 polo  staff   1.3K Sep 14 08:40 setuptools
drwxr-xr-x  11 polo  staff   352B Sep 14 08:40 setuptools-56.0.0.dist-info
drwxr-xr-x  27 polo  staff   864B Sep 14 09:27 starlette
drwxr-xr-x   8 polo  staff   256B Sep 14 09:27 starlette-0.14.2.dist-info
drwxr-xr-x   8 polo  staff   256B Sep 14 09:27 typing_extensions-3.10.0.2.dist-info
-rw-r--r--   1 polo  staff   107K Sep 14 09:27 typing_extensions.py

从虚拟环境生成 requirement.txt

先看看有哪些包

> pip list
Package           Version
----------------- --------
fastapi           0.68.1
pip               21.1.1
pydantic          1.8.2
setuptools        56.0.0
starlette         0.14.2
typing-extensions 3.10.0.2

pip freeze

在激活虚拟环境下敲

pip freeze > requirement.txt

这样生成的 requirement.txt 文件就只包含虚拟环境中已安装的依赖包了!

包管理利器 popety

TODO

到此这篇关于Python 虚拟环境venv详解的文章就介绍到这了,更多相关Python 虚拟环境venv内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python3利用venv配置虚拟环境及过程中的小问题小结

    在利用python进行flask等开发过程中经常需要配置虚拟环境以方便针对不同的项目需求配置不同的生产环境.在python3.3之前,需要利用virtualenv等工具来实现python虚拟开发环境的配置,在python3.3中加入了venv模块支持原生创建虚拟环境.但在python3.3版本中venv模块没有内置pip包,在3.4版本后加入了pip包,创立并激活虚拟环境后可直接使用.本篇以配置一个虚拟 环境并安装flask为例记录我自己配置虚拟环境的过程. 总的来说分为以下三步: 创建虚拟环境

  • Python venv虚拟环境配置过程解析

    一.创建虚拟环境 python -m venv env 通过执行命令,创建一个名为env的虚拟环境,命令执行完毕后会出现一个env文件夹,这是一个全新的虚拟环境,包含这个项目专用的python解析器. 注意:ubuntu下预装的python3,标准库下没有venv包,需要执行下述命令手动安装. sudo apt install python3-venv 使用vscode打开env目录,可以看到如下结构: 二.使用虚拟环境 Windows环境中使用如下命令"激活"虚拟环境: .\Scri

  • Python3 venv搭建轻量级虚拟环境的步骤(图文)

    今天先聊一聊在windows/mac iOS系统下用venv搭建python轻量级虚拟环境的问题. 使用venv搭建的虚拟环境同virtualenv搭建的虚拟环境,即venv可替代virtualenv 1. 虚拟环境的作用是:搭建独立的python运行环境,不与其他产生冲突 就是说,安装在虚拟环境里的所有包,均不会对环境外的其他包产生影响,反之,在虚拟环境下运行时只能调用虚拟环境中安装的包,不会调用外部的包.比如,mac系统自带python2,我搭建了虚拟环境安装python3,那么我在虚拟环境

  • python虚拟环境模块venv使用及示例

    相信只要学习python的同学对于虚拟环境这个概念肯定不会太陌生,虚拟环境指的是一个个单独隔离的python开发环境.各个虚拟环境之间互不干扰,都有自己独立的开发包.就像是在电脑上装了很多个虚拟机,每个虚拟机里面你随便折腾,不会影响到物理机,也不会影响到其他虚拟机. 既然这么有用,那么Python里面用来创建虚拟环境的模块virtualenv是怎么使用的呢?我们一起来看一下. virtualenv基本命令格式 这个模块比较简单,它只有一条命令,但是跟的选项比较多,就是通过不同的选项来控制生成不同

  • 浅谈关于Python3中venv虚拟环境

    Python3.3以上的版本通过venv模块原生支持虚拟环境,可以代替Python之前的virtualenv. 该venv模块提供了创建轻量级"虚拟环境",提供与系统Python的隔离支持.每一个虚拟环境都有其自己的Python二进制(允许有不同的Python版本创作环境),并且可以拥有自己独立的一套Python包.他最大的好处是,可以让每一个python项目单独使用一个环境,而不会影响python系统环境,也不会影响其他项目的环境. 优点 使不同应用开发环境独立 环境升级不影响其他应

  • Python虚拟环境venv用法详解

    初衷: 在工作的时候,我们会有很多个项目,每个项目使用的库的版本不一样,导致我们切换项目的时候会很麻烦. 比如:我有两个django项目,项目一使用的版本是 django 1.7 , 项目二使用的版本是 django 2.2.两个项目平时都要维护,如果没有独立的环境,那我每次维护项目一的时候,我就需要安装 django 1.7,维护项目二的时候,我就要安装 django 2.2,这样会很麻烦. 所以我们需要给每个项目建立一个独立的环境,这个时候环境管理就派上用场了,我在维护项目一的时候,只需要使

  • Python 虚拟环境venv详解

    目录 什么是虚拟环境 一句话总结 为什么要虚拟环境 说下背景 了解下第三方库的安装目录 带来的问题 通过 venv 操作虚拟环境 创建虚拟环境 激活虚拟环境 关闭虚拟环境 Pycharm 项目关联新创建的虚拟环境 Python Interpreter 选中虚拟环境 安装项目所需要的库 Pycharm 创建虚拟环境 查看虚拟环境的目录 bin include lib 从虚拟环境生成 requirement.txt 先看看有哪些包 pip freeze 包管理利器 popety 什么是虚拟环境 这是

  • Python学习之虚拟环境原理详解

    目录 认识虚拟环境 Python中的虚拟环境工具 Virtualenv Treminal 终端演示 该章节我们学习虚拟环境的相关知识,虚拟环境对于刚刚使用Python的初学者来说使用的概率可能会比较低.但是我们依然要对它有一定的了解. 认识虚拟环境 在我们平时的工作环境中,可能会存在一台电脑存在多个版本的 python 的情况 . 比如我们有一个 Python2.7的版本,还有一个 Python3.8的环境,它们两个都存在与我们当前的系统中.这就造成了一个问题,两个版本都在同一个环境下,造成 p

  • 可能是史上最细的python中import详解

    以前在使用import的时候经常会因为模块的导入而出现一些问题,以及一些似懂非懂半疑惑半糊涂的问题,索性花了点时间研究了一些python引用的方法,并且动手操作试验了一下,深有感触,特留此文以作总结,如有不当之处欢迎评论指正 本文会尽我所能详细描述,字数会比较多,希望各位耐心看完. 首先我觉得应该先了解一下python的引用是怎么引用的 我们首先新建一个python文件demo.py print(dir()) dir()命令是获取到一个object的所有属性,当传值为空时默认传入的是当前py文件

  • Python网络编程详解

    1.服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的"服务".它存在唯一目的就是等待客户端的请求,并响应它们(提供服务),然后等待更多请求. 2.客户端/服务器架构既可以应用于计算机硬件,也可以应用于计算机软件. 3.在服务器响应客户端之前,首先会创建一个通信节点,它能够使服务器监听请求. 一.套接字:通信端点 1.套接字 套接字是计算机网络数据结构,它体现了上节中所描述的"通信端点"的概念.在任何类型的通信开始之前,网络应用程序必须创建套接字

  • Python 多线程实例详解

    Python 多线程实例详解 多线程通常是新开一个后台线程去处理比较耗时的操作,Python做后台线程处理也是很简单的,今天从官方文档中找到了一个Demo. 实例代码: import threading, zipfile class AsyncZip(threading.Thread): def __init__(self, infile, outfile): threading.Thread.__init__(self) self.infile = infile self.outfile =

  • Docker 打包python的命令详解

    最近用Python写了一段爬虫程序,为了隔离其运行环境,易于分发,把项目打包成Docker镜像 Dockerfile FROM python:2.7.12-alpine ADD ./src /job CMD ["python", "/job/main.py"] 构建命令 $ docker build -t job . 运行 $ docker run -d --name job job 比较简单 以上所述是小编给大家介绍的Docker 打包python的命令详解,希望

  • windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此,我们这里使用Python这个脚本语言来进行数字图像处理. 要使用Python,必须先安装python,一般是2.7版本以上,不管是在windows系统,还是Linux系统,安装都是非常简单的. 要使用python进行各种开发和科学计算,还需要安装对应的包.这和matlab非常相似,只是matla

  • 基于python爬虫数据处理(详解)

    一.首先理解下面几个函数 设置变量 length()函数 char_length() replace() 函数 max() 函数 1.1.设置变量 set @变量名=值 set @address='中国-山东省-聊城市-莘县'; select @address 1.2 .length()函数 char_length()函数区别 select length('a') ,char_length('a') ,length('中') ,char_length('中') 1.3. replace() 函数

  • Python 操作MySQL详解及实例

    Python 操作MySQL详解及实例 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy. Python-MySQL资格最老,核心由C语言打造,接口精炼,性能最棒,缺点是环境依赖较多,安装复杂,近两年已停止更新,只支持Python2,不支持Python3. PyMySQL为替代Python-MySQL而生,纯python打造,接口与Python-MySQL兼容,安装方便,支持Python3. SQLA

  • python 全文检索引擎详解

    python 全文检索引擎详解 最近一直在探索着如何用Python实现像百度那样的关键词检索功能.说起关键词检索,我们会不由自主地联想到正则表达式.正则表达式是所有检索的基础,python中有个re类,是专门用于正则匹配.然而,光光是正则表达式是不能很好实现检索功能的. python有一个whoosh包,是专门用于全文搜索引擎. whoosh在国内使用的比较少,而它的性能还没有sphinx/coreseek成熟,不过不同于前者,这是一个纯python库,对python的爱好者更为方便使用.具体的

随机推荐