什么是虚拟环境

  • 这是 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 创建虚拟环境

  1. 选中 Python Interpreter
  2. 查看更多 Interpreters
  3. 添加一个新的 Interpreters
  4. 选择 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 文件就只包含虚拟环境中已安装的依赖包了!

Python - 虚拟环境 venv的更多相关文章

  1. python 虚拟环境 venv 简单用法

    Python3.3以上的版本通过venv模块原生支持虚拟环境,可以代替Python之前的virtualenv.该venv模块提供了创建轻量级“虚拟环境”,提供与系统Python的隔离支持.每一个虚拟环 ...

  2. supervisor支持python虚拟环境venv

    在项目中使用supervisor时,如何在虚拟环境下启动一直存在些小问题. 比如我要写 Cesi程序的监听,我是手动安装的执行之前 要先加载环境source venv/bin/activate 所以写 ...

  3. Python 虚拟环境 pyenv、venv(pyvenv)、virtualenv之间的区别

    请参考连接 https://blog.zengrong.net/post/2167.html https://blog.csdn.net/lanonjj/article/details/5105021 ...

  4. 使用Anaconda的python安装虚拟环境是出现错误:python -m venv venvdir----Error: Command '['D:\\Development\\Django\\test\\Scripts\\python.exe', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit

    在创建python虚拟环境的时候,如果使用的是Anaconda中集成的python -m venv venvdir就会出现不能安装pip的错误,原因是Anaconda没有ensurepip, 解决办法 ...

  5. Python中虚拟环境venv的基本用法

    环境windows 7 venv为python3中的默认库,无需安装. 创建新的venv方法, 在当前文件夹下执行cmd,输入如下代码 python -m venv bob bob为需要创建的文件夹名 ...

  6. mac 下python使用venv 虚拟环境

    1.安装virtualenv :pip3 install virtualenv 2.创建虚拟环境命令:virtualenv --no-site-packages venv 在当前目录创建一个虚拟环境v ...

  7. [转载]windows下安装Python虚拟环境virtualenvwrapper-win

    1 前言 由于Python的版本众多,还有Python2和Python3的争论,因此有些软件包或第三方库就容易出现版本不兼容的问题. 通过 virtualenv 这个工具,就可以构建一系列 虚拟的Py ...

  8. 在windows环境下利用virtualenv搭建Python虚拟环境

    安装Python 安装时只有一点需要注意,一定一定要将Python添加到系统环境变量那一项勾选. 安装 virtualenv 加入系统目录之后,命令行(CMD)下就多了一条命令:pip.用pip可以自 ...

  9. windows下创建Python虚拟环境

    windows下创建Python虚拟环境 说明 由于Python的版本众多,还有Python2和Python3的争论,因此有些软件包或第三方库就容易出现版本不兼容的问题. 通过 virtualenv ...

随机推荐

  1. Mybatis学习笔记-配置解析

    核心配置文件 mybatis-config.xml properties(属性) settings(设置) typeAliases(类型别名) typeHandlers(类型处理器) objectFa ...

  2. js遍历终极大法--再也不用苦逼的for循环了

    while循环 while后面跟循环条件和执行语句,只要满足条件,就会一直执行里面的执行 var i = 0 while(i<10){ console.log(i) i++ } do...whi ...

  3. Java异常02——自定义异常

    Error与Exception与自定义异常 Error与Exception Error Exception 自定义异常 快捷键: ctrl + alt + t  package exception.d ...

  4. Build a ZenTao Server on Linux

    Download xampp for linux on Apache Friends, file name: xampp-linux-1.8.3-2-installer.run; Intallatio ...

  5. [.NET大牛之路 007] 详解 .NET 程序集

    .NET大牛之路 • 王亮@精致码农 • 2021.07.13 上一篇我们介绍了 Roslyn 编译器,我们知道,我们编写的 C#/VB 代码经过 Roslyn 编译器编译后会生成程序集文件.按照之前 ...

  6. How to build your custom release bazel version?

    一般情况下用源代码编译,生成的都是开发版本,这种版本做版本号校验方面会有很多问题,所以需要编译自己的release版本. export USE_BAZEL_VERSION=1.2.1 # 选择使用版本 ...

  7. CVE-2020-2883漏洞复现&&流量分析

    CVE-2020-2883漏洞复现&&流量分析 写在前面 网上大佬说CVE-2020-2883是CVE-2020-2555的绕过,下面就复现了抓包看看吧. 一.准备环境 靶机:win7 ...

  8. 《JERRY Hexo & GitHub 静态网站搭建说明》

    JERRY-Hexo-GitHub <JERRY Hexo & GitHub 静态网站搭建说明> 原创内容,转载请注明出处! 一.前言 1.1 什么是 Hexo? 一个基于 Nod ...

  9. 题解 [HNOI2008]GT考试

    传送门 这题暴力对拍都难搞,差评 一般的题解里思路是考虑一般DP: 令\(dp[i][j]\)为枚举到第i位时匹配到第j位的方案数,令\(g[k][j]\)为将匹配到k位的情况补到匹配到j位的方案数 ...

  10. luoguP2601 对称的正方形

    题目描述 给出一个数字矩形,求这个矩形中有多少个子正方形满足上下对称.左右对称. 思路 我们可以用3个哈希数组 \(a\ b\ c\) 分别表示矩形从左上往右下看,从左下往右上看,从右上往左下看的样子 ...