概述
Python 应用经常使用标准库以外的包和模块。有时,应用需要某个库的特定版本:可能必须使用修复了某个缺陷的版本,也可能程序使用的是这个库的旧接口。
因此,同一套 Python 安装未必能满足所有应用。如果应用 A 需要某个模块的 1.0 版,而应用 B 需要 2.0 版,就会发生依赖冲突。安装任何一个版本,都可能让另一应用无法运行。
解决办法是创建虚拟环境:一个独立的目录树,其中包含某个特定版本的 Python 安装和一组额外的软件包。
不同应用可以使用不同的虚拟环境。应用 A 在自己的环境里安装 1.0 版,应用 B 在另一个环境里安装 2.0 版。如果应用 B 后来需要升级到 3.0 版,也不会影响应用 A 的环境。
创建虚拟环境
创建和管理虚拟环境的模块叫做 venv。它使用执行该命令的 Python 版本,也就是 --version 报告的版本。例如,用 python3.12 执行命令,创建的环境就使用 Python 3.12。
先确定环境目录,再以脚本方式运行 venv,传入目录路径:
python -m venv tutorial-env
如果 tutorial-env 不存在,命令会创建该目录,并在其中建立子目录,放置 Python 解释器的副本及相关支持文件。
常用目录名是 .venv。这个名称通常让目录在终端中隐藏,既不碍事,又能说明用途;它还避免与某些工具使用的 .env 环境变量文件重名。
创建之后,可以激活环境。在 Windows 上,执行:
tutorial-env\Scripts\activate
在 Unix 或 macOS 上,执行:
source tutorial-env/bin/activate
这里的脚本用于 Bash。如果使用 csh 或 fish,应改用 activate.csh 或 activate.fish。
激活会修改终端提示符,显示当前使用的虚拟环境,并调整运行环境,使 python 指向这套特定版本的 Python 安装。例如:
$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May 6 2016, 10:59:36)
...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>
激活不会修改 PYTHONPATH。如果这个变量引用了与环境中 Python 版本不兼容的代码,仍可能发生意外。最佳做法是在 Bash 中执行 unset PYTHONPATH,或使用当前 shell 的等效命令。
退出虚拟环境时,在终端输入:
deactivate
使用 pip 管理包
可以通过 pip 安装、升级和卸载软件包。默认情况下,它从 Python Package Index(PyPI) 安装包;也可以在浏览器中浏览 PyPI。
pip 提供 install、uninstall、freeze 等子命令。完整说明见 安装 Python 模块。
直接指定包名,可以安装最新版本:
(tutorial-env) $ python -m pip install novas
Collecting novas
Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
Running setup.py install for novas
Successfully installed novas-3.1.1.3
在包名后添加 == 和版本号,可以安装特定版本:
(tutorial-env) $ python -m pip install requests==2.6.0
Collecting requests==2.6.0
Using cached requests-2.6.0-py2.py3-none-any.whl
Installing collected packages: requests
Successfully installed requests-2.6.0
再次运行相同命令,pip 会发现指定版本已经安装,不再执行安装。可以指定不同版本,也可以加上 --upgrade,升级到最新版本:
(tutorial-env) $ python -m pip install --upgrade requests
Collecting requests
Installing collected packages: requests
Found existing installation: requests 2.6.0
Uninstalling requests-2.6.0:
Successfully uninstalled requests-2.6.0
Successfully installed requests-2.7.0
python -m pip uninstall 后接一个或多个包名,可以从虚拟环境中卸载它们。
python -m pip show 显示某个包的信息:
(tutorial-env) $ python -m pip show requests
---
Metadata-Version: 2.0
Name: requests
Version: 2.7.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.com
License: Apache 2.0
Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
Requires:
python -m pip list 列出环境中安装的全部包:
(tutorial-env) $ python -m pip list
novas (3.1.1.3)
numpy (1.9.2)
pip (7.0.3)
requests (2.7.0)
setuptools (16.0)
python -m pip freeze 也会生成已安装包的列表,但采用 python -m pip install 能够读取的格式。常见做法是将列表写入 requirements.txt:
(tutorial-env) $ python -m pip freeze > requirements.txt
(tutorial-env) $ cat requirements.txt
novas==3.1.1.3
numpy==1.9.2
requests==2.7.0
随后可将 requirements.txt 提交到版本控制系统,作为应用的一部分分发。用户使用 install -r 安装全部所需软件包:
(tutorial-env) $ python -m pip install -r requirements.txt
Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
...
Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
...
Collecting requests==2.7.0 (from -r requirements.txt (line 3))
...
Installing collected packages: novas, numpy, requests
Running setup.py install for novas
Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0
pip 还有许多选项,详情见 安装 Python 模块。如果编写了软件包并希望发布到 PyPI,参阅 Python Packaging User Guide。
版本、来源与许可
原文:Virtual Environments and Packages,Python 3.14.8 文档,核对日期 2026-10-03。中文内容依据英文全文重新表述,并对照 官方中文版本。变更为中文翻译、标题调整及本段版本说明。
示例中的 Python 3.5.1、requests 2.6.0/2.7.0、pip 7.0.3 等版本及输出是原文保留的历史演示,不是当前推荐版本,也不是本译稿的运行记录。Windows 激活示例按原文保留,PowerShell 使用不同的激活脚本。本次仅进行文字和代码对照,未运行命令。
Copyright © 2001 Python Software Foundation; All Rights Reserved。正文使用 Python Software Foundation License Version 2。文档示例、配方和其他代码还使用 Zero-Clause BSD License。随交接包保留完整 PSF 许可证原文。











暂无评论内容