一次腾讯云函数的适配开发
好长时间没有更新博客了,正好前天做了一个自动打卡脚本在腾讯云函数上的适配,中间遇到了一些问题,于是写篇文章来记录一下。
获取用户信息
之前的脚本是在Github Actions上定时运行的,获取用户信息的方案是从项目的Secrets中读取。中间其实还有写入到命令行然后再从命令行中读取字符等过程,目的只是保护用户信息不泄露。
命令行:
1 | python3 main.py <<EOF |
读取:
1 | while True: |
对于腾讯云函数,我采用的方法是将SCKEY和用户的信息都放入环境变量,这样别人在使用脚本的时候就只需要添加环境变量即可,不用修改代码。
修改之后的读取操作:
1 | while True: |
添加依赖
这是最麻烦的地方,腾讯云函数的运行环境并不是啥依赖都有,查询文档后得知没有的依赖需要和代码包一同打包上传。
- 在 requirements.txt 中配置依赖信息。
- 通过 pip install -r requirements.txt -t . 命令安装依赖包。
- 上传代码库时请将依赖库一同打包上传。
于是尝试把pycrytodome的Cryto模块打包直接上传,结果并不能运行。
查询文档:
函数运行的系统是 CentOS 7,您需要在相同环境下进行安装。若环境不一致,则可能导致上传后运行时出现找不到依赖的错误。您可参考云函数容器镜像进行依赖安装。
看了一下关于容器镜像的文档,好家伙还要用到Docker,但我之前连Docker是干啥的都不知道。。
没办法,硬着头皮下了一个Docker Desktop,升级了下wsl子系统环境(虽然并没有用到wsl2),让后用命令docker pull ccr.ccs.tencentyun.com/scf-repo/runtime-python3:latest
拉取容器镜像,把项目文件夹挂载到镜像容器内,然后使用下面的命令安装依赖:
pip3 install pipreqs
pipreqs ./
pip install -r requirements.txt -t ./
其中pipreqs把urllib和requests这两个依赖也放进了requirements.txt,但腾讯云函数的运行环境已经有这两个依赖了,手动去掉即可。
安装完依赖后打包上传,部署并测试,终于能够正常运行了。