You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shell脚本中检查当前环境是否满足requirements.txt依赖?

解决方案:用pip模拟安装检查依赖满足情况

可以利用pip的模拟安装功能,结合禁止联网和本地源的参数,实现无安装、无网络的依赖检查,直接返回布尔结果。

Shell脚本实现

#!/bin/bash

# 检查requirements.txt文件是否存在
if [ ! -f "./requirements.txt" ]; then
    echo "0"
    exit 1
fi

# 调用pip执行模拟安装检查,禁止联网、不实际安装
pip install --dry-run --no-index --find-links=/dev/null -r "./requirements.txt" > /dev/null 2>&1

# 根据pip的返回值输出布尔结果(1=满足,0=不满足)
if [ $? -eq 0 ]; then
    echo "1"
else
    echo "0"
fi

原理说明

  • --dry-run:让pip仅执行安装前的依赖检查逻辑,不实际下载或安装任何包
  • --no-index:禁止pip从PyPI等远程索引查找包
  • --find-links=/dev/null:指定一个空的本地包源,确保pip无法找到任何未安装的包
  • 当所有依赖都已满足requirements.txt的版本要求时,pip模拟安装会成功(返回值0);若有缺失或版本不匹配的依赖,pip会因无法找到符合要求的包而报错(返回值非0)

适配CMake场景

在CMake中,你可以通过execute_process调用这个脚本,根据返回的1/0来决定是否创建虚拟环境:

execute_process(
    COMMAND bash ${CMAKE_SOURCE_DIR}/check_deps.sh
    OUTPUT_VARIABLE DEPS_SATISFIED
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

if(DEPS_SATISFIED STREQUAL "1")
    # 依赖满足,直接使用当前环境
    message(STATUS "Python dependencies are satisfied, using current environment")
else()
    # 依赖不满足,创建虚拟环境并安装依赖
    message(STATUS "Python dependencies not satisfied, creating virtual environment")
    # 这里添加创建venv和安装依赖的逻辑
endif()

注意事项

  • 确保脚本中调用的pip是目标Python环境的pip(比如系统Python的pip,或指定路径的虚拟环境pip)
  • 若requirements.txt中包含本地包路径,需调整--find-links参数指向对应目录,但此场景下不影响核心检查逻辑
  • 建议使用pip 20.0及以上版本,避免旧版本在版本约束匹配上的差异

内容的提问来源于stack exchange,提问作者ddulaney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:53:24