uv 使用

假设您有一个 Python 3.10 后端应用程序,其中安装了系统范围内的软件包 a2.1、b2.2 和 c2.3。一切运行正常,直到您启动一个新项目,该项目也使用 Python 3.10,但需要 a1.2、b2.2 和 c2.1。安装这些新软件包会导致您的第一个项目出现依赖关系问题,因为 a2.1 和 c2.3 不再可用。如果您启动第三个需要 Python 3.8 的项目,则需要降级 Python,从而导致进一步的冲突。

虚拟环境通过隔离每个项目的依赖关系解决了这些问题,使您可以维护不同的包和 Python 版本而不会发生冲突。虚拟环境是在现有 Python 安装之上创建的独立环境。它在其站点目录中安装了一组独立的 Python 包,并且仅包含来自其基础环境(系统范围的 Python 安装)的包(如果明确指定)。该环境是一次性的,可以根据需要轻松删除和重新创建。

安装uv

要使用 uv 创建虚拟环境,首先需要安装它。根据你的设备,有多种安装方法。如果你使用的是 Linux 或 Mac,可以运行以下命令来安装 uv:

解释

_curl -LsSf https://astral.sh/uv/install.sh | sh

在 Mac 上,您还可以选择通过Homebrew安装 uv :

解释

_brew install uv

在 Windows 上,您可以运行以下命令:

解释

_powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

或者您可以使用 pip 安装 uv:

解释

_pip install uv

安装后,通过运行以下命令在设备上验证 uv:

解释

_uv --version

您将获得如下输出:

解释

输出uv 0.1.44

本教程的其余部分假设您在 Linux 或 Mac 操作系统上操作。

使用 uv 创建项目和虚拟环境

一旦安装了 uv,您需要创建一个项目并安装必要的依赖项:

_mkdir my_uv_project

然后,通过 进入该目录cd my_uv_project。

为你的项目创建虚拟环境相当简单。运行以下命令:

_uv venv my_env

您应该得到与此类似的输出:

输出

user@guest-MacBook-Air my_uv_project % uv venv my_env

Using Python 3.9.6 interpreter at: /Library/Developer/CommandLineTools/usr/bin/python3

Creating virtualenv at: my_env

Activate with: source my_env/bin/activate

可以看到已经创建了Python3.9的环境。

激活您的环境

创建虚拟环境后,需要通过运行以下命令来激活它:

_source my_env/bin/activate

要验证您创建的环境不包含任何包,请运行以下命令:

_uv pip list

您的输出不会列出任何内容,并且您在此环境中安装的任何包或依赖项都将与系统的其余部分隔离。

注意:如果您使用与 Bash 不同的 shell(例如 cmd),您将有不同的激活脚本,例如my_envScriptsactivate.bat。

在您的环境中安装软件包

激活环境后,就该安装一些软件包了。首先,使用以下命令安装pandas :

_uv pip install pandas

您将获得类似如下的输出:

输出

(my_env) user@guest-MacBook-Air my_uv_project % uv pip install pandas

Resolved 6 packages in 143ms

Installed 6 packages in 76ms

  • numpy==1.26.4
  • pandas==2.2.2
  • python-dateutil==2.9.0.post0
  • pytz==2024.1
  • six==1.16.0
    可以看到,pandas 2.2.2 版本已经安装完毕。安装 pandas 时,其他支持包也会一并安装。
    通过运行以下命令来验证您的软件包安装:

_uv pip list

您将获得类似如下的输出:

输出

(my_env) user@guest-MacBook-Air my_uv_project % uv pip list

Package Version


numpy 1.26.4

pandas 2.2.2

python-dateutil 2.9.0.post0

pytz 2024.1

six 1.16.0

tzdata 2024.1

创建第二个虚拟环境

为了测试环境隔离,您需要创建第二个环境,并使用另一个包安装不同版本的 pandas。为此,请执行与上述相同的步骤,创建一个名为 的虚拟环境my_second_env:

_user@guest-MacBook-Air my_uv_project % uv venv my_second_env Using Python 3.9.6 interpreter at: /Library/Developer/CommandLineTools/usr/bin/python3Creating virtualenv at: my_second_envActivate with: source my_second_env/bin/activate

接下来,运行以下命令安装Flask和 pandas 版本 2.1.0:

_my_uv_project % uv pip install pandas2.1.0 flask
安装后,您将获得类似如下的输出:
输出
(my_second_env) user@guest-MacBook-Air my_uv_project % uv pip install pandas2.1.0 flask

Resolved 15 packages in 195ms

Downloaded 2 packages in 4.48s

Installed 15 packages in 93ms

  • blinker==1.8.2
  • click==8.1.7
  • flask==3.0.3
  • importlib-metadata==7.1.0
  • itsdangerous==2.2.0
  • jinja2==3.1.4
  • markupsafe==2.1.5
  • numpy==1.26.4
  • pandas==2.1.0
  • python-dateutil==2.9.0.post0
  • pytz==2024.1
  • six==1.16.0
  • tzdata==2024.1
  • werkzeug==3.0.3
  • zipp==3.19.1
    如您所见,它不包含您在my_env虚拟环境中安装的 pandas 包版本 2.2.2。

使用不同的 Python 版本创建虚拟环境

您还可以使用不同的 Python 版本创建虚拟环境。您之前创建的环境使用的是 Python 3.9。现在,让我们创建一个 Python 3.11 版本的虚拟环境。为此,请执行以下命令:

_uv venv 3rd_env --python 3.11

您将获得与此类似的输出:

输出

Using Python 3.11.5 interpreter at: /Library/Developer/CommandLineTools/usr/bin/python3.11

Creating virtualenv at: 3rd_env

Activate with: source 3rd_env/bin/activate

您可以在这里再次安装 Pandas:

_user@guest-MacBook-Air my_uv_project % source 3rd_env/bin/activate(3rd_env) user@guest-MacBook-Air my_uv_project % uv pip install pandas Resolved 6 packages in 215msDownloaded 2 packages in 2.59sInstalled 6 packages in 72ms + numpy1.26.4 + pandas2.2.2 + python-dateutil2.9.0.post0 + pytz2024.1 + six1.16.0 + tzdata2024.1

在虚拟环境之间切换和删除虚拟环境

要在不同的虚拟环境之间切换,您可以通过运行以下命令来停用第一个虚拟环境:

_deactivate

运行以下命令:

_source my_second_env/bin/activate

如果您现在在项目目录中运行该ls命令,您将看到列出的所有环境:

_user@guest-MacBook-Air my_uv_project % ls 3rd_env my_env my_second_env

如你所见,这些环境就像项目下的常规目录一样创建。如果你想删除一个环境,可以像这样删除环境文件夹:

_rm -rf my_second_env

这将删除您创建的第二个环境。

在项目中安装 requirements.txt

uv pip install -r requirements.txt

参考链接:

https://earthly.dev/blog/python-uv/#top