$ cat .\uv.lock version = 1 requires-python = ">=3.12" [[package]] name = "myproject" version = "0.1.0"source = { virtual = "." } dependencies = [ { name = "pandas" }, ] [package.metadata] requires-dist = [{ name = "pandas", specifier = ">=2.2.3" }] [[package]] name = "pandas" version = "2.2.3"source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "python-dateutil" }, { name = "pytz" }, { name = "tzdata" }, ] [[package]] name = "pytz" version = "2024.2"source = { registry = "https://pypi.org/simple" }
上面的日志中我删除了很多内容,因为整体内容太多,详细记录了每个包以及它依赖的包的情况。
uv.lock这个文件我们不要手动去编辑它,使用uv工具去管理它。
引入了pandas之后,我们看看是否可以在hello.py中使用。
1
$ cat .\hello.py import pandas as pd def main(): print("Hello from myproject!") df = pd.DataFrame( { "A": [1, 2, 3], "B": [4, 5, 6], } ) print(df) if __name__ == "__main__": main() $ uv run .\hello.py Hello from myproject! A B 0 1 4 1 2 5 2 3 6
可以正常使用安装的包pandas,下面在试试删除依赖会怎么样。
1
$ uv remove pandas Resolved 1 package in 12ms Uninstalled 6 packages in 1.18s - numpy==2.2.1 - pandas==2.2.3 - python-dateutil==2.9.0.post0 - pytz==2024.2 - six==1.17.0 - tzdata==2024.2 $ cat .\uv.lock version = 1 requires-python = ">=3.12" [[package]] name = "myproject" version = "0.1.0"source = { virtual = "." }
使用uv remove命令删除pandas包之后,也会自动删除pandas依赖的其他包,
我们看到uv.lock 文件也恢复到最初的内容。
再试试运行hello.py看看。
1
$ uv run .\hello.py Traceback (most recent call last): File "D:\projects\python\myproject\hello.py", line 1, in <module> import pandas as pd ModuleNotFoundError: No module named 'pandas'
果然,无法运行了。
3.4. 区分开发和生产环境
还有一个比较常用的功能是区分开发环境和生产环境的依赖,这个功能在NodeJS和Rust中很常见。
比如,我们想把pandas安装到开发环境中,而把requests安装到生产环境中。
1
$ uv add --group dev pandas Resolved 7 packages in 1.72s Installed 6 packages in 1.39s + numpy==2.2.1 + pandas==2.2.3 + python-dateutil==2.9.0.post0 + pytz==2024.2 + six==1.17.0 + tzdata==2024.2 $ uv add --group production requests Resolved 12 packages in 2.72s Prepared 5 packages in 1.31s Installed 5 packages in 68ms + certifi==2024.12.14 + charset-normalizer==3.4.1 + idna==3.10 + requests==2.32.3 + urllib3==2.3.0
安装之后,uv.lock 文件自动添加了各个包及其依赖,这里不再赘述。
从项目的pyproject.toml中可以看出不同环境的包依赖。
1
$ cat .\pyproject.toml [project] name = "myproject" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] [dependency-groups] dev = [ "pandas>=2.2.3", ] production = [ "requests>=2.32.3", ]