Python 虚拟环境 venv 详解:创建、管理与依赖隔离

宋时安
宋时安
发布时间:2026-10-15| 5人浏览过
原创

本文详解Python 3.3+内置的venv模块,阐述虚拟环境在解决多项目依赖冲突、版本隔离中的核心作用。涵盖从命令行创建激活虚拟环境,到PyCharm图形界面配置Interpreter的完整流程,并解析虚拟环境目录结构及利用pip freeze生成精准requirements.txt的方法,助力开发者实现干净、独立的项目依赖管理。

虚拟环境(Virtual Environment)是Python开发中用于隔离项目依赖的重要机制。

  • 该功能作为Python 3.3版本的新特性引入,相关规范可参考PEP 405: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版本,操作繁琐且易出错。
  • 若所有项目依赖均安装在同一环境下,生成项目的requirements.txt文件时,将包含大量当前项目不需要的依赖包。此时需手动逐一删除无用依赖,效率低下且易遗漏。

通过venv操作虚拟环境

自Python 3.5版本起,官方推荐使用venv模块来创建和管理虚拟环境。

创建虚拟环境


python3 -m venv fastapi_test

上述命令中的fastapi_test为虚拟环境名称,用户可根据实际需求自定义命名。

激活虚拟环境


source <环境名称>/bin/activate 

激活后,可观察到虚拟环境中仅包含最基础的pip和setuptools包,其他系统级包不可见。

关闭虚拟环境


deactivate

在PyCharm中关联新创建的虚拟环境

首先需在项目所在目录下预先创建好虚拟环境。

在PyCharm设置中,将Python Interpreter(Python解释器)指向已创建的虚拟环境。

随后在虚拟环境中安装项目所需的第三方库。

在PyCharm中直接创建虚拟环境

  • 进入Python Interpreter设置界面。
  • 点击“查看更多 Interpreters”选项。
  • 选择“添加新的 Interpreters”。
  • 选择“New environment”(新环境),保持默认选项即可,点击确定完成创建。

查看虚拟环境的目录结构

通过对比可知,不同名称的虚拟环境目录结构基本一致。

bin目录

包含与虚拟环境交互的可执行文件,如激活脚本和Python解释器链接。


>> 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

从虚拟环境生成requirements.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  

通过上述操作生成的requirements.txt文件,将仅包含当前虚拟环境中实际安装的依赖包,确保依赖清单的精准性。

其他包管理工具如poetry也可用于依赖管理

待补充

至此,关于Python虚拟环境venv的详解介绍完毕。如需了解更多Python虚拟环境相关内容,请搜索本站历史文章或继续浏览后续文章,感谢大家的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。