前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 中的虚拟环境变得容易

Python 中的虚拟环境变得容易

作者头像
玖柒的小窝
修改2021-09-13 11:34:16
1.5K0
修改2021-09-13 11:34:16
举报
文章被收录于专栏:各类技术文章~

大多数 Python 新手不知道如何设置遵循专业程序员使用的最新标准的开发环境。本教程将教您如何使用行业公认的最佳实践正确创建一个完整的 Python 开发环境。

虚拟环境

虚拟环境通过创建隔离环境帮助我们解决项目依赖冲突。这些“隔离环境”包含 Python 程序员开发项目可能需要的所有优点。

虚拟环境包括 Python 二进制文件的全新副本,以及整个 Python 标准库的独立副本。这就是它可以自行工作的原因。

使用虚拟环境给我们带来了以下优势:

  • 我们能够完整地维护我们的本地机器包
  • 我们可以通过requirements.txt文件与其他人共享依赖项
  • 我们可以在专用服务器(PythonAnyWhere、Heroku 等)中部署 Python 应用程序

对虚拟环境的需求

我在我的项目中使用了许多库。其中包括三个 Web 应用程序开发框架,还有其他我想在未来探索的库。这是 Python 中严肃项目依赖于其他开发人员编写的其他包的主要论点。

如果您是 Django 开发人员,我相信您会使用Django rest 框架来创建强大的 rest API、用于收集有关当前请求/响应的各种调试信息的Django 调试工具栏、用于处理实时操作和调度的Celery以及等等。

例如,我requests的一些项目非常依赖于该包,而我目前正在开发的 Django Web 应用程序依赖于 2.3.0 版本。根据官方文档,在撰写本文时,此包的最新版本是 3.2 版。

假设我继续在我的 Ubuntu 机器上安装最新版本的库,因为我需要它用于另一个项目。在我尝试使用我的旧项目之前,一切似乎都运行良好,该项目在 2.3.0 中运行良好。突然间,一切都破碎了。

发生了什么?也许最新版本的 Django 的 API 从 2.3.0 版本开始发生了变化?原因在这一点上并不重要,因为我的旧项目已损坏且不再有效。

两个项目之间产生了冲突。它们使用相同的库,但需要不同版本的库。

各种包解决了这个问题。让我们看看一些突出的。

在开始之前

在本教程中,我们将使用 Python 3,因此让我们从检查 Python 安装开始。

为此,请打开一个终端 — Windows 上的 cmd/PowerShell — 并键入以下命令:

代码语言:javascript
复制
python --version

Python 3.9.5 # My result

注意:大多数 macOS 和 Linux 系统都安装了 Python。如果您使用的是 Windows,您可以查看Python 安装指南

如果您没有得到表单的结果,则Python 3.x有两种选择:

  • 如果此命令返回一个Python 2.x版本,则需要python3与本教程一起使用
  • 如果出现Unknown command错误,请尝试运行python3,如果出现其他错误,请按照 Python 安装指南进行操作

您可以python3通过检查其版本来证明二进制文件的存在:

代码语言:javascript
复制
python3 --version

Python 3.9.5

注意:如果上面的命令有效,你需要运行python3而不是python.

既然您知道在您的机器上运行哪个 Python 命令,让我们进入虚拟环境。

内置venv模块

让我们使用内置的 Python venv 模块来创建您的第一个虚拟环境。

注意:要使用此模块,您需要在系统中安装 Python 3.3 或更高版本。

要使用 来创建 Python 虚拟环境venv,请键入以下命令:

代码语言:javascript
复制
python -m venv virt1

注意:该-m标志表示 Python 正在将内置venv模块作为脚本运行。

这将创建一个名为 的虚拟环境virt1,但这只是一个参数。您可以使用您想要的任何名称创建虚拟环境。

virt1目录中安装的所有内容都不会影响全局包或系统范围的安装,从而避免依赖冲突。

激活虚拟环境

重要的是要知道每次我们想要使用创建的虚拟环境时,我们都需要使用以下命令激活它:

代码语言:javascript
复制
source virt1/bin/activate

这不适用于每个系统,因此您可以查看下表以清楚了解要使用的命令:

平台

贝壳

激活虚拟环境的命令

POSIX

bash/zsh

$ source (venv-name)/bin/activate

$ source (venv-name)/bin/activate.fish

csh/tcsh

$ source (venv-name)/bin/activate.csh

PowerShell 核心

$ (venv-name)/bin/Activate.ps1

视窗

命令行工具

C:> (venv-name)\Scripts\activate.bat

电源外壳

PS C:> (venv-name)\Scripts\Activate.ps1

注意:$POSIX 上的符号和Windows 上的C:>,PS C:>符号不是命令的一部分。

您可能会注意到,我在 POSIX(macOS 和 Linux)中使用了 bash shell,这就是我运行上述命令的原因。

创建环境后

一旦虚拟环境被激活,终端提示就会发生一些变化。

活化环境
活化环境

以下命令可让您停用虚拟环境:

代码语言:javascript
复制
deactivate

请注意您的终端提示如何再次更改。

停用环境
停用环境

现在再次激活您的虚拟环境并使用which命令检查正在使用的 Python 二进制文件:

代码语言:javascript
复制
source virt1/bin/activate
which python

如果一切正常,您应该得到类似于以下输出的内容:

代码语言:javascript
复制
/home/daniel/tests/python-tests/venvs/virt1/bin/python

如果您deactivatewhich您还是应该得到不同的结果:

代码语言:javascript
复制
deactivate
/usr/bin/python

这是因为,在虚拟环境中工作时,正在使用放置在该环境中的二进制副本。这同样适用于包。

使用虚拟环境进行 Pip

尽管这不是 pip 指南,但重要的是展示 pip 和虚拟环境之间的工作流程。

pip——其名称代表“Pip Installs Packages”——是一个用于安装和管理 Python 包的包管理器。

当您想将项目分发给其他人时,它非常有用,因为它允许其他开发人员 - 和最终用户 - 一目了然地安装项目的所有依赖项。

例如,开发人员可以激活一个虚拟环境,然后运行以下命令来安装项目的依赖项:

代码语言:javascript
复制
pip install -r requirements.txt

requirements.txt是包含所有项目依赖项的文件 - 包的特定版本。

要生成项目的依赖项文件,您可以运行以下命令:

代码语言:javascript
复制
pip freeze > requirements.txt

如果要安装特定版本的包,可以运行pip install后跟包名、双等号 ( ==) 及其版本:

代码语言:javascript
复制
pip install package==version

在其他情况下,我们也可以从我们的机器(或虚拟环境)中卸载一个包:

代码语言:javascript
复制
pip uninstall some-package-name

虚拟环境

Virtualenv 是一个用于创建虚拟环境的外部包。实际上,Python 内置venv是它的一个子集,因此virtualenv具有比我们看到的第一个选项更多的功能。您可以在官方文档中了解更多关于virtualenv优势venv信息

现在,让我们使用以下命令安装virtualenvpip(确保您已停用前一个venv):

代码语言:javascript
复制
pip install virtualenv

这个工具的工作原理类似于venv,所以让我们通过创建另一个虚拟环境来测试它:

代码语言:javascript
复制
virtualenv virt2

注意:deactivate在运行上述命令之前,请确保您的其他环境。

与 一样venv,我们必须在使用之前激活虚拟环境:

代码语言:javascript
复制
source virt2/bin/activate

如果我现在安装最新版本的请求,它将仅安装在虚拟环境中venv2

代码语言:javascript
复制
pip install requests

上述命令产生以下输出:

代码语言:javascript
复制
Collecting requests
 ...
Installing collected packages: urllib3, idna, chardet, certifi, requests
Successfully installed certifi-2021.5.30 chardet-4.0.0 idna-2.10 requests-2.25.1 urllib3-1.26.5

如果我运行pip freeze打印所有已安装软件包列表的命令,我会得到这个:

代码语言:javascript
复制
certifi==2021.5.30
chardet==4.0.0
idna==2.10
requests==2.25.1
urllib3==1.26.5

如您所见,我获得的唯一包是最新版本的requests (在撰写本文时)及其依赖项。

其他 Virtualenv 功能

我们可以在使用该-p标志的同时virtualenv使用全局安装在机器上的特定版本的 Python。

例如,virt2如果您的机器上安装了 Python3,则可以使用以下命令创建包含 Python3的虚拟环境:

代码语言:javascript
复制
virtualenv -p /usr/bin/python3 virt2

要删除虚拟环境,您可以rm -r像处理要删除的任何其他目录一样使用该命令:

代码语言:javascript
复制
rm -r virt2

您可以在官方文档中了解有关 virtualenv CLI 界面高级用法的更多信息。

虚拟包装器

Virtualenvwrapper提供了非常有用的命令,通过将它们全部组织在一个简单的地方,使使用虚拟环境变得更加容易。

与 virtualenv 一样,它可以通过 pip 轻松安装。

代码语言:javascript
复制
pip install virtualenvwrapper

这将virtualenvwrapper.sh在您的 ~/.local/bin/目录中创建一个 shell 文件。此文件夹用于存储包二进制文件,让您可以直接从终端使用 Python 包。

在使用 virtualenvwrapper 之前,您需要编辑您的 shell 配置文件。由于我使用的是 bash shell,因此我会将以下内容附加到 .bashrc位于我的主目录中的文件中:

代码语言:javascript
复制
cat <<EOT>> ~/.bashrc
# Virtualenwrapper settings
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python
export VIRTUALENVWRAPPER_VIRTUALENV=~/.local/bin/virtualenv
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Documents
source ~/.local/bin/virtualenvwrapper.sh
EOT

这将追加 - 在文件末尾写入 - 上述内容到.bashrc文件中。如果上面的命令不起作用,请打开文件并手动修改它。

VIRTUALENVWRAPPER_PYTHON指向您的计算机的二进制的Python。您可以使用以下命令进行检查(无需激活任何虚拟环境):

代码语言:javascript
复制
which python

/usr/bin/python # My result

确保.bashrc根据您的 Python 二进制路径修改文件。

注意:如果您使用的是 Windows,则可以使用virtualenvwrapper-win

然后,我们.bashrc通过运行以下命令,使用我们对文件所做的更改重新加载 bash shell :

代码语言:javascript
复制
source ~/.bashrc

现在,该mkvirtualenv命令可用于轻松创建默认情况下放置在此文件夹中的新环境:

代码语言:javascript
复制
mkvirtualenv sitepoint

您可以sitepoint通过输入WORKON_HOME路径来查看虚拟环境文件夹,我们在上面定义为$HOME/.virtualenvs

代码语言:javascript
复制
ls ~/.virtualenvs

sitepoint # Virtual env folder

要获取 virtualenvwrapper 创建的所有虚拟环境的列表,您可以workon不带参数运行以下命令:

代码语言:javascript
复制
workon

sitepoint # My result

我们可以借助以下workon命令轻松激活虚拟环境:

代码语言:javascript
复制
workon sitepoint

停用虚拟环境的命令与我们之前使用的命令相同:

代码语言:javascript
复制
deactivate

在不同的虚拟环境之间切换非常容易。例如,到workon另一个虚拟环境:

代码语言:javascript
复制
workon another_virtualenv

要删除虚拟环境,rmvirtualenv应使用以下命令:

代码语言:javascript
复制
rmvirtualenv sitepoint

结论

在本教程中,您了解了每个 Python 开发人员都应该掌握的基本工作流程。虚拟环境是任何协作Python 项目的重要组成部分,您可以通过使用它们立即提高工作效率。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 虚拟环境
    • 对虚拟环境的需求
    • 在开始之前
    • 内置venv模块
      • 激活虚拟环境
        • 创建环境后
          • 使用虚拟环境进行 Pip
          • 虚拟环境
            • 其他 Virtualenv 功能
            • 虚拟包装器
            • 结论
            相关产品与服务
            命令行工具
            腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档