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 吧!😴