快速用 uv 模拟发布一个 Python 依赖包到 TestPyPI 上,以及常用命令

1. uv 介绍

  • 简单说,uv 是一个用 Rust 编写的超快 Python 包管理和项目管理工具,旨在替代 pip、poetry、virtualenv 等传统工具。

  • 换句话说,又是一个轮子,但是这个轮子用起来有点意思。首先,可能是因为太新了,还没被伟大的GFW识别到,也就是说,不用配置镜像源

  • 然后,按官方的说法,下载安装包速度特别快,还贴了个图,看对比的确提升好大
    在这里插入图片描述

  • 最后,提供了一站式功能,从初始化项目,增加依赖,虚拟环境管理,Python版本管理,基础的运行Python单文件,工具管理等

  • 个人用起来挺有意思的,不过才用了2-3天,新东西最大的问题就是更新快,但是网上的教程很多都滞后,甚至连AI都不例外,问它问题都是错误答案,最好的还是啃官方文档,这篇文章的目的就是记录一下这几天摄入的知识,防止遗忘

2. uv 安装(Windows版)

打开一个powershell,运行下面的命令:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

3. 快速模拟一个要发布到TestPyPI上的依赖包,scoful-test-lib

3.1 初始化 uv init

使用命令:uv init --lib scoful-test-lib,这里注意了,加--lib是因为需要Python依赖包的目录结构,也就是说要有__init__.py,如果是普通的项目,不需要加--lib
文件目录结构如下:
在这里插入图片描述

3.2 进入scoful-test-lib

使用命令:cd scoful-test-lib,其中几个关键文件内容如下:

# __init__.py 
# 注意这个hello函数,后面会引入调用一下
def hello() -> str:
    return "`Hello from scoful-test-lib!`"

# pyproject.toml
[project]
name = "scoful-test-lib" # 包名
version = "0.1.0" # 版本
description = "Add your description here"
readme = "README.md"
authors = []
requires-python = ">=3.10"
dependencies = [] # 添加的依赖

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

3.3 修改pyproject.toml

PS:发布到测试环境才需要
在pyproject.toml的最后追加,这个配置的意思是发布的时候可以指定发布到pypi的测试环境,不然默认就发到pypi的生产环境去了:

[[tool.uv.index]]
name = "testpypi"
url = "https://test.pypi.org/simple/"
publish-url = "https://test.pypi.org/legacy/"
explicit = true

3.4 使用命令 uv sync

这个命令的意思其实是,按uv.lock安装依赖并创建虚拟环境,虽然是新项目,也可以直接使用

3.5. 使用命令 uv lock

这个命令的意思是,基于pyproject.toml生成精确锁文件

3.6 使用命令 uv build

这个命令的意思是,生成编译后的文件,也就是要上传到TestPyPI上的文件
文件结构如下:
在这里插入图片描述

3.7 获取testPyPI的token

  • TestPyPI 注册一个账户
  • 获取token需要绑定2FA,记得复制备份一下

3.8 发布到 testPyPI

  • 执行命令:uv publish --index testpypi,后面这个index就是指定发布到测试环境的意思
  • 回车后会提示输入账号命名,先输入:__token__,默认的
  • password就输入上面获取的testPyPI的token

3.9 验证,import scoful-test-lib

  • 打开这个,能看到已经发布成功了

  • 使用uv init test-install,再新建一个项目,没有加–lib,看看文件结构,跟加了的不一样
    在这里插入图片描述

  • 再用uv add --default-index https://test.pypi.org/simple/ scoful-test-lib,把上面发布的scoful-test-lib依赖加到test-install项目里,可以在pyproject.toml里看到添加的依赖

# pyproject.toml
[project]
name = "test-install"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
    "scoful-test-lib>=0.1.0", # 这就是上面发布的scoful-test-lib,已经添加成功
]

[[tool.uv.index]]
url = "https://test.pypi.org/simple/"
default = true

  • 修改main.py,引入scoful-test-lib,内容如下
from scoful_test_lib import hello
# 细心的人会留意到这里,为啥包是scoful-test-lib,引入是scoful_test_lib,这是Python的设计,必须这样才不会报错

def main():
    print("Hello from test-install!")
    print(hello())

if __name__ == "__main__":
    main()

  • uv sync一下
  • 直接运行uv run main.py,结果就是先打印Hello from test-install!,再打印依赖包里的Hello from scoful-test-lib!,成功!
  • 这就把整个链路打通了!

2. uv 常用命令

2.1 初始化项目 uv init xxx

如果是初始化包,uv init --lib xxx

2.2 构建虚拟环境 uv sync

uv 会自动检测虚拟环境状态,确保依赖与锁文件完全同步,避免手动激活环境的麻烦

2.3 更新共用版本lock文件 uv lock

执行uv lock会生成uv.lock,这个文件记录了所有依赖的精确版本和哈希值,确保团队成员或不同环境的安装结果完全一致

2.4 增加依赖 uv add xxx

比如:uv add requestsuv add requests==2.31.0,可指定版本
比如:uv add -r requirements.txt,批量增加依赖

2.5 运行 uv run xxx.py

2.6 在虚拟环境快速调用工具 uvx xxx

这个命令不会污染本地环境,自建了一个虚拟环境来运行,非常好用
例子:uvx pycowsay 'scoful is awesome'


  -------------------
< 'scoful is awesome' >
  -------------------
   \   ^__^
    \  (oo)\_______
       (__)\       )\/\
           ||----w |
           ||     ||

2.7 详细官方文档地址

https://docs.astral.sh/uv/reference/cli/

over, enjoy!!!
如对您有帮助,感谢投喂!
微信感谢投喂版

<think>好的,用户想了解如何将现有的Conda项目迁移到使用uv进行管理。首先,我需要确认uv是什么,以及它与Conda的区别。根据之前的了解,uv一个新的Python包管理工具,可能专注于快速安装和轻量化,类似于pip,但可能更高效。而Conda不仅管理Python包,还能处理非Python的依赖,适合科学计算和环境隔离。 接下来,用户需要将Conda项目迁移到uv,可能需要将Conda的环境导出为requirements文件,然后让uv来安装这些依赖。但uv是否支持Conda的通道或者如何处理非Python依赖?可能uv仅支持PyPI的包,所以用户需要确保所有依赖都能在PyPI上找到,或者找到替代品。 然后,步骤可能包括:导出Conda环境为requirements.txt,创建虚拟环境,使用uv安装依赖。同时,需要注意Conda特定的包名称可能与PyPI不同,可能需要手动调整。此外,如果项目中有系统级的依赖,uv可能无法处理,需要用户自行解决。 还需要考虑是否保留Conda的环境管理,或者完全迁移到uv。如果用户想完全脱离Conda,可能需要用uv和virtualenv或其他工具结合来管理环境。同时,检查uv的文档,确认其是否支持从requirements文件安装,以及如何处理依赖解析。 可能的问题包括依赖版本冲突、包名称差异、非Python依赖缺失等。用户需要逐一检查并调整。此外,测试迁移后的环境是否正常运行项目代码也很重要。 最后,生成相关问题时,可以包括uv的优势、与Conda的兼容性、常见问题解决等,帮助用户深入理解迁移过程和可能遇到的挑战。</think>### 迁移Conda项目到uv的步骤 1. **导出Conda环境依赖** 首先将Conda环境的包列表导出为`requirements.txt`文件: ```bash conda list --export > requirements.txt ``` 这会生成一个包含所有已安装包及其版本的列表[^1]。 2. **清理Conda特定包** Conda的包名称可能与PyPI的包名称不同(例如`numpy`在Conda和PyPI中名称一致,但某些科学计算包可能不同)。需要手动检查`requirements.txt`,确保所有包都能通过PyPI安装。例如,Conda的`mkl`库可能需要替换为对应的开源实现。 3. **创建uv虚拟环境** uv支持通过`--python`参数指定Python版本,并自动创建虚拟环境: ```bash uv venv --python 3.9 myenv source myenv/bin/activate # Linux/macOS ``` 4. **使用uv安装依赖** 通过uv安装导出的依赖: ```bash uv pip install -r requirements.txt ``` uv会从PyPI拉取包,若遇到Conda特有包(如`intel-openmp`),需手动寻找替代或删除[^2]。 5. **验证环境兼容性** 运行项目测试用例,确保所有功能正常。若出现缺失依赖,需通过`uv pip install`补充安装。 --- ### 关键注意事项 - **依赖冲突处理**:uv的依赖解析速度快,但若遇到复杂依赖冲突,可尝试`uv pip install --resolution=highest`调整策略。 - **非Python依赖**:若项目依赖系统库(如`libblas`),需通过操作系统包管理器(如`apt`或`brew`)单独安装。 - **环境隔离**:uv默认使用虚拟环境,但也可通过`--system`参数全局安装(不推荐)。 --- ### 示例操作流程 ```bash # 导出Conda依赖并清理 conda list --export | grep -v '^#' | cut -d'=' -f1,2 > requirements.txt sed -i '/mkl/d' requirements.txt # 删除Conda特有包 # 创建并激活uv环境 uv venv --python 3.11 uv_env source uv_env/bin/activate # 安装依赖 uv pip install -r requirements.txt # 验证 python -c "import numpy; print(numpy.__version__)" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值