0702-为何我不喜欢使用 uv

uv 是 Python 社区最新最流行的包管理和项目管理工具,主要特点就是快,因为它是基于 Rust 实现的。

最早了解到 uv 大概是 2023 年,在学习 Ruff(一个基于 Rust 的静态代码扫描工具)了解到的,但是由于我习惯使用 pipenv,一直没有在实际项目中用到 uv。

随着看到社区越来越多的项目在使用 uv,我也按赖不住想试一把,结果令我很失望。

uv 在激活虚拟环境之后的一些表现违反直觉。

我创建了一个 test 目录,然后使用 uv venv 创建虚拟环境:

PS C:\Users\Administrator\Desktop\test> uv venv
Using CPython 3.12.10
Creating virtual environment at: .venv
Activate with: .venv\Scripts\activate

根据提示我激活虚拟环境:

PS C:\Users\Administrator\Desktop\test> .venv\Scripts\activate
(test) PS C:\Users\Administrator\Desktop\test>

一切还起来都很和谐,诡异的事情来了。

我经常喜欢用 pip list 查看一下当前环境下存在的包:

(test) PS C:\Users\Administrator\Desktop\test> pip list
Package                Version
---------------------- ---------
aiofiles               0.6.0
aiohttp                3.7.4
annotated-types        0.7.0
anthropic              0.46.0
anyio                  4.9.0
async-timeout          3.0.1
attrs                  25.3.0
beautifulsoup4         4.13.4
cachetools             5.5.2
certifi                2025.4.26
cfgv                   3.4.0
chardet                3.0.4
charset-normalizer     3.4.2
click                  8.2.1
cmd2                   1.5.0
colorama               0.4.6
commonmark             0.9.1
distlib                0.3.9
distro                 1.9.0
einops                 0.8.1
exceptiongroup         1.3.0
filelock               3.18.0
。。。

???为什么我刚创建的虚拟环境,在激活虚拟环境的情况下,会查询出这么多已安装的包。

但问题是我的虚拟环境里面啥也没有:

(test) PS C:\Users\Administrator\Desktop\test> tree /F
卷 系统 的文件夹 PATH 列表
卷序列号为 28D9-05C2
C:.
└─.venv
    │  .gitignore
    │  CACHEDIR.TAG
    │  pyvenv.cfg
    ├─Lib
    │  └─site-packages
    │          _virtualenv.pth
    │          _virtualenv.py
    └─Scripts
            activate
            activate.bat
            activate.csh
            activate.fish
            activate.nu
            activate.ps1
            activate_this.py
            deactivate.bat
            pydoc.bat
            python.exe
            pythonw.exe

难道即使激活的虚拟环境也只能使用 uv pip list 才行,验证一下:

(test) PS C:\Users\Administrator\Desktop\test> uv pip list
(test) PS C:\Users\Administrator\Desktop\test> uv pip install requests
Resolved 5 packages in 4.39s
Prepared 3 packages in 361ms
Installed 5 packages in 13ms
 + certifi==2025.6.15
 + charset-normalizer==3.4.2
 + idna==3.10
 + requests==2.32.4
 + urllib3==2.5.0
(test) PS C:\Users\Administrator\Desktop\test> uv pip list
Package            Version
------------------ ---------
certifi            2025.6.15
charset-normalizer 3.4.2
idna               3.10
requests           2.32.4
urllib3            2.5.0

好吧,还真是这样,行吧,我忍了。

那之前使用 pip list 查出这么多包,里面有 marker,试试在激活虚拟环境的情况下,是否能使用 marker

(test) PS C:\Users\Administrator\Desktop\test> marker --help
Usage: marker [OPTIONS] IN_FOLDER

Options:
  --chunk_idx INTEGER             Chunk index to convert
  --num_chunks INTEGER            Number of chunks being processed in parallel
  --max_files INTEGER             Maximum number of pdfs to convert
  --workers INTEGER               Number of worker processes to use.
  --skip_existing                 Skip existing converted files.
  --debug_print                   Print debug information.
  --max_tasks_per_worker INTEGER  Maximum number of tasks per worker process.
  ...

竟然能用,我服了,这我实在受不了,太不符合直觉了。😅

当然,咱们有一说一,除了上面这个问题,只要咱老老实实遵循所有命令都 uv 打头,还是能用的,就是命令不能补全。

(test) PS C:\Users\Administrator\Desktop\test> uv run mar

这个时候按 Tab 根本无法补全,有点烦人。😰

所以我还是用回我的 pipenv 吧!😴