MacOS下如何用交互模式安裝依賴?相信大部分人都還沒學(xué)會(huì)這個(gè)技能,為了讓大家學(xué)會(huì),給大家總結(jié)了以下內(nèi)容,話不多說,一起往下看吧。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供葉城網(wǎng)站建設(shè)、葉城做網(wǎng)站、葉城網(wǎng)站設(shè)計(jì)、葉城網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、葉城企業(yè)網(wǎng)站模板建站服務(wù),10年葉城做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。Fun 和 Fcli 工具依賴于 docker 來模擬本地環(huán)境。
對(duì)于 MacOS 用戶可以使用 homebrew 進(jìn)行安裝:
brew cask install docker
brew tap vangie/formula
brew install fun
Windows 和 Linux 用戶安裝請(qǐng)參考:<https://github.com/aliyun/fun/blob/master/docs/usage/installation.md>
安裝好后,記得先執(zhí)行 fun config
初始化一下配置。
注意, 如果你已經(jīng)安裝過了 fun,確保 fun 的版本在 3.0.0-beta.1 以上。
$ fun --version
3.0.0-beta.1
函數(shù)計(jì)算以 Zip 壓縮文件格式作為約定的交付物,交付物通常包含代碼和依賴庫文件。這些依賴庫文件通常分為系統(tǒng)依賴(使用 apt-get 包管理安裝的庫)和語言運(yùn)行時(shí)依賴(使用語言相關(guān)的包管理器如 npm、pip 安裝的庫)。
通常情況下系統(tǒng)依賴和環(huán)境相關(guān),比如我們希望在函數(shù)里調(diào)用 brotli 命令解壓文件,如果我們在開發(fā)機(jī) mac 上,使用 brew install brotli
安裝了 brotil 命令,然后打包發(fā)布到函數(shù)計(jì)算平臺(tái)是無法運(yùn)行的。有時(shí)候即使開發(fā)機(jī)是 linux 也不一定可以。這是因?yàn)橥ㄟ^系統(tǒng)提供的包管理工具安裝的可執(zhí)行程序和動(dòng)態(tài)鏈接庫與系統(tǒng)的類型和版本強(qiáng)相關(guān)。不同系統(tǒng)上安裝的這些程序和文件不具備可移植性。
通常情況下語言依賴是平臺(tái)無關(guān)的,比如說使用 npm install jszip
安裝一個(gè) nodejs 依賴,該依賴可以運(yùn)行在不同的操作系統(tǒng)和不同的 nodejs 版本下。語言平臺(tái)上的依賴通常是可移植的,單也有例外的情況。如: npm install node-pty
就是一個(gè)存在原生綁定(native binding)的例子。node-pty 模塊安裝過程中,依賴一些 c/c++ 代碼,這些代碼會(huì)在安裝的過程中進(jìn)行編譯,我們知道 c/c++ 代碼雖然也具備平臺(tái)移植性,但是其編譯產(chǎn)物是不可移植的。
Fun 2.0 版本支持依賴安裝 DSL 文件 fun.yml,fun.yml 為依賴安裝提供了批量模式。日常開發(fā)提供了一種命令模式,如:fun install --package-type pip tensorflow
。在 Fun 3.0 中我們提供了一種全新的 DSL 文件 Funfile。Funfile 可以理解為 Dockerfile 的語法子集,讓熟悉 docker 的開發(fā)者可以快速上手。
但是無論是 fun.yml 或 Funfile,以及命令模式,對(duì)于開發(fā)者都有一個(gè)痛點(diǎn)。那就是不知道環(huán)境里當(dāng)前的狀態(tài):
開發(fā)者需要可以交互的沙箱環(huán)境。該功能在 Fun 2.0 中沒有,用戶常常使用 fcli sbox
命令作為替代,或者直接使用 fc-docker 項(xiàng)目提供的鏡像啟動(dòng)一個(gè) container。docker run --rm -it -v $(pwd):/code aliyunfc/runtime-python2.7:build bash
但是這些復(fù)雜的命令和參數(shù)需要用戶具備足夠的 docker 背景知識(shí)以及對(duì)函數(shù)計(jì)算工作原理的了解。
為了更好的解決上述問題,提升用戶的開發(fā)體驗(yàn),我們在 Fun 3.0 中提供了 fun install sbox
子命令。
$ fun install sbox --help
Usage: fun install sbox [-f|--function <[service/]function>] [-r|--runtime <runtime>] [-i|--interactive] [-e|--env key=val ...] [-e|--cmd <cmd>]
Start a local sandbox for installation dependencies or configuration
Options:
-f, --function <[service/]function> Specify which function to execute installation task.
-r, --runtime <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 <env> environment variable, ex. -e PATH=/code/bin (default: [])
-c, --cmd <cmd> command with arguments to execute inside the installation sandbox.
-h, --help output usage information
下面以項(xiàng)目 pyzbar_example 為例, pyzbar_example 項(xiàng)目包含如下文件
$ tree .
.
├── fun.yml
├── index.py
├── qrcode.png
└── template.yml
0 directories, 4 files
其中 template.yml 文件內(nèi)容如下
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: .
$ fun install sbox -f pyzbar-fun -i
using template: template.yml
root@fc-python3:/code# ls
fun.yml index.py qrcode.png template.yml
root@fc-python3:/code# exit
exit
$
在 template.yml 所在的項(xiàng)目目錄執(zhí)行 fun install sbox,其中參數(shù)
如果 template.yml 文件并不存在,或者 template.yml 配置文件內(nèi)的函數(shù)尚未配置可以 使用 --runtime 參數(shù)啟動(dòng)交互模式,此時(shí)當(dāng)前目錄會(huì)被掛載到沙箱環(huán)境的 /code 目錄。
$ fun install sbox -r nodejs10 -i
root@fc-nodejs10:/code# ls
fun.yml index.py qrcode.png template.yml
root@fc-nodejs10:/code# exit
exit
$
上面的方法適用于臨時(shí)啟動(dòng)一個(gè) sbox 做些動(dòng)手實(shí)驗(yàn)的場景。
$ fun install sbox -f pyzbar-fun -i
using template: template.yml
root@fc-python3:/code# fun-install apt-get install libblas3
Task => [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 --help
Usage: fun local [options] [command]
build function codes or install related depedencies for Function Compute
Options:
-h, --help output usage information
Commands:
apt-get install apt depencies
pip install pip depencies
build build function codes for Function Compute
help [cmd] display help for [cmd]
使用如下一行命令打印出 pyzbar-fun 函數(shù)的 sbox 內(nèi)預(yù)裝的 deb 包。
$ fun install sbox -f pyzbar-fun -c 'dpkg -l'
using template: template.yml
Desired=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 utilities
ii adduser 3.113+nmu3 all add and remove users and groups
ii apt 1.0.9.8.4 amd64 commandline package manager
ii apt-utils 1.0.9.8.5 amd64 package management related utility programs
ii autoconf 2.69-8 all automatic configure script builder
ii automake 1:1.14.1-4+deb8u1 all Tool for generating GNU Standards-compliant Makefiles
...(此處省略了許多行)
也可以通過管道將外部命令的內(nèi)容傳遞到內(nèi)部
$ echo hello | fun install sbox -r nodejs10 -i -c 'cat -'
hello
注意這里 -i
參數(shù)不能省略,該參數(shù)表示接受標(biāo)準(zhǔn)輸入。
fun install sbox
是 fcli sbox
的替代工具,除了支持交互模式,沿用了指定 runtime 啟動(dòng) sbox,也實(shí)現(xiàn)了 fun 風(fēng)格的指定函數(shù)啟動(dòng) sbox,更加便利。同時(shí)也支持內(nèi)聯(lián)命令和管道等非交互模式的用法,為編寫腳本提供了更好的支持。
以上就是用交互模式安裝依賴的詳細(xì)內(nèi)容,代碼示例簡單明了,如果在日常工作遇到此問題。通過這篇文章,希望你能有所收獲,更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站標(biāo)題:MacOS下如何用交互模式安裝依賴-創(chuàng)新互聯(lián)
文章來源:http://aaarwkj.com/article8/dsppip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、云服務(wù)器、面包屑導(dǎo)航、微信小程序、品牌網(wǎng)站制作、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容