pip会读取 pyproject.toml 的 project.dependencies 字段进行依赖安装吗?

news/2025/10/20 14:41:55/文章来源:https://www.cnblogs.com/imust2008/p/19152619

这是一个非常重要且常见的问题,答案是:

通常不会 —— pip 本身不会直接从 pyproject.tomlproject.dependencies 字段安装依赖,除非你正在安装当前项目本身(例如 pip install .pip install -e .)。


详细解释

✅ 情况一:你运行 pip install .(安装本地项目)

  • 如果项目使用 PEP 621 标准(即 pyproject.toml 中有 [project] 表,包含 dependencies 字段),
  • 并且配置了兼容的 构建后端(如 setuptools >= 61, hatchling, pdm-backend, flit-core 等),
  • 那么 pip 会调用该构建后端构建 wheel,并在安装项目的同时 自动安装 project.dependencies 中列出的依赖

✅ 示例 pyproject.toml(PEP 621 格式):

[build-system]
requires = ["setuptools>=61"]
build-backend = "setuptools.build_meta"[project]
name = "my-package"
version = "0.1.0"
dependencies = ["requests>=2.25.0","click"
]

运行:

pip install .
# 或
pip install -e .

→ 此时 requestsclick 会被自动安装。


❌ 情况二:你运行 pip install some-package(从 PyPI 安装)

  • pip 不会去读取 PyPI 上包的 pyproject.toml 文件;
  • 它读取的是该包在构建时生成的 metadata(如 METADATA 文件),其中依赖信息已经由构建后端写入;
  • 所以依赖安装是基于 已构建好的分发包(wheel/sdist)中的元数据,而不是原始 pyproject.toml

❌ 情况三:你只是想“根据 pyproject.toml 安装依赖”,但不安装项目本身

比如你有一个 pyproject.toml,只想装它的依赖(类似 pip install -r requirements.txt),那么:

pip 无法直接做到这一点

你需要:

  • 使用支持该功能的工具(如 hatch, pdm, poetry);
  • 或手动提取依赖并用 pip 安装。
✅ 替代方案示例:
  1. 使用 hatch(如果项目使用 hatchling):

    hatch env create
    hatch shell
    # 或直接安装依赖(不安装项目):
    pip install $(hatch deps)
    
  2. 使用 pdm

    pdm install --no-self  # 只装依赖,不装项目
    
  3. 临时脚本提取并安装(假设符合 PEP 621):

    # install-deps.py
    import tomllib
    with open("pyproject.toml", "rb") as f:deps = tomllib.load(f)["project"]["dependencies"]
    import subprocess
    subprocess.check_call(["pip", "install"] + deps)
    

    然后运行:

    python install-deps.py
    

关键总结

场景 pip 会安装 pyproject.toml 中的 dependencies 吗?
pip install .pip install -e . (前提是构建后端支持 PEP 621)
pip install package-from-pypi ✅ 会安装依赖,但不是直接读 pyproject.toml,而是读构建后的元数据
pip install -r pyproject.toml 不支持pip 不接受 pyproject.toml 作为 requirements 文件)
仅想安装依赖而不安装项目 pip 无法直接实现,需借助其他工具或脚本

建议

  • 如果你使用现代 Python 打包(PEP 621),推荐搭配 setuptools + pip install -e . 进行开发;
  • 如果需要频繁管理依赖(增删改),建议使用 Poetry / PDM / Hatch 等专用工具;
  • 不要期望 pip 能像 npmcargo 那样直接操作项目配置文件——它的职责是安装包,而不是管理项目配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇腾npu架构运行deepseek

Atlas 800-3010 部署 deepseek模型导读 这东西写了有半年了,一直在仓库里吃灰,主要是过程有些不尽人意。 本意是想着能像Windows那种方式,用内存虚拟显存把671B的ds给啃下来,后来发现这条路走不通,设备不支持,生…

进化计算入门

下载MATLAB 学习nsga2算法并复现阅读nsga2论文原文+自己复现 可参考: 【通俗易懂讲算法-多目标优化-NSGA-II(附代码讲解)】 https://www.bilibili.com/video/BV1w84y1X7hh/?share_source=copy_web&vd_source=e3c…

赋能安全管控:NVR接入录像回放平台EasyCVR加油站监控应用场景与实际功能

赋能安全管控:NVR接入录像回放平台EasyCVR加油站监控应用场景与实际功能在现代社会中,加油站作为重要的能源供应点,面临着安全监管与风险管理的双重挑战。为应对这些问题,安防监控平台EasyCVR推出了一套全面的加油…

.Net 自定义定时器

public class MyTimer{public MyTimer(TimerCallback callback, object? state, int dueTime, int period){Callback = callback;DueTime = dueTime;Period = period;}public TimerCallback Callback { get; set; }//…

python教程(一)

vscode安装 1、python必备插件 python、 pylance、 black formatter需要配置:"[python]": { "editor.defaultFormatter": "ms-python.black-formatter", "editor.formatOnSave&qu…

2025 年片材机生产厂家最新推荐榜,技术实力与市场口碑深度解析多层共挤/流延/PC/pp 片材机公司推荐

当前塑料加工行业对片材机的需求日益多元化,不仅要求设备具备高效生产能力,还需兼顾节能环保与智能化水平。但市场上厂家数量繁杂,部分企业存在技术滞后、服务不完善等问题,导致下游企业采购时难以精准筛选。为帮助…

OpenAI Codex整合Z.ai GLM-4.6编程

OpenAI Codex整合Z.ai GLM-4.6编程背景 OpenAI Codex 是一个由 OpenAI 开发的人工智能模型,它能够理解自然语言(比如中文、英文)指令,并将其实时翻译成可工作的计算机代码。简单来说,你用日常语言告诉它你想要…

CF2110E Melody

显然题目条件就是要你交替相等。 考虑将 \(a, b\) 中相同的值都当成一个点,那么一个音乐就是两个点连边,发现此时在上面跑欧拉回路就是合法的,因为这是一张二分图,必定是交替行走。 有些讨论比较烦,就不写代码了。…

无状态HTTP的“记忆”高效的方案:Spring Boot中CookieSession全栈实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

LLM 笔记 —— 01 大型语言模型修炼史(Self-supervised Learning、Supervised Learning、RLHF) - 实践

LLM 笔记 —— 01 大型语言模型修炼史(Self-supervised Learning、Supervised Learning、RLHF) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

深入解析:【面试前必看:Redis 从入门到实战:核心知识与面试高频考点全解析】

深入解析:【面试前必看:Redis 从入门到实战:核心知识与面试高频考点全解析】2025-10-20 14:30 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflo…

4-8〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸命令注入漏洞 - 实践

4-8〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸命令注入漏洞 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

2025年项目管理工具生态全景:技术主权与AI赋能的行业变革

2025年项目管理工具生态全景:技术主权与AI赋能的行业变革 随着生成式AI、量子计算与混合现实技术的迅猛发展,全球项目管理工具市场正在经历前所未有的结构性变革。这场由技术驱动的产业升级不仅重塑了工作协同方式,…

sqlalchemy 密码@ 处理, 以及ssl连接处理

from grant.sql_connection import tellus_conn from sqlalchemy import text, create_engine import pandas as pd from urllib.parse import quote_pluspassword = "123z@W2823in" encoded_password = quo…

el-dialog 嵌套遮罩灰色问题

<el-dialog> 嵌套遮罩灰色问题1 说明在一个<el-dialog> 里面打开另外一个<el-dialog> ,发现新打开的是灰色的,需要点一下才正常2 处理在两个<el-dialog> 都加上以下属性:append-to-body=&qu…

Microsoft 代理框架简介(预览版):让每个开发人员都能轻松使用 AI 代理

Microsoft 代理框架简介(预览版):让每个开发人员都能轻松使用 AI 代理 引言 人工智能代理(AI Agents)正逐渐成为现代软件开发的重要组成部分,它们能够结合推理、上下文和工具来追求特定目标。然而,许多开发人员…

winform连接锐浪GridReport打印示例

using grproLib; using LRTMS.Common; using LRTMS.DB; using LRTMS.Report; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using Syste…

2025 年破碎机厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析圆锥/辊式/对辊/煤矸石/砂石破碎机厂家推荐

引言在矿山开发、冶金加工、建材生产等核心领域,破碎机作为关键生产装备,其性能与品质直接决定项目生产效率、资源利用率及综合成本。当前市场上破碎机品牌数量繁杂,部分厂商缺乏核心技术支撑,设备运行稳定性差、故…