Python入门教程第76篇 Python虚拟环境

Posted 不剪发的Tony老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门教程第76篇 Python虚拟环境相关的知识,希望对你有一定的参考价值。

本篇将会介绍 Python 虚拟环境(virtual environment)相关的概念。

为什么需要 Python 虚拟环境

Python 会将所有的系统包安装在一个目录中,这个目录在安装 Python 时指定。通常来说,大多数系统包位于 sys.prefix 指定的目录中。我们可以使用 sys 模块查看这个目录路径:

>>> import sys
>>> sys.prefix
'C:\\\\Users\\\\tony\\\\AppData\\\\Roaming\\\\Python\\\\Python310'

当我们使用 pip 安装第三方包时,Python 会将这些包安装在另一个文件夹中,可以通过 site.getsitepackges() 函数查看:

>>> import site
>>> site.getsitepackages()

返回结果如下:

['C:\\\\Users\\\\tony\\\\AppData\\\\Roaming\\\\Python\\\\Python310', 
'C:\\\\Users\\\\tony\\\\AppData\\\\Roaming\\\\Python\\\\Python310\\\\lib\\\\site-packages']

对于这种方式,如果我们的项目只需要标准库时不会有任何问题。但是,如果某些项目需要使用第三方包时,可能会存在问题。例如,我们有两个项目,它们需要使用某个库的不同版本。由于第三方包的保存目录只有一个,我们无法同时安装一个包的两个不同版本。

当然,我们可以使用 pip 安装/卸载不同版本的包实现版本切换。但是这种方法非常浪费时间,不具有可扩展性。为此,我们需要使用虚拟环境。

什么是 Python 虚拟环境

Python 使用虚拟环境为每个项目创建一个隔离的环境。也就是说,每一个项目都有一个自己的目录,用于存储第三方包。

如果多个项目依赖某个包的不同版本,我们可以将不同版本存在到单独的目录(虚拟环境)中。

Python 3 中的虚拟环境包(venv)是一个标准库,pipenv 工具可以用于创建一个新的虚拟环境。

Windows 平台安装 pipenv

下面我们介绍如何在 Windows 操作系统中安装 pipenv 工具,其他操作系统下的安装也类似。

首先,使用以下命令安装 pipenv 工具:

pip install pipenv

然后,将以下路径添加到 PATH 环境变量,username 是你的操作系统用户名:

c:\\Users\\username\\AppData\\Roaming\\Python\\Python310\\Site-Packages
C:\\Users\\username\\AppData\\Roaming\\Python\\Python310\\Scripts

修改 PATH 环境变量之后,关闭并重新打开命令行提示符。

接着输入以下命令检查 pipenv 是否安装成功:

pipenv -h

如果安装成功,将会返回以下信息:

Usage: pipenv [OPTIONS] COMMAND [ARGS]...
...

如果显示下面的信息:

pipenv shell 'pipenv' is not recognized as an internal or external command, operable program or batch file.

我们需要检查 PATH 环境变量的设置是否正确。

使用 pipenv 配置虚拟环境

下面我们使用 pipenv 工具为项目配置一个新的虚拟环境。

首先,创建一个新的项目目录,例如 crawler。

然后,在命令行提示符中切换到 crawler 目录并使用下面的命令安装 requests 包:

pipenv install requests

安装过程如下:

Creating a Pipfile for this project…
Installing requests…
Adding requests to Pipfile's [packages]…
Installation Succeeded
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Locking...Building requirements...
Resolving dependencies...
Success!
Updated Pipfile.lock (fbd99e)!
Installing dependencies from Pipfile.lock (fbd99e)================================ 0/0 - 00:00:00

pipenv 创建了两个新的文件 Pipfile 和 Pipfile.lock,并且基于这些文件创建了一个新的虚拟环境。

如果我们查看项目目录,不会看到虚拟环境目录。我们可以使用下面的命令查看虚拟环境目录:

pipenv --venv

它会显示类似下面的信息:

C:\\Users\\username\\.virtualenvs\\crawler-7nwusESR

然后,在项目目录中创建一个新的 app.py 文件,输入以下代码:

import requests

response = requests.get('https://www.python.org/')
print(response.status_code)

我们在上面的代码中导入了第三方模块 requests,使用其中的 get() 函数发送 HTTP 请求并显示了返回的状态码。

接下来,在命令行中调用 python 命令运行 app.py 文件:

python app.py

它会返回以下错误信息:

ModuleNotFoundError: No module named 'requests'

错误的原因在于 Python 无法定位新的虚拟环境。为此,我们需要激活这个虚拟环境。

以下命令可以用于激活新的虚拟环境:

pipenv shell

再次运行 app.py 文件:

python app.py

输出结果如下:

200

状态码 200 表示 HTTP 请求成功。

最后,使用 exit 命令退出虚拟环境:

exit

总结

  • Python 虚拟环境为项目创建了一个隔离的环境。
  • 使用 pipenv 工具管理虚拟环境。

以上是关于Python入门教程第76篇 Python虚拟环境的主要内容,如果未能解决你的问题,请参考以下文章

从入门到自闭之Python--虚拟环境如何安装

Python入门(目录全览)

Python入门教程第02篇 安装Python

python应用篇之Web应用程序——Django入门(中)

python虚拟环境virtualenv高级篇

Day 1 - Flask - 第一个 Flask Web 程序