千家信息网

MacOS下如何用交互模式安装依赖

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,MacOS下如何用交互模式安装依赖?相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。依赖工具DockerFunFun 和 Fcli 工具依赖于 docke
千家信息网最后更新 2026年11月01日MacOS下如何用交互模式安装依赖

MacOS下如何用交互模式安装依赖?相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。

依赖工具

  • Docker
  • Fun

Fun 和 Fcli 工具依赖于 docker 来模拟本地环境。

对于 MacOS 用户可以使用 homebrew 进行安装:

brew cask install dockerbrew tap vangie/formulabrew install fun

Windows 和 Linux 用户安装请参考:

安装好后,记得先执行 fun config 初始化一下配置。

注意, 如果你已经安装过了 fun,确保 fun 的版本在 3.0.0-beta.1 以上。

$ fun --version3.0.0-beta.1

背景

函数计算以 Zip 压缩文件格式作为约定的交付物,交付物通常包含代码和依赖库文件。这些依赖库文件通常分为系统依赖(使用 apt-get 包管理安装的库)和语言运行时依赖(使用语言相关的包管理器如 npm、pip 安装的库)。

系统依赖通常不可移植

通常情况下系统依赖和环境相关,比如我们希望在函数里调用 brotli 命令解压文件,如果我们在开发机 mac 上,使用 brew install brotli 安装了 brotil 命令,然后打包发布到函数计算平台是无法运行的。有时候即使开发机是 linux 也不一定可以。这是因为通过系统提供的包管理工具安装的可执行程序和动态链接库与系统的类型和版本强相关。不同系统上安装的这些程序和文件不具备可移植性。

语言依赖也存在不可移植的情况

通常情况下语言依赖是平台无关的,比如说使用 npm install jszip 安装一个 nodejs 依赖,该依赖可以运行在不同的操作系统和不同的 nodejs 版本下。语言平台上的依赖通常是可移植的,单也有例外的情况。如: npm install node-pty 就是一个存在原生绑定(native binding)的例子。node-pty 模块安装过程中,依赖一些 c/c++ 代码,这些代码会在安装的过程中进行编译,我们知道 c/c++ 代码虽然也具备平台移植性,但是其编译产物是不可移植的。

DSL 脚本的不足

Fun 2.0 版本支持依赖安装 DSL 文件 fun.yml,fun.yml 为依赖安装提供了批量模式。日常开发提供了一种命令模式,如:fun install --package-type pip tensorflow。在 Fun 3.0 中我们提供了一种全新的 DSL 文件 Funfile。Funfile 可以理解为 Dockerfile 的语法子集,让熟悉 docker 的开发者可以快速上手。

但是无论是 fun.yml 或 Funfile,以及命令模式,对于开发者都有一个痛点。那就是不知道环境里当前的状态:

  1. 已经安装的软件有哪些
  2. 某个目录下有些什么文件
  3. 文件的内容以及属性是什么

开发者需要可以交互的沙箱环境。该功能在 Fun 2.0 中没有,用户常常使用 fcli sbox 命令作为替代,或者直接使用 fc-docker 项目提供的镜像启动一个 container。docker run --rm -it -v $(pwd):/code aliyunfc/runtime-python2.7:build bash 但是这些复杂的命令和参数需要用户具备足够的 docker 背景知识以及对函数计算工作原理的了解。

为了更好的解决上述问题,提升用户的开发体验,我们在 Fun 3.0 中提供了 fun install sbox 子命令。

命令行参数

$ fun install sbox --helpUsage: fun install sbox [-f|--function <[service/]function>] [-r|--runtime ] [-i|--interactive] [-e|--env key=val ...] [-e|--cmd ]Start a local sandbox for installation dependencies or configurationOptions:  -f, --function <[service/]function>  Specify which function to execute installation task.  -r, --runtime               function runtime, avaliable choice is: nodejs6, nodejs8, nodejs10, python2.7, python3, java8, php7.2, custom  -i, --interactive                    run as interactive mode. Keep STDIN open and allocate a pseudo-TTY when in a interactive shell. (default: false)  -e, --env                       environment variable, ex. -e PATH=/code/bin (default: [])  -c, --cmd                       command with arguments to execute inside the installation sandbox.  -h, --help                           output usage information

快速开始

下面以项目 pyzbar_example 为例, pyzbar_example 项目包含如下文件

$  tree ..├── fun.yml├── index.py├── qrcode.png└── template.yml0 directories, 4 files

其中 template.yml 文件内容如下

ROSTemplateFormatVersion: '2015-09-01'Transform: 'Aliyun::Serverless-2018-04-03'Resources:pyzbar-srv:Type: 'Aliyun::Serverless::Service'pyzbar-fun:    Type: 'Aliyun::Serverless::Function'    Properties:    Handler: index.handler    Runtime: python3    Timeout: 60    MemorySize: 128    CodeUri: .

启动交互模式 sbox

$ fun install sbox -f pyzbar-fun -iusing template: template.ymlroot@fc-python3:/code# lsfun.yml  index.py  qrcode.png  template.ymlroot@fc-python3:/code# exitexit$

在 template.yml 所在的项目目录执行 fun install sbox,其中参数

  • -f/--function 参数指定启动 sbox 的函数,本例中函数所设定的 runtime 为 python3,所以 python3 环境的沙箱环境会被启动起来,函数 pyzbar-fun 所对应的 CodeUri 目录会被挂载到沙箱环境内部的 /code 目录,上面例子中在沙箱环境内 ls 命令返回的文件列表证实了这一点。
  • -i/--interactive 参数表示启动交互模式,对应非交互模式的用途可以看后面的示例。

如果 template.yml 文件并不存在,或者 template.yml 配置文件内的函数尚未配置可以 使用 --runtime 参数启动交互模式,此时当前目录会被挂载到沙箱环境的 /code 目录。

$ fun install sbox -r nodejs10 -iroot@fc-nodejs10:/code# lsfun.yml  index.py  qrcode.png  template.ymlroot@fc-nodejs10:/code# exitexit$

上面的方法适用于临时启动一个 sbox 做些动手实验的场景。

使用 fun-install 安装 apt 和 pip 依赖
$ fun install sbox -f pyzbar-fun -iusing template: template.ymlroot@fc-python3:/code# fun-install apt-get install libblas3Task => [UNNAMED]     => apt-get update (if need)     => apt-get install -y -d -o=dir::cache=/code/.fun/tmp libblas3     => bash -c        for f in $(ls /code/.fun/tmp/archives/*.deb); do          dpkg -x $f /code/.fun/root;          mkdir -p /code/.fun/tmp/deb-control/${f%.*};          dpkg -e $f /code/.fun/tmp/deb-control/${f%.*};          if [ -f "/code/.fun/tmp/deb-control/${f%.*}/postinst" ]; then            FUN_INSTALL_LOCAL=true /code/.fun/tmp/deb-control/${f%.*}/postinst configure;          fi;        done;     => bash -c 'rm -rf /code/.fun/tmp/archives'root@fc-python3:/code# fun-install --helpUsage: fun local [options] [command]build function codes or install related depedencies for Function ComputeOptions:  -h, --help  output usage informationCommands:  apt-get     install apt depencies  pip         install pip depencies  build       build function codes for Function Compute  help [cmd]  display help for [cmd]

非交互模式下使用 sbox

使用如下一行命令打印出 pyzbar-fun 函数的 sbox 内预装的 deb 包。

$ fun install sbox -f pyzbar-fun -c 'dpkg -l'using template: template.ymlDesired=Unknown/Install/Remove/Purge/Hold| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)||/ Name                               Version                          Architecture Description+++-==================================-================================-============-===============================================================================ii  acl                                2.2.52-2                         amd64        Access control list utilitiesii  adduser                            3.113+nmu3                       all          add and remove users and groupsii  apt                                1.0.9.8.4                        amd64        commandline package managerii  apt-utils                          1.0.9.8.5                        amd64        package management related utility programsii  autoconf                           2.69-8                           all          automatic configure script builderii  automake                           1:1.14.1-4+deb8u1                all          Tool for generating GNU Standards-compliant Makefiles...(此处省略了许多行)

也可以通过管道将外部命令的内容传递到内部

$  echo hello | fun install sbox -r nodejs10  -i -c 'cat -'hello

注意这里 -i 参数不能省略,该参数表示接受标准输入。

小结

fun install sbox 是 fcli sbox 的替代工具,除了支持交互模式,沿用了指定 runtime 启动 sbox,也实现了 fun 风格的指定函数启动 sbox,更加便利。同时也支持内联命令和管道等非交互模式的用法,为编写脚本提供了更好的支持。

以上就是用交互模式安装依赖的详细内容,代码示例简单明了,如果在日常工作遇到此问题。通过这篇文章,希望你能有所收获,更多详情敬请关注行业资讯频道!

模式 命令 文件 函数 环境 参数 系统 开发 目录 移植 代码 内容 沙箱 用户 语言 工具 平台 情况 版本 项目 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大一互联网络科技有限公司 新华互联网科技学校 美国互联网保险保险科技 互联网下的科技发展 没上市的科技互联网公司 华中科技大学互联网 广州善班互联网科技 联恩商钥互联网科技有限公司 顺网科技2021年互联网排名 衡水科技产业互联网平台 哈尔滨秒房互联网科技有限公司 云创客互联网科技公司 青岛中康互联网医疗科技有限公司 岳阳华臻互联网科技有限公司 互联网时代的科技公司 怎样加入科技互联网 上海互联网科技公司ppt 互联网科技对化妆品行业 互联网的黑科技实验室 互联网大会出现的黑科技 互联网科技园 深圳市人人互联网科技有限公司 鸠鸠互联网科技 有马互联网科技 互联网汽车科技小镇 中国互联网有什么科技含量 崇明区互联网教育科技诚信经营 深圳市优智互联网科技有限公司 互联网公司高科技产品 互联网科技数字货币
0