pyproject.toml文件介绍 pyproject.toml 是一个配置文件,它在Python项目中扮演着重要的角色,主要用于定义项目的构建系统要求。 以下是 pyproject.toml 文件的一些常见用途: 依赖管理:指定项目所需的依赖项及其版本。这可以包括运行项目所需的库和框架。 包发布信息:如果项目打算发布到Python包索引(如PyPI),pyproject.toml 还可以包含发布相关的信息。 pyproject.toml 文件是Python项目中的核心配置文件,它使得项目的构建和依赖管理变得更加标准化和自动化。 pyproject.toml文件怎么自动生成?
pyproject.toml 文件 tool.poetry 是最基本的section,然后它由多个 sections 组成 name package 名字,必填 version package 版本号
要讲清楚这个我们要追溯到 pyproject.toml 没有出现之前;为了提起大家的兴趣,还是先来看一下 pyproject.toml 目前有多流行。 我在 github 上看一下 Python 生态顶级项目引入 pyproject.toml 的情况。 1. 比较现代的方案是通过配置文件来声明配置,pyproject.toml 正是这么一个产物。 有了 pyproject.toml 之后软件包的发行是相当方便了,再见 setup.py 。 ---- pyproject.toml 高级 其实 pyproject.toml 还有一些其它的配置项,不过数量上也不多;文章里面为了简单只列举了最少要声明的项。
Simple better than complex Why pyproject.toml ? Why toml ? 主流工具支持 好孩子 坏孩子 flake8 mypy Why pyproject.toml ? 如果你还没有听说过 pyproject.toml ,那么请看一眼最近主力开发的 Python 项目根目录,我想它大概是长这样的 一眼看上去全是配置文件就一个感觉 —— 杂乱。 所以,类似 NodeJS 的 package.json ,Python 世界的统一项目配置文件 —— pyproject.toml 就显得异常重要了。 Why toml ? 首先,要搞清楚 pyproject.toml 的使用场景,它是配置的集合,而不是业务逻辑对象,过于复杂的配置反而不利于其发展,毕竟工具配置都是开发的“边角料时间”处理的,不能有太复杂的理解门槛。
Python项目打包时,你是不是也纠结过:该用传统的setup.py ,还是新潮的pyproject.toml ?前者是“老江湖”,配置灵活但代码冗余;后者是“新规范”,简洁清晰却兼容性存疑。 2. pyproject.toml :像“填表单”,简洁且标准化pyproject.toml 是声明式配置文件,遵循PEP 621标准,用键值对定义项目信息,无需写Python代码:toml复制[project 新项目首选pyproject.toml :简洁、标准、未来兼容如果你在2024年新建项目,直接用pyproject.toml+setuptools :步骤:项目根目录新建pyproject.toml , 老项目迁移:先加pyproject.toml ,再逐步淘汰setup.py已有setup.py 的项目不用“一刀切”删除,可分两步迁移:新建pyproject.toml ,复制setup()函数里的name 新项目直接上pyproject.toml ,享受规范带来的简洁;老项目或复杂项目保留setup.py ,用动态能力解决实际问题——两者不是“非此即彼”,而是“各取所长”。
如何解决 Python 项目安装依赖报错:ERROR: Failed to build installable wheels for some pyproject.toml based projects based projects 这个错误通常发生在基于 pyproject.toml 的项目中,特别是在使用现代的构建系统(如 setuptools 或 flit)时。 缺少构建工具 pyproject.toml 是 PEP 518 提案引入的标准化构建配置文件,用于定义如何构建一个 Python 项目。 项目不支持的构建系统 许多现代的 Python 项目都支持 pyproject.toml,并使用构建系统如 setuptools、flit 或 poetry 等进行管理。 确保 pyproject.toml 配置正确 检查你的 pyproject.toml 文件,确保它正确配置了构建系统。
1.核心 – pyproject.toml pyproject.toml 是 Python 项目的核心配置文件,用于定义项目元数据和依赖关系。 [bas,windows]" # 生成平台特定的 lock 文件 uv pip compile pyproject.toml -o uv.windows.lock # 同步依赖 uv pip sync 更新 pyproject.toml 中的依赖版本 # 2. 重新生成 lock 文件 uv pip compile pyproject.toml -o uv.lock # 3. --index-url https://download.pytorch.org/whl/cu128 -o uv.windows.lock uv pip compile pyproject.toml 在 pyproject.toml 中定义基础依赖 可以设计如下pyproject.toml文件: [project] name = "my-awesome-project" dynamic = ["version
PEP 518 引入了 pyproject.toml 文件的用法。因此,在创建包时始终需要一个 pyproject.toml 文件,用于定义项目的设置、定义元数据和许多其他内容。 由于每个包都包含一个 pyproject.toml 定义其依赖项的文件,因此其他开发人员不必单独安装所需的包,而只需从其 pyproject.toml 文件中安装该包即可。 ❌ 主要命令: # 创建目录结构和 pyproject.toml poetry new <project_name> # 交互式创建 pyproject.toml poetry init # 从 pyproject.toml ✅ 创建一个新项目 # 交互式创建 pyproject.toml pdm init # 从 pyproject.toml 安装包 pdm install 依赖管理 # 添加依赖 pdm add < # 初始化现有项目或者创建 pyproject.toml hatch new --init 依赖管理 # 没有 add 命令,依赖需要手动添加到 pyproject.toml # 展示依赖 hatch
):版本号 new 通过创建适合大多数项目的目录结构来启动新的Python项目 poetry new my-package my-package 是路径 默认目录结构 my-package ├── pyproject.toml 自定义项目名称 poetry new my-folder --name my-package 使用 src 目录 poetry new --src my-package 目录结构 my-package ├── pyproject.toml __init__.py └── test_my_package.py init 如果想在已存在的 Python 项目使用 poetry,可以用 init 命令,poetry 会以交互方式创建 pyproject.toml 需要具有版本约束的包,格式 foo:1.0.0 --dev-dependency:开发需求 生成 pyproject 已有的字段 和 options 是可以对齐的 install 从当前项目读取 pyproject.toml toml options --dry-run :输出操作,但不执行操作 --no-dev : 不安装开发依赖项 --lock:不执行安装,仅更新 poetry.lock 文件 add 将所需要的包添加到 pyproject.toml
Poetry的基本使用 准备工作 如果你是在一个已有的项目里使用Poetry,你只需要执行 poetry init 命令来创建一个 pyproject.toml 文件: poetry init 可看到有很多提示输入 ,不确定的内容就先按下Enter使用默认值,后续可以再修改pyproject.toml文件。 Python 项目,使用 poetry new <文件夹名称> 命令可以创建一个项目模板: poetry new poetry-demo 这会创建一个这样的项目结构: poetry-demo ├── pyproject.toml 文件): poetry install 这个命令会读取 pyproject.toml 中的所有依赖(包括开发依赖)并安装,如果不想安装开发依赖,可以附加 --no-dev 选项。 中的[tool.poetry.dev-dependencies]区域 poetry add pytest --dev 指定具体的版本 poetry add flask=2.22.0 安装pyproject.toml
poetry new <project_name>:创建新项目 poetry init:初始化现有项目 poetry add <package>:添加和安装包 poetry install:安装pyproject.toml 重点:pyproject.toml定义了项目及其依赖项。 运行命令后,poetry会用交互方式让你填写项目信息,然后生成pyproject.toml。 • 退出虚拟环境且不离开shell,输入deactivate 3.指定依赖项 3.a 在pyproject.toml中可以手动设置依赖项 [tool.poetry.dependencies] pendulum 4 安装依赖 (当别人拿到你的项目后,就可以轻松安装依赖了) 在pyproject.toml所在目录下,执行poetry install会安装pyproject.homl中的依赖项。
另一个位置是pyproject.toml文件。 使用pyproject.toml文件 使用 Poetry 最重要的文件之一是pyproject.toml文件。这个文件不是 Poetry 的发明。 要查看 TOML 的外观,请打开pyproject.toml文件: 1# pyproject.toml 2 3\[tool.poetry\] 4name = "rp-poetry" 当您向pyproject.toml文件添加需求时,它尚未安装。 您可以在pyproject.toml文件中找到版本限制。 区分pyproject.toml和poetry.lock 虽然pyproject.toml文件中的版本要求可能很宽松,但 Poetry 会锁定您在poetry.lock文件中实际使用的版本。
它的项目配置更集中,全部在 pyproject.toml 文件中,toml 是什么呢? 它是一种配置文件的格式 Tom's Obvious, Minimal Language (https://github.com/toml-lang/toml). pyproject.toml 有些类似 NodeJS 的 package.json 文件,比如 poetry add, poetry install 命令的行 # 往 pyproject.toml 中添加对 boto3 的依赖并安装(add 还能从本地或 git 来安装依赖 ), poetry add boto3 # 将依照 pyproject.toml 文件中定义安装相应的依赖到当前的 Python 虚拟环境中 # 比如在 poetry shell # 会根据定义在 pyproject.toml 文件中的依赖创建并使用虚拟环境 3.
简化配置 - 使用单一的pyproject.toml文件3. 现代化设计 - 完全支持PEP 517/518标准4. 强大的环境管理 - 比venv更灵活的虚拟环境管理5. 深入了解pyproject.tomlHatch使用pyproject.toml作为唯一的配置文件,这符合PEP 518和PEP 621标准。 可以看到,相比于传统的setup.py + requirements.txt + 各种配置文件的组合,pyproject.toml提供了一个统一、清晰的配置方式。 在pyproject.toml中定义多环境:```toml[tool.hatch.envs.default]dependencies = [ "pytest", "pytest-cov",] 依赖管理Hatch简化了依赖管理,让你可以在pyproject.toml中集中定义所有依赖:```toml[project]...dependencies = [ "requests>=2.28.0
看下pyproject.toml ,可以看到里面没有我们刚安装的pip包(.venv) [root@vm-01 demo]# cat pyproject.toml [project]name = "demo"version 清单,安装相关的依赖(例如项目下载到其它环境去初始化部署)uv sync移除包uv remove redisuvx命令调用工具却不安装注意不会在当前虚拟环境中安装ruff,也不会修改pyproject.toml 与用于指定项目广泛需求的 pyproject.toml 不同,lockfile 包含了项目环境中安装的具体已解析版本。该文件应被提交到版本控制中,以便实现跨机器的一致且可重复的安装。 一般不要使用 uv add 因为如下原因:uv add 是为 pyproject.toml 项目设计的命令。 它还会修改 pyproject.toml 文件,如果您只是想临时安装一个工具(如 ruff, jupyter),这会污染您的项目配置。
Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml doneBuilding wheels for collected packages: backports.zoneinfo Building wheel for backports.zoneinfo (pyproject.toml ) ... error error: subprocess-exited-with-error × Building wheel for backports.zoneinfo (pyproject.toml Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml doneBuilding wheels for collected packages: backports.zoneinfo Building wheel for backports.zoneinfo (pyproject.toml
. └── example ├── example │ └── __init__.py ├── pyproject.toml ├── README.rst └ ├── __init__.py └── test_example.py 3 directories, 5 files 2、Poetry创建了example项目,生成了相应的文件夹和pyproject.toml example poetry init This command will guide you through creating your pyproject.toml config. # 交互bash (yes/no) [yes] no Generated file # 填写完项目信息后会生成以下内容, 之后会在刚才的路径创建pyproject.toml文件, 并写入。
❯ mkdir pdm-demo ❯ cd pdm-demo # 重新执行pdm成功 ❯ pdm init Creating a pyproject.toml for PDM... # 完成之后,PDM 会将你的选择以 toml 格式写入 pyproject.toml 配置文件中。 ❯ ll total 8 -rw-r--r-- 1 allenjol staff 283 May 20 13:58 pyproject.toml ❯ cat pyproject.toml [project pdm use python3.9 命令别名 在 pyproject.toml 添加 [tool.pdm.scripts] 可以设置快捷命令别名,若项目的执行有非常多的参数,这种设定别名的方法将很有用 pdm 做为一个后起之秀,也没有忘本,它支持: 将 pyproject.toml 转成 setup.py pdm export -f setuppy -o setup.py 将 pdm.lock 转成
近似工具 pip-tools 生成精确版本锁文件 Maven版本锁 poetry 全生命周期管理(类似Gradle) Gradle conda 跨平台科学计算环境 SDKMAN poetry示例: # pyproject.toml build-backend = "poetry.core.masonry.api" 三、打包与分发项目(1小时) 3.1 标准打包流程 项目结构: my_package/ ├── setup.py ├── pyproject.toml package) python -m build # 上传到PyPI(类似Maven Central) twine upload dist/* 3.2 现代打包标准(PEP 621) # pyproject.toml headers=self.headers) response.raise_for_status() return response.json() 步骤4:打包配置 # pyproject.toml main.py"] 通过第五天的学习,您将掌握Python生态的依赖管理精髓,关键要点: 1️⃣ 虚拟环境是项目隔离的必备工具 2️⃣ requirements.txt是最基础的依赖管理方式,但pyproject.toml
它的核心特性包括:完全支持PEP 582(Python本地包目录)快速依赖解析器简单直观的命令行界面兼容pyproject.toml(PEP 621)对于那些已经熟悉Poetry或Pipenv的开发者来说 兼容性好PDM可以处理使用requirements.txt或setup.py的传统项目,也完全支持现代的pyproject.toml标准。这意味着你可以在新旧项目中都使用PDM。 执行pdm init后,PDM会向你提出一系列问题来配置项目:项目名称(默认为目录名)项目版本(默认为0.1.0)项目描述作者信息许可证Python版本要求回答这些问题后,PDM会在项目根目录下创建一个pyproject.toml 同时,它会更新pyproject.toml文件,添加这些依赖项。 运行脚本PDM提供了一个方便的run命令,可以在项目环境中执行脚本:bashpdm run python main.py你也可以在pyproject.toml中定义自定义脚本:toml[tool.pdm.scripts