虚拟环境和包
介绍
Python 应用程序通常会使用标准库中没有的包和模块。应用程序有时需要特定版本的库,因为应用程序可能需要修复特定的bug,或者使用库接口的过时版本编写应用程序。
这意味着一个 Python 安装不能满足每个应用程序的需求。如果应用程序 A 需要特定模块的 1.0 版本,而应用程序 B 需要 2.0 版本,那么需求就会冲突,安装1.0或2.0版本都会让一个应用程序无法运行。
这个问题的解决方案是创建一个虚拟环境,一个自包含的目录树,其中包含针对特定版本 Python 的 Python 安装,以及一些额外的包。
不同的应用程序可以使用不同的虚拟环境。为了解决前面示例的需求冲突,应用程序 A 可以拥有自己的虚拟环境,并安装 1.0 版本,而应用程序 B 拥有另一个虚拟环境,并安装 2.0 版本。如果应用程序 B 需要将库升级到 3.0 版本,这将不会影响应用程序 A 的环境。
创建虚拟环境
用于创建和管理虚拟环境的模块称为 venv。venv 通常会安装最新版本的 Python。如果系统上有多个版本的 Python,可以通过运行 python3 或任何你想要的版本来选择一个特定的 Python 版本。
要创建一个虚拟环境,先确定一个你想要放置它的目录,然后以脚本的形式运行 venv 模块,并指定目录路径:
python -m venv demoenv
复制
如果不存在,这将创建 tutorial-env 目录,并在其中创建包含 Python 解释器副本、标准库和各种支持文件的目录。
虚拟环境中常见的目录位置是 .venv。这个名称通常会将该目录隐藏在 shell 中。它还可以防止与某些工具支持的 .env 环境变量定义文件发生冲突。
一旦创建了虚拟环境,就可以激活它。
在 Windows 上,运行:
demoenv\Scripts\activate.bat
复制
在 Unix 或者 MacOS 上运行:
source demoenv/bin/activate
复制
(这个脚本是为 bash shell 编写的。如果使用 csh 或 fish shell,则有相对应的 activate.csh 和 activate.fish。)
激活虚拟环境将改变 shell 的提示符,显示正在使用的虚拟环境,并修改环境,以便运行 python 将获得 Python 特定版本。例如:
(demoenv) c:\Python310>python
Python 3.10.0 (tags/v3.10.0:b494f59, Oct 4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'c:\\Python310\\python310.zip', 'c:\\Python310\\DLLs', 'c:\\Python310\\lib', 'c:\\Python310', 'c:\\Python310\\lib\\site-packages']
复制
使用 pip 管理包
可以使用一个名为 pip 的程序来安装、升级和删除包。默认情况下,pip 将从 Python 包索引安装包 <https://pypi.org>。可以在浏览器中浏览 Python 包索引。
pip 有许多子命令:“install”、“uninstall”、“freeze” 等。
可以通过指定包的名称来安装最新版本的包:
(demoenv) c:\Python310>python -m pip install pandas
Collecting pandas
Downloading pandas-1.3.5-cp310-cp310-win_amd64.whl (10.2 MB)
|████████████████████████████████| 10.2 MB 227 kB/s
Collecting python-dateutil>=2.7.3
Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
|████████████████████████████████| 247 kB 437 kB/s
Collecting pytz>=2017.3
Downloading pytz-2021.3-py2.py3-none-any.whl (503 kB)
|████████████████████████████████| 503 kB 6.4 MB/s
Collecting numpy>=1.21.0
Downloading numpy-1.22.0-cp310-cp310-win_amd64.whl (14.7 MB)
|████████████████████████████████| 14.7 MB 22 kB/s
Collecting six>=1.5
Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, pytz, python-dateutil, numpy, pandas
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed numpy-1.22.0 pandas-1.3.5 python-dateutil-2.8.2 pytz-2021.3 six-1.16.0
You should consider upgrading via the 'c:\Python310\python.exe -m pip install --upgrade pip' command.
复制
也可以通过在包名后面加上==和版本号来安装一个特定版本的包:
(demoenv) c:\Python310>python -m pip install requests==2.6.0
Collecting requests==2.6.0
Downloading requests-2.6.0-py2.py3-none-any.whl (469 kB)
|████████████████████████████████| 469 kB 364 kB/s
Installing collected packages: requests
Successfully installed requests-2.6.0
复制
如果重新运行这个命令,pip 将注意到请求的版本已经安装,并且不做进一步动作。还可以提供一个不同的版本号来获取那个版本,或者运行 pip install --upgrade 将包升级到最新版本:
(demoenv) c:\Python310>python -m pip install --upgrade requests
复制
pip uninstall 后跟一个或多个包名将从虚拟环境中删除包。
pip show 将显示特定包的信息:
(demoenv) C:\Python310\pyproject>pip show pip
Name: pip
Version: 21.3.1
Summary: The PyPA recommended tool for installing Python packages.
Home-page: https://pip.pypa.io/
Author: The pip developers
Author-email: distutils-sig@python.org
License: MIT
Location: c:\python310\pyproject\demoenv\lib\site-packages
Requires:
Required-by:
复制
pip list 将显示虚拟环境中安装的所有包:
(demoenv) C:\Python310\pyproject>pip list
Package Version
---------- -------
numpy 1.22.0
pip 21.3.1
setuptools 57.4.0
复制
pip freeze 将生成一个类似的已安装包列表,但是使用 pip install 所期望的格式进行输出。一个常见的约定是把这个列表放在 requirements.txt 文件中:
(demoenv) C:\Python310\pyproject>pip freeze > requirements.txt
复制
requirements.txt 可以提交给版本控制部门,并作为应用程序的一部分发布。用户可以使用 install -r 安装所有必要的包:
(demoenv) C:\Python310\pyproject>python -m pip install -r requirements.txt
复制
官方文档:
https://docs.python.org/3.9/tutorial/venv.html