介绍
什么是 Python 虚拟环境
何时使用带有 Python 的虚拟环境
设置 Python 虚拟环境
先决条件
检查当前包列表
设置 GitHub 存储库
克隆 GitHub 存储库
创建虚拟环境
激活和停用虚拟环境
在虚拟环境中安装包
在虚拟环境中删除包
Python 示例脚本
Pip 冻结和 Requirements.txt 文件
将项目推送到 GitHub
部署到新文件夹
参考
介绍
在本文中,我将介绍在 Linux 或 macOS 上为项目设置 python 虚拟环境的步骤。

到本文结束时,涵盖的主题将是:

使用python设置虚拟环境。
创建一个使用虚拟环境的简单 python 项目(向网站发出 HTTP 请求)。
将项目推送到 GitHub 存储库。
将项目从 GitHub 部署到新文件夹并部署新的虚拟环境
什么是 Python 虚拟环境
在使用 Python 开发应用程序/程序时,开发人员通常需要安装一组包形式的依赖项。其中一些包含在 python 中,而另一些则通过 pip 等工具安装。

python 虚拟环境用于:

隔离项目使用的依赖项。
通过这种方式,它可以将在系统级别安装的软件包保持在最低限度,从而保持干净、整洁和 .
指定要使用的特定版本的 python。
使项目可在不同系统之间传输。
现在,您可能会问为什么需要指定要使用的 python 版本?原因是有些包可能只适用于特定版本的 python。

例如,假设发布了一个新版本的 python,然后将其安装在系统上。模块可能无法在该版本上工作,因为它可能尚未更新以使用它,因此可能会导致意外问题。

另一个原因是供应商可能会声明他们的解决方案需要特定版本的 python 才能运行,并且将要运行的系统可能为不同的产品或项目安装了多个版本的 python。

何时使用带有 Python 的虚拟环境
建议为每个项目使用虚拟环境。现在,在某些情况下,这会浪费时间,例如,print(“Hello World!”)但它们很少见。就个人而言,如果你在学习 python 时早点习惯使用它们,那么习惯就会形成,这对你来说就像是第二天性。

设置 Python 虚拟环境
先决条件
在使用 python 虚拟环境之前,您需要:

安装了 python 版本,以及 3.5 或更高版本的 pip。
终端应用程序,例如内置于您的操作系统中的应用程序或第三方应用程序,例如 iTerm2。
您已在终端级别登录的 GitHub 帐户。
安装了 GitHub 和 git 命令行工具,并且都已登录。
作为参考,本文使用 python 3.10.4。

检查当前包列表
要做的第一件事是获取当前在操作系统级别安装了哪些软件包的基线。这意味着安装了可以在不使用虚拟环境的情况下使用的 python 包。要查看安装了哪些包,请运行以下命令:

pip list

输出将类似于以下内容(您的列表可能会有所不同)

Package            Version
------------------ ---------
boto3              1.23.7
botocore           1.26.7
certifi            2022.6.15
charset-normalizer 2.0.12
distlib            0.3.4
filelock           3.7.0
idna               3.3
jmespath           1.0.0
pip                22.1.1
platformdirs       2.5.2
python-dateutil    2.8.2
requests           2.28.0
s3transfer         0.5.2
setuptools         60.10.0
six                1.16.0
urllib3            1.26.9
wheel              0.37.1

这是系统级别可用的已安装软件包列表。

设置 GitHub 存储库
下一步是创建一个 GitHub 存储库来存储项目。打开您的终端应用程序并运行以下命令,将 {repo-name} 更改为最适合您的任何内容:

gh repo create {repo-name} \
                --public \
                --gitignore python

这将创建一个新的公共存储库,其中包含一个 gitignore 文件,GitHub 已预先填充了一些默认文件和文件夹,这些文件和文件夹通常与 python 一起使用,不需要存储在存储库中。我们稍后将使用的虚拟环境文件夹名称列在此文件中,因此您不会将稍后安装的任何包推送到您的 GitHub 存储库。

克隆 GitHub 存储库
现在您已经设置了 GitHub 存储库,您需要将其克隆到计算机上的文件夹中。您可以通过多种方式执行此操作,但对于本指南,我将列出两种方式,一种使用 gh 命令,另一种使用 git 命令。

首先,转到计算机上要存储项目文件的位置。对于这个例子,我将使用 Downloads 文件夹(这是在 macOS 上,所以如果你在 Linux 上,它可能位于其他地方)。

cd ~/Downloads

接下来,您需要从 GitHub 克隆存储库。您可以使用以下两个命令之一:

使用 gh 命令(将 {username} 更改为您的 GitHub 用户名并将 {repo-name} 更改为您的存储库名称):

gh repo clone {username}/{repo-name}

使用 git 命令(将 {username} 更改为您的 GitHub 用户名,将 {repo-name} 更改为您的存储库名称):

git clone https://github.com/{username}/{repo-name}.git

克隆存储库后,您可以进入它创建的目录,该目录与存储库名称相同:

cd {repo-name}

创建虚拟环境
现在您已经将存储库存储在本地,您现在可以为您的 Python 项目创建一个虚拟环境。要创建一个,请运行以下命令:

python3 -m venv venv

该命令将创建一个名为 venv 的新文件夹。现在,上面命令中的第二个 venv 是文件夹的名称,它将存储与虚拟环境相关的所有内容。您可以更改它,但它是行业中使用的典型名称,可以清楚地表明它是什么,因此最好保持原样。

此虚拟环境将使用操作系统默认的 python 版本。如果你想使用不同的版本,你可以通过在 python 命令中指定版本号来实现。例如:

python3.9 -m venv venv

当您在另一个系统上使用该项目时,您需要确保它安装了相同版本的 python,并且您在重新创建虚拟环境时指定了该版本。

激活和停用虚拟环境
创建虚拟环境后,现在需要激活它。如果你不激活它,那么当你安装一个包时,它将在系统级别安装。

要激活它,请运行以下吗命令

source ./venv/bin/activate

现在,根据您如何(或是否)自定义您的终端,您应该会看到 venv 出现在您的命令提示符中。在默认的 bash 或 zsh 终端上,它应该如下所示。

庆典:

(venv) bash-5.1$ _

zsh:

(venv) user@My-MacBook-Pro project _

虚拟环境现在处于活动状态。要检查这一点,您可以pip list再次运行该命令。您会注意到该列表与以前不同。对于典型的新虚拟环境,您应该会看到列出的 pip 和 setuptools。

如果需要退出虚拟环境,deactivate在命令行运行。您会看到 (venv) 不再显示在您的命令提示符中。您可以通过source ./venv/bin/activate再次运行命令来重新激活它。

此外,如果您关闭终端,这也会停用虚拟环境。

现在,请确保虚拟环境处于活动状态。

在虚拟环境中安装包
将包安装到 python 虚拟环境中,这是一个非常漫长而复杂的过程。只是在开玩笑!这与通常安装软件包没有什么不同。运行以下命令,它将使用 pip 安装请求和 zipp 包:

pip install requests zipp -y

该-y标志将安装软件包而不询问您是否要继续。

安装完成后,pip list再次运行,您应该会看到安装了这两个包,以及一些作为 requests 和 zipp 包的依赖项安装的其他包。它应该类似于以下内容:

(venv) bash-5.1$ pip list
Package            Version
------------------ ---------
certifi            2022.6.15
charset-normalizer 2.0.12
idna               3.3
pip                22.0.4
requests           2.28.0
setuptools         60.10.0
urllib3            1.26.9
zipp               3.8.0

上面列出的包将与任何其他 python 虚拟环境和系统隔离。这意味着如果您不使用虚拟环境并尝试使用 requests 包/模块,除非您将其安装到该环境中,否则它将无法工作。

在虚拟环境中删除包
删除包与安装包非常相似,但您需要使用 uninstall 来代替。运行以下命令卸载 zipp 包,因为它不会被使用:

pip uninstall zipp -y

卸载完成后,pip list再次运行,您应该会看到不再列出 zipp 包。

(venv) bash-5.1$ pip list

Package            Version
------------------ ---------
certifi            2022.6.15
charset-normalizer 2.0.12
idna               3.3
pip                22.0.4
requests           2.28.0
setuptools         60.10.0
urllib3            1.26.9

Python 示例脚本
现在安装了 requests 包,让我们使用它。但是它有什么作用呢?

requests 包用于向网站发出 HTTP / HTTPS 请求,并将页面内容作为原始 HTML 返回。它可以做很多其他事情,但您将使用它来发出简单的 HTTP / HTTPS 请求。

首先,运行 nano 文本编辑器并创建一个名为 main.py 的文件:

nano main.py

进入 nano 后,将以下内容复制并粘贴到 nano 中(如果需要,可以将 url 变量的内容更改为不同的站点):

# --- Import the required modules:
from requests import request
from pprint import pprint

# --- Define the variables used
url = "https://www.mirrorservice.org/"
get_request = request(url=url, method="GET")

# --- Show the HTML of the page
pprint(get_request.text)

# --- Show the status code of the request (200 is OK)
print(f"\nHTTP Response Code Is: {get_request.status_code}")

要保存文件,请按住 CTRL 并按 x。当询问是否保存缓冲区时按 y。当要求输入文件名时按回车键。

现在,这将带您离开 nano 并返回到命令提示符。

要查看应用程序的功能,请运行以下命令:

python3 main.py

结果应该是一堆 HTML 和底部的一行声明HTTP Response Code Is: 200.

Pip 冻结和 Requirements.txt 文件
到目前为止,您已经创建了一个虚拟环境,安装了 requests 和 zipp 包,卸载了 zipp 包并创建了一个脚本来使用 requests 包获取网页的 HTML 内容及其 HTTP 响应代码。

下一步是开始使应用程序可移植到另一个系统。首先,您需要获取虚拟环境中安装的所有包的列表,并将它们放在一个文本文件中。

这样做的原因是我们不复制虚拟环境。相反,您在目标系统上重新创建它。一个原因是添加大量的package到GitHub上push的时间会比较长,而且push到GitHub的时候也会出现soft capacity limit warnings。

要获取已安装包的列表并将它们放入文本文件中,您将使用 pip freeze 命令。要创建文件,请运行以下命令:

pip freeze > requirements.txt

您将看到一个名为 requirements.txt 的新文件出现。如果你打开它,它看起来类似于下图:

certifi==2022.6.15
charset-normalizer==2.0.12
idna==3.3
requests==2.28.0
urllib3==1.26.9

该文件包含安装在虚拟环境中的每个包的名称和版本。这将允许您在另一个系统上部署项目,并在安装它们时使用完全相同版本的包。稍后会详细介绍那部分。

在典型的项目开发过程中,您可能需要在创建 requirements.txt 文件后添加其他包。作为一个好的做法,我建议删除 requirements.txt 文件并在安装新包时重新创建它,这样以后就不会丢失依赖项。

将项目推送到 GitHub
项目完成并创建 requirements.txt 文件后,现在可以将文件推送到您的 GitHub 存储库。为此,请运行以下命令:

git add --all
git commit -m "Version one of project completed."
git push

这些文件现在将出现在您的 GitHub 存储库中。

部署到新文件夹
对于最后一步,您将使用计算机上的不同文件夹对另一个系统执行模拟部署。执行此操作的步骤基本上是您已经完成的一些小调整:

转到要存储项目文件的位置。如果需要,创建一个新文件夹。
克隆 GitHub 存储库,方法与之前相同。
进入那个文件夹。
像以前一样创建一个新的虚拟环境。
再次激活虚拟环境,方法与之前相同。
这次唯一的区别不是使用pip install {package-1} {package-2} {package-3},您可以使用 requirements.txt 文件来批量安装用于开发项目的每个包的版本。为此,请运行以下命令:

pip install -r requirements.txt

如果您随后运行pip list,您将看到所有安装的包都像以前一样安装。然后您可以再次运行python3 main.py,结果是相同的(尽管该页面可能已被网站维护者更新)。

如果您要部署到另一个系统,唯一不同的是首先连接到该系统,通常是通过 Linux 上的 SSH,然后执行上述步骤。确保在用于开发项目的系统上安装了 python 版本。

这总结了如何使用 python 的虚拟环境。
如果你喜欢我的文章,记得关注获取更多的信息。感谢您的阅读。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐