这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战
在我们日常工作中,经常需要与上下游交互,特别是当我们做一些基础服务时,需要提供个其他部门使用,因此,需要编写相应的SDK上传至公司私服,供其他部门使用。今天,果冻就来和大家一起实现一个简单的Python SDK,并进行私服的上传和下载。
编写Python SDK代码
工程目录结构
1 | markdown复制代码├──── easyhttp // SDK目录 |
requirements.txt
1 | txt复制代码requests==2.24.0 |
https.py
1 | python复制代码# -*- coding:utf8 -*- |
test_https.py
1 | python复制代码import requests |
代码写完了之后,打包并上传到私服。
打包并上传私服
安装twine包
1 | 复制代码pip install twine |
编写构建工具setup.py进行打包
1 | python复制代码# -*- coding:utf8 -*- |
setup.py各参数简单介绍如下:
- –name 包名称
- –version (-V) 包版本
- –author 程序的作者
- –author_email 程序的作者的邮箱地址
- –maintainer 维护者
- –maintainer_email 维护者的邮箱地址
- –url 程序的官网地址
- –license 程序的授权信息
- –description 程序的简单描述
- –long_description 程序的详细描述
- –platforms 程序适用的软件平台列表
- –classifiers 程序的所属分类列表
- –keywords 程序的关键字列表
- –packages 需要处理的包目录(包含__init__.py的文件夹)
- –py_modules 需要打包的python文件列表
- –download_url 程序的下载地址
- –data_files 打包时需要打包的数据文件,如图片,配置文件等
- –scripts 安装时需要执行的脚步列表
- –package_dir 告诉setuptools哪些目录下的文件被映射到哪个源码包。一个例子:package_dir = {‘’: ‘lib’},表示“root package”中的模块都在lib 目录中。
- –requires 定义依赖哪些模块
- –provides 定义可以为哪些模块提供依赖
- –find_packages() 对于简单工程来说,手动增加packages参数很容易,刚刚我们用到了这个函数,它默认在和setup.py同一目录下搜索各个含有 init.py的包。其实我们可以将包统一放在一个src目录中,另外,这个包内可能还有aaa.txt文件和data数据文件夹。还可以排除一些特定的包find_packages(exclude=[“.tests”, “.tests.*”, “tests.*”, “tests”])
- –install_requires = [“requests”] 需要安装的依赖包
- –entry_points 动态发现服务和插件
新增.pypirc文件
touch ~/.pypirc
在.pypirc文件添加如下配置
1 | toml复制代码[distutils] |
打包并上传至私服仓库nexus
python setup.py sdist bdist_wheel upload -r nexus
或者打包命令和上传命令分开操作
1、打包命令
python setup.py sdist bdist_wheel
2、上传命令
twine upload -r nexus dist/* # -r 可以选择仓库地址
创建虚拟环境,并下载私服包进行验证
创建虚拟环境
1 | bash复制代码virtualenv -p /usr/bin/python venv |
激活虚拟环境
1 | bash复制代码source venv/bin/activate |
下载包
1 | bash复制代码pip install easyhttp==1.0.0 -i http://your_username:your_password@192.168.12.196:8081/repository/mypypi-hosted/simple/ --trusted-host 192.168.12.196 |
进入python shell环境
python
代码验证
1 | bash复制代码>>> from pai.utils.https import HttpUtils |
至此,一个简单的Python SDK就已经制作完成,并且实现了SDK到私服的上传与下载。
本文转载自: 掘金