菜单

项目初始化

相关源文件

本文档介绍了 uv 的项目初始化系统,该系统用于创建新的 Python 项目和 PEP 723 脚本。有关现有项目的依赖管理信息,请参阅 依赖管理。有关工作空间管理的概念,请参阅 工作空间

概述

项目初始化系统支持两种主要的初始化类型:项目(应用程序和库)和 PEP 723 脚本。项目初始化会创建完整的 Python 项目结构,并包含 pyproject.toml 文件,而脚本初始化则会创建带有嵌入式依赖元数据的独立可执行 Python 文件。

初始化类型和代码映射

  • InitKind::Scriptinit_script() 函数
  • InitKind::Project(InitProjectKind::Application)init_application() 方法
  • InitKind::Project(InitProjectKind::Library)init_library() 方法

来源:crates/uv/src/commands/project/init.rs669-700 crates/uv/src/commands/project/init.rs684-700

初始化流程

主要的初始化过程遵循结构化的流程,该流程确定 Python 的要求、与工作空间集成并生成适当的项目结构。

关键函数和入口点

来源:crates/uv/src/commands/project/init.rs40-186 crates/uv/src/commands/project/init.rs105-113

Python 版本解析

Python 版本的确定遵循优先级层次结构,该结构考虑了用户输入、现有环境、工作空间设置和系统默认值。

Python 解析优先级(按顺序)

  1. --python CLI 参数 → PythonRequest::parse()
  2. .python-version 文件 → PythonVersionFile::discover()
  3. 现有 .venvPythonEnvironment::from_root()
  4. 工作空间 requires-pythonfind_requires_python()
  5. 系统 Python → PythonInstallation::find_or_download()

来源:crates/uv/src/commands/project/init.rs351-575 crates/uv/src/commands/project/init.rs374-482

工作区集成

项目初始化会自动发现并与现有工作空间集成,更新工作空间成员资格并继承配置。

工作空间集成组件

  • 发现:来自工作空间模块的 Workspace::discover()
  • 成员资格检查:workspace.excludes()workspace.includes() 方法
  • 添加成员:PyProjectTomlMut::add_workspace() 方法
  • 配置继承:Python 版本和依赖项来源

来源:crates/uv/src/commands/project/init.rs298-343 crates/uv/src/commands/project/init.rs592-649 crates/uv-workspace/src/workspace.rs143-236

构建后端选择

初始化系统支持多种构建后端,以适应不同的项目类型和需求,并根据项目类型和用户偏好自动选择。

构建后端枚举值用例模板文件
hatchlingProjectBuildBackend::Hatch打包项目的默认设置标准 Python 布局
uv_buildProjectBuildBackend::Uv预览模式默认标准 Python 布局
flit-coreProjectBuildBackend::Flit简单的纯 Python 包标准 Python 布局
pdm-backendProjectBuildBackend::PDMPDM 生态系统项目标准 Python 布局
setuptoolsProjectBuildBackend::Setuptools旧版兼容性标准 Python 布局
poetry-coreProjectBuildBackend::PoetryPoetry 生态系统项目标准 Python 布局
maturinProjectBuildBackend::MaturinRust 扩展模块Cargo.toml, lib.rs
scikit-build-coreProjectBuildBackend::ScikitC/C++ 扩展模块CMakeLists.txt, main.cpp

构建系统生成函数

来源:crates/uv/src/commands/project/init.rs798-805 crates/uv/src/commands/project/init.rs873-880 crates/uv/src/commands/project/init.rs944-1015

项目结构生成

不同的项目类型会根据初始化参数和项目类型生成不同的文件结构和内容。

文件生成函数

应用程序与库的区别

  • 应用程序:可选打包,main.py 用于简单场景,打包后使用命令行脚本
  • 库:始终打包,src 布局,py.typed 标记,API 导向的 __init__.py
  • 脚本:带有 PEP 723 元数据块的独立文件

来源:crates/uv/src/commands/project/init.rs753-836 crates/uv/src/commands/project/init.rs840-893 crates/uv/src/commands/project/init.rs1172-1396

错误处理与验证

该初始化系统包括对常见失败场景的全面错误处理,并在创建之前验证项目约束。

错误类型与处理

来源:crates/uv/src/commands/project/init.rs106-113 crates/uv/src/commands/project/init.rs228-234 crates/uv/src/commands/project/init.rs854-856 crates/uv-workspace/src/workspace.rs44-77