Python - 虚拟环境 venv

本文介绍了Python虚拟环境的作用,如何创建、激活和管理venv,以及为何使用它来解决项目依赖版本不一致和包冲突问题。重点讲解了虚拟环境的结构和如何从虚拟环境中生成requirement.txt以保持依赖清晰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是虚拟环境

  • 这是 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 文件就只包含虚拟环境中已安装的依赖包了!

包管理利器 popety

TODO

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菠萝测试笔记

来支持下测试小锅锅

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值