本文介绍如何通过fun install命令及Funfile文件安装第三方依赖。

注意 本文介绍的内容后期将不再维护。如果您的函数计算资源是使用Funcraft管理的,建议您将资源迁移至Serverless Devs管理。

关于如何将函数计算的相关资源从Funcraft迁移到Serverless Devs进行管理的详细操作,请参见从Funcraft迁移到Serverless Devs

关于Serverless Devs的详细信息,请参见什么是Serverless Devs

关于如何使用Serverless Devs安装依赖,请参见多语言安装依赖示例

由此带来的不便,敬请谅解!

功能介绍

执行以下命令,获取fun install命令下的相关功能。
fun install -h
预期输出:
Usage: fun install [-f|--function <[service/]function>] [-r|--runtime <runtime>] [-p|--package-type <type>] [--save] [-e|--env key=val ...] [packageNames...]

install dependencies which are described in fun.yml file.

Options:
  -f, --function <[service/]function>  Specify which function to execute installation task.
  -e, --env <env>                      environment variable, ex. -e PATH=/code/bin (default: [])
  -d, --use-docker                     Use docker container to install function dependencies
  -r, --runtime <runtime>              function runtime, avaliable choice is: nodejs6, nodejs8, nodejs10,
                                       nodejs12, python2.7, python3, java8, php7.2, dotnetcore2.1, custom
  -p, --package-type <type>            avaliable package type option: pip, apt, npm.
  --save                               add task to fun.yml file.
  --registry <npm-url>                 Configure npm to use any compatible registry, and even run your own
                                       registry.
  --index-url <pip-url>                Base URL of Python Package Index (default https://pypi.org/simple). This should point to a repository compliant with PEP 503 (the simple repository API) or a local
                                       directory laid out in the same format.
  -h, --help                           display help for command

Commands:
  init                                 initialize fun.yml file.
  env                                  print environment varables.
  sbox [options]                       Start a local sandbox for installation dependencies or
                                       configuration

fun install命令安装依赖

操作步骤

在项目目录中执行以下命令,安装Python环境下的pip包。
fun install --runtime python2.7 --package-type pip tensorflow  
预期输出:
skip pulling image aliyunfc/runtime-python2.7:build-1.2.0...
Task => [UNNAMED]
     => PYTHONUSERBASE=/code/.fun/python pip install --user tensorflow 
参数说明如下:
  • --runtime:指定运行的环境,您可以按需修改相应的运行环境。如果template.yml里已经声明了运行环境,说明文件已经被初始化,您可以省略该选项。
  • --package-type:指定安装依赖的类型。
  • tensorflow:自定义pip包的文件名称,本文以tensorflow为例。
  • PYTHONUSERBASE=/code/.fun/python pip install --user tensorflow:命令在FC-Docker提供的容器内部执行,执行的命令会逐行打印出来。
    注意 APT包依赖的安装方式及其参数和pip包依赖类似,如果您需要安装APT包的依赖,您需要将pip修改为apt,APT的包名使用apt-get可以安装的DEB格式的包名即可。

安装结果

pip包安装成功后,项目目录中会生成一个.fun目录。
  • .fun/python/bin:可执行文件被放置的目录。
  • .fun/python/lib/python2.7/site-packages:库文件放置的目录。
文件存放结构如下所示:
.fun
└── python
    ├── bin
    │   ├── freeze_graph
    │   ├── markdown_py
    │   ├── pbr
    │   ├── saved_model_cli
    │   ├── tensorboard
    │   ├── tflite_convert
    │   ├── toco
    │   └── toco_from_protos
    └── lib
        └── python2.7
            └── site-packages
                ├── tensorboard
                ├── tensorboard-1.12.2.dist-info
                ├── tensorflow
                ├── tensorflow-1.12.0.dist-info
                ├── termcolor-1.1.0.dist-info
                ...            
pip install -t . <package-name>方式相比,使用fun install安装文件的优点如下:
  • 存放位置更有组织性。
  • 依赖文件和代码文件分离开,便于借助OSS或NAS初始化依赖文件。

安装成功后,库文件可能无法被程序找到,您需要自定义环境变量,关于如何配置函数计算的环境变量,请参见环境变量。您也可以执行以下命令获取相应的环境变量。

fun install env           
预期输出:
LD_LIBRARY_PATH=/code/.fun/root/usr/local/lib:/code/.fun/root/usr/lib:/code/.fun/root/usr/lib/x86_64-linux-gnu:/code/.fun/root/usr/lib64:/code/.fun/root/lib:/code/.fun/root/lib/x86_64-linux-gnu:/code/.fun/root/python/lib/python2.7/site-packages:/code/.fun/root/python/lib/python3.6/site-packages:/code:/code/lib:/usr/local/lib
PATH=/code/.fun/root/usr/local/bin:/code/.fun/root/usr/local/sbin:/code/.fun/root/usr/bin:/code/.fun/root/usr/sbin:/code/.fun/root/sbin:/code/.fun/root/bin:/code:/code/node_modules/.bin:/code/.fun/python/bin:/code/.fun/node_modules/.bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/sbin:/bin
NODE_PATH=/code/node_modules:/usr/local/lib/node_modules
PYTHONUSERBASE=/code/.fun/python
说明 如果您是使用fun localfun deploy进行调试和部署时,Funcraft会自动为您配置环境变量,无需手动配置。

(可选)相关操作

  • 保存文件
    如果您需要将命令永久保存在Funfile文件中。您可以执行以下命令。
    fun install --runtime python2.7 --package-type pip --save tensorflow                  
    预期输出:
    skip pulling image aliyunfc/runtime-python2.7:build-1.2.0...
    Task => [UNNAMED]     
    => PYTHONUSERBASE=/code/.fun/python pip install --user tensorflow 
  • 查看日志
    如果您需要查看详细日志。您可以执行以下命令。
    fun install -v
    预期输出:
    skip pulling image aliyunfc/runtime-python3.6:build-1.2.0...
    Task => [UNNAMED]
         => apt-get update (if need)
    Ign http://mirrors.aliyun.com stretch InRelease
    Get:1 http://mirrors.aliyun.com stretch-updates InRelease [91.0 kB]
    Get:2 http://mirrors.aliyun.com stretch-backports InRelease [91.8 kB]
    Get:3 http://mirrors.aliyun.com stretch/updates InRelease [94.3 kB]
    Hit http://mirrors.aliyun.com stretch Release.gpg
    Hit http://mirrors.aliyun.com stretch Release
    Get:4 http://mirrors.aliyun.com stretch-updates/main Sources [3911 B]
    ....                   

更多信息

执行fun install命令后安装的依赖会被安装到代码目录中,同时您也可以通过fun local的相关命令进行本地调试,也可以通过fun deploy一键部署到云端。相关信息,请参见使用fun local进行本地调试使用fun deploy部署应用