出于业务需要,在函数服务的代码中要进行HTTP调用,自然而然会想到使用知名的requests库,然而SCF的Python环境除了标准库之外只有COS的库,无奈只好手动下载requests库及其依赖,好在使用pip download <package>命令可以直接下载pypi库的wheel文件,再配合wheel unpack <pacakge.wheel>命令,可以方便的把需要的库及其依赖的源代码下载下来,再加上一些后续的处理(wheel文件解压之后有两个子文件夹,一个代码文件夹,一个包发行说明文件夹,需要再进行一下文件夹的移动),我写了一个简单的添加pypi库的命令scf-add(https://github.com/duyixian1234/scf_add)。
开发一个命令行工具,选用一个合适的辅助库是很关键的,毕竟只用argparse还是有点麻烦,我选择了flask-cli使用的click库,可以方便的通过装饰器编写命令行应用,一个来自官方文档的示例是这样的。
import click
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
help='The person to greet.')
def hello(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for x in range(count):
click.echo('Hello %s!' % name)
if __name__ == '__main__':
hello()
这样就完成了一个简单的问候程序。
$ python hello.py --count=3
Your name: John
Hello John!
Hello John!
Hello John!
主要的逻辑代码就很简单了,使用subprocess.getstatusoutput()方法来执行pip download <package> 和wheel unpack 命令,再用shutil标准库进行文件夹的复制和删除。
为了将命令直接作为可执行文件执行,需要在setup.py进行相关的配置,添加一个entry_point
setup(
#...
entry_points={
'console_scripts': ['scf-add=scf_add:main'],
},
#...
)
pip直接安装
pip install scf-add
使用的时候也很简单
scf-add add <package>
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。