Python 虚拟环境venv详解

作者:小菠萝测试笔记 时间:2021-04-12 03:44:14 

什么是虚拟环境

  • 这是 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

Python 虚拟环境venv详解

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

关闭虚拟环境


deactivate

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

Python 虚拟环境venv详解

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

Python Interpreter 选中虚拟环境

Python 虚拟环境venv详解

安装项目所需要的库

Python 虚拟环境venv详解

Pycharm 创建虚拟环境

Python 虚拟环境venv详解

  • 选中 Python Interpreter

  • 查看更多 Interpreters

  • 添加一个新的 Interpreters

  • 选择 New environment,默认选项即可,确定

Python 虚拟环境venv详解

查看虚拟环境的目录

Python 虚拟环境venv详解

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

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  

Python 虚拟环境venv详解

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

包管理利器 popety

TODO

来源:https://www.cnblogs.com/poloyy/p/15266382.html

标签:Python,venv,虚拟环境
0
投稿

猜你喜欢

  • 总结showModalDialog和showModelessDialog用法

    2007-11-24 08:26:00
  • 脆弱的用户体验

    2010-01-28 12:34:00
  • Django缓存系统实现过程解析

    2021-07-22 23:18:09
  • python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)

    2022-06-12 23:09:48
  • Python字符串的创建和驻留机制详解

    2022-07-07 18:49:17
  • 如何在SQL2000的查询中使用XML-Data?

    2010-06-18 19:26:00
  • MySQL的添加用户的两种方法

    2012-01-29 17:50:10
  • python list 合并连接字符串的方法

    2021-12-18 09:35:30
  • python中几种自动微分库解析

    2022-12-20 18:24:02
  • Python使用scipy保存图片的一些注意点

    2023-12-01 06:06:58
  • 能说明一下GETROWS的用法吗?

    2009-11-02 20:12:00
  • python 实现视频流下载保存MP4的方法

    2021-09-13 06:31:38
  • 如何取得刚添加的记录自动增加的ID?

    2010-01-18 20:55:00
  • asp如何对用户进行授权?

    2009-11-20 18:46:00
  • php下检测字符串是否是utf8编码的代码

    2023-11-15 16:00:59
  • Python列表list内建函数用法实例分析【insert、remove、index、pop等】

    2022-01-13 10:18:24
  • PyTorch基础之torch.nn.CrossEntropyLoss交叉熵损失

    2022-01-12 19:39:19
  • 网页设计之关于素材和言志

    2008-03-23 13:46:00
  • Python使用Django实现博客系统完整版

    2021-02-10 14:43:48
  • 基于PHP RSA密文过长加密解密 越过1024的解决方法

    2023-09-07 02:57:56
  • asp之家 网络编程 m.aspxhome.com