<aside> <img src="notion://custom_emoji/9040cc52-5c24-4c85-8328-7061a24dd7f9/1b0d969b-881f-806e-93ce-007a91128a50" alt="notion://custom_emoji/9040cc52-5c24-4c85-8328-7061a24dd7f9/1b0d969b-881f-806e-93ce-007a91128a50" width="40px" />
requirements.txt → poerty → uv → pyproject.nix
uv 能够管理依赖和虚拟环境,依赖允许来自git仓库https://docs.astral.sh/uv/concepts/projects/dependencies/#changing-dependencies。uv等现代性包管理器利用hash锁定依赖。uv依托python的setuptools编译依赖。
nix的加入允许非特定语言地描述依赖(仅用nix),适用复杂依赖项目且熟悉nix。
https://www.cnblogs.com/wang_yb/p/18635441
</aside>
curl -LsSf <https://astral.sh/uv/install.sh> | sh
工作流:
uv init
uv add numpy pandas
uv tree
uv remove numpy
uv sync
,然后就可以运行mkdir demo && cd demo
uv init
echo "requests" > pyproject.toml
uv sync
.venv\\Scripts\\activate
uv pip list
<aside> <img src="notion://custom_emoji/9040cc52-5c24-4c85-8328-7061a24dd7f9/1c4d969b-881f-80a8-af08-007ac306aa34" alt="notion://custom_emoji/9040cc52-5c24-4c85-8328-7061a24dd7f9/1c4d969b-881f-80a8-af08-007ac306aa34" width="40px" />
. ├── .venv │ ├── bin │ ├── lib │ └── pyvenv.cfg ├── .python-version ├── README.md ├── main.py ├── pyproject.toml └── uv.lock
</aside>
迁移项目
uv add -r requirements.txt
Projectshttps://docs.astral.sh/uv/guides/projects/
# 本地初始化
uv init
# 新建文件夹
uv init new-project-dir
uv run main.py
uv add "git+ssh://[email protected]/leo2www/cvxpy-hahah.git"
uv lock --upgrade-package cvxpy
uv tree
uv remove cvxpy
uv sync
依赖,分组
uv add xxx --group hahah
可选依赖组:
uv add httpx --optional foo
uv sync --extra foo
uv sync --all-extras
dev组默认sync时作为依赖来源;
uv add --group foo
uv sync --no-group foo --group foo
来源于git仓库的组(Github)
uv add git+https://github.com/leo2www/cvxpylayers.git --rev 6d42f2b72dc8584733393f416e77a3913dc84085
单独设计软件源(20250701目前命令行存在设计缺陷)
[project]
。。。
dependencies = [
"torch",
]
[tool.uv.sources]
torch = { index = "pytorch" }
[[tool.uv.index]]
name = "pytorch"
url = "<https://download.pytorch.org/whl/cpu>"
explicit = true
Path As dependency sources
uv remove diffcp
uv add --editable ../projects/bar/
uv pip install -e ./package/diffcp/ -U
https://docs.astral.sh/uv/concepts/projects/dependencies/#path
配合Git Submodule,每个依赖享有单独的git,toml和本地editable调试
uv pip show diffcp
WorkSpace https://docs.astral.sh/uv/concepts/projects/dependencies/#workspace-member
https://github.com/astral-sh/uv/issues/8407#issuecomment-2428964015
WorkSpace 假设 本地不同packages使用同一份 toml配置,子packages 不支持单独的uv.lock
Tools
建议使用nix完成 系统级依赖管理。
The pip interface
完成更精细的控制
# 自动创建并激活虚拟环境,避免nix的不可变python环境
if [ ! -d .venv ]; then
uv venv .venv
fi
source .venv/bin/activate