Python 虚拟环境: 如何创建、激活、停用和删除?

file

Python虚拟环境允许您将Python包安装在与系统其他部分隔离的位置,而不是在系统范围内安装。

为什么要使用Python 虚拟环境

防止版本冲突

您会认为在系统范围内安装第三方软件包是非常有效的。毕竟,您只需要安装一次,就可以使用多个Python项目中的包,为您节省了宝贵的时间和磁盘空间。然而,这种方法有一个问题,可能会在几周或几个月后开始出现。

假设您的项目project A是针对库X的特定版本编写的。将来,您可能需要升级库X。例如,您启动的另一个项目project B需要最新版本。您将库X升级到最新版本,项目B运行良好。太棒了但一旦你这样做了,你的Project A代码就坏得很厉害。毕竟,API在主要版本升级时可能会发生重大变化。

虚拟环境通过将您的项目与其他项目和系统范围的包隔离来解决此问题。您可以在此虚拟环境中专门为正在处理的项目安装程序包。

易于复制和安装

虚拟环境使您可以轻松定义和安装特定于项目的软件包。使用requirements.txt文件,您可以为所需的包定义确切的版本号,以确保您的项目始终使用经过代码测试的版本。这也有助于您的软件的其他用户,因为虚拟环境可以帮助其他用户复制您的软件所针对的确切环境。

适用于任何地方,即使不是管理员(root)

如果你在共享主机上工作,比如大学或网络托管提供商的主机,你将无法安装系统范围的软件包,因为你没有管理员权限。在这些地方,虚拟环境允许你在项目中本地安装任何你想要的东西。

虚拟环境与其他方式比较

还有其他选项可以隔离您的项目:

  • 在linux系统上创建不同的用户,通过用户隔离

  • 接下来是容器化,比如Docker和Kubernetes。这些可能非常强大,是一个很好的替代方案。

尽管如此,在许多情况下,我们只是在创建小项目或一次性脚本。或者您可能只是不想将应用程序容器化。毕竟,这是你需要学习和理解的另一件事。无论是什么原因,虚拟环境都是隔离项目依赖关系的好方法。

如何创建Python 虚拟环境

有几种方法可以创建Python虚拟环境,具体取决于您运行的Python版本。

Python 3.4 and above

python -m venv <directory>

这个命令在指定的目录中创建一个venv,并将pip复制到其中。如果你不确定该怎么称呼这个目录:venv是一个常见的选项;它不会让任何人猜测它是什么。因此,在这种情况下,命令将变成:

python -m venv venv

其他版本Python

pip install virtualenv
virtualenv [directory]

Python 虚拟环境激活

Windows 虚拟环境激活

### In cmd.exe
venv\Scripts\activate.bat
# In PowerShell
venv\Scripts\Activate.ps1

Linux and MacOS 虚拟环境激活

$ source myvenv/bin/activate

停用Python 虚拟环境

一旦你完成了你的项目,停用它的venv是一个好习惯。通过停用,您将离开虚拟环境。在不停用venv的情况下,您执行的所有其他Python代码,即使在项目目录之外,也将在venv内运行。
幸运的是,停用虚拟环境再简单不过了。只需输入以下内容:停用。它在所有操作系统上都能正常工作。

删除Python虚拟环境

您可以完全删除虚拟环境,但如何删除取决于您用来创建venv的内容。

  • 删除使用Virtualenv或 python -m venv
deactivate
# If your virtual environment is in a directory called 'venv':
rm -r venv
  • 删除带有Pipenv
pipenv --rm

Python 虚拟环境的工作原理

激活虚拟环境时,PATH变量会发生更改。在Linux和MacOS上,您可以通过打印带有echo$path的路径来亲眼看到它。在Windows上,使用echo%PATH%(在cmd.exe中)或$Env:PATH(在PowerShell中)。在我的情况下,在Windows上,它看起来是这样的:

file

当您输入在当前工作目录中找不到的命令时,操作系统会开始查看PATH变量中的所有路径。Python也是如此。导入库时,Python会在PATH中查找库位置。这就是我们的venv魔法发生的地方:如果你的venv在所有其他路径之前,操作系统会先查看那里,然后再查看/usr/bin等系统范围的目录。因此,我们的venv中安装的任何东西都是先找到的,这就是我们可以覆盖系统范围的包和工具的方式。

Linux ifconfig命令详解
ChatGPT 常用Prompt模板
标签:

发表我的评论

电子邮件地址不会被公开。 必填项已用*标注

81 + 33 =

ajax-loader