当前位置: 首页 > news >正文

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

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

通常不会 —— 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.jsqmd.com/news/17440/

相关文章:

  • 昇腾npu架构运行deepseek
  • 进化计算入门
  • 02-01串口理论知识
  • 赋能安全管控:NVR接入录像回放平台EasyCVR加油站监控应用场景与实际功能
  • .Net 自定义定时器
  • python教程(一)
  • 2025 年片材机生产厂家最新推荐榜,技术实力与市场口碑深度解析多层共挤/流延/PC/pp 片材机公司推荐
  • OpenAI Codex整合Z.ai GLM-4.6编程
  • CF2110E Melody
  • 无状态HTTP的“记忆”高效的方案:Spring Boot中CookieSession全栈实战
  • LLM 笔记 —— 01 大型语言模型修炼史(Self-supervised Learning、Supervised Learning、RLHF) - 实践
  • 深入解析:【面试前必看:Redis 从入门到实战:核心知识与面试高频考点全解析】
  • Python自学笔记
  • 4-8〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸命令注入漏洞 - 实践
  • 2025年项目管理工具生态全景:技术主权与AI赋能的行业变革
  • sqlalchemy 密码@ 处理, 以及ssl连接处理
  • el-dialog 嵌套遮罩灰色问题
  • 2025 年破碎机厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析圆锥/辊式/对辊/煤矸石/砂石破碎机厂家推荐
  • 站位3
  • AI 的能源危机:训练一个模型究竟要耗掉多少电?
  • 2025 年制砂机厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析高效/冲击式/砂石/新疆制砂机厂家推荐
  • 拆解3D Gaussian Splatting:原理框架、实战 demo 与自驾仿真落地探索!
  • Hyper-V 与 root的Android7模拟器共存
  • 基于深度学习的CT扫描图像肝脏肿瘤智能检测与分析系统【python源码+Pyqt5界面+数据集+训练代码】 - 实践
  • resend 单次发送命令
  • 视频监控界的“万能翻译器”:视频汇聚平台EasyCVR视频接入功能全解读
  • PCIe 全高/半高,全长/半长 尺寸介绍 - ENGINEER
  • Android脱壳
  • Linux框架编程:线程控制
  • 基于Ubuntu22.04 部署Dify详细教程