python封装SDK

python生成sdk时,可以打包成.egg(windows下)也可以打包成.whl(linux或者windows下),然后执行pip3 install ***.whl就可以像往常的安装包一样使用了。这里先介绍下打包成.egg包作为打包的入门。

1 打包为适用于windows的.egg包

1.1 安装python-setuptools

对于已经运行过python project的,不需要另外安装。pip list先查阅。
在这里插入图片描述

1.2 新建项目

之类新建一个python工程,volcstack-sdk,新建README.md和setup.py文件。其下新建一个项目为MySDK,再新建一个Exercise_sdk.py文件,这里主要的作用是封装自己想给他人提供的API,结果如下所示:
在这里插入图片描述

# __init__.py
from MySDK.Exercise_sdk import testSdk

MySDK/init.py 导入API。
MySDK/Exercise_sdk.py可以封装自己的API

# Exercise_sdk.py
def testSdk():
    print("Exercise_sdk simple sdk testSdk")

1.3 setup函数

setup.py文件的主要作用是用于提供安装MySDK包

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# DevVersion: Python3.6.8
# Date: 2020-09-25 09:13
# PyCharm|setup

from setuptools import (setup, find_packages)

REQUIRES = [
    "certifi>=2020.04.01",
    "python-dateutil>=0.1.0",
    "urllib3>=1.0"
]

setup(
    # 包名
    name="MySdk",
    # 版本
    version="0.1.0",
    # github地址[我学习的样例地址]
    url='https://github.com/snowroll/python-sdk.git',
    # 包的解释地址
    long_description=open('ReadMe.md', encoding='utf-8').read(),
    setup_requires=REQUIRES,
    # 需要包含的子包列表
    packages=find_packages()
)

1.4 完成打包

进入到当前目录下,或者指定对应的执行目录,执行打包命令

E:\volcstack-sdk>python setup.py bdist_egg
running bdist_egg
running egg_info
creating MySdk.egg-info
writing MySdk.egg-info\PKG-INFO
writing dependency_links to MySdk.egg-info\dependency_links.txt
writing top-level names to MySdk.egg-info\top_level.txt
writing manifest file 'MySdk.egg-info\SOURCES.txt'
reading manifest file 'MySdk.egg-info\SOURCES.txt'
writing manifest file 'MySdk.egg-info\SOURCES.txt'
installing library code to build\bdist.win-amd64\egg
running install_lib
running build_py
creating build
creating build\lib
creating build\lib\MySDK
copying MySDK\Exercise_sdk.py -> build\lib\MySDK
copying MySDK\__init__.py -> build\lib\MySDK
creating build\bdist.win-amd64
creating build\bdist.win-amd64\egg
creating build\bdist.win-amd64\egg\MySDK
copying build\lib\MySDK\Exercise_sdk.py -> build\bdist.win-amd64\egg\MySDK
copying build\lib\MySDK\__init__.py -> build\bdist.win-amd64\egg\MySDK
byte-compiling build\bdist.win-amd64\egg\MySDK\Exercise_sdk.py to Exercise_sdk.cpython-37.pyc
byte-compiling build\bdist.win-amd64\egg\MySDK\__init__.py to __init__.cpython-37.pyc
creating build\bdist.win-amd64\egg\EGG-INFO
copying MySdk.egg-info\PKG-INFO -> build\bdist.win-amd64\egg\EGG-INFO
copying MySdk.egg-info\SOURCES.txt -> build\bdist.win-amd64\egg\EGG-INFO
copying MySdk.egg-info\dependency_links.txt -> build\bdist.win-amd64\egg\EGG-INFO
copying MySdk.egg-info\top_level.txt -> build\bdist.win-amd64\egg\EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating dist
creating 'dist\MySdk-0.1-py3.7.egg' and adding 'build\bdist.win-amd64\egg' to it
removing 'build\bdist.win-amd64\egg' (and everything under it)


即可完成MySDK的打包工作。此时当前工程下新增build,dist,MySdk.egg-info三个文件夹。如图:
在这里插入图片描述
此时dist下会生成一个***.egg的文件,这个是一个zip包,可以使用

unzip -l dist/MySdk-0.1.0-py3.7.egg

既然这里是学习方法,我们将该egg文件复制到 \python37\Lib\site-packages下,既然上面说到是windows下的zip,可以直接使用解压文件解压到当前目录下
在这里插入图片描述

1.5 使用自定义的sdk

进入Python Console

import MySDK
MySDK.testSdk()
Exercise_sdk simple sdk testSdk

发现windows打包成.egg相对较为容易些,但是因为.egg文件使用范围有限,因此下文再介绍下打包成.whl文件。

2 打包为通用的.whl包

2.1 文件要求

这里所谓的通用是指适用于windows,linux,unix系统的.whl文件包。打包成.whl包和.egg包有所不同。这里需要注意的是,一般情况下,我们只需要打包.py文件即可,但是有时可能需要打包部分非.py的数据,比如Data下一个data.txt文件。对于待打包的文件,在工程目录下需要有setup.py,setup.cfg(空文件),README.rst(功能同README.md文件),MANIFEST.in文件

在这里插入图片描述

2.2 setup函数

import os
import setuptools  # 没有的直接pip install一下就行了

setuptools.setup(
    name='MySDK',
    version='1.0',
    description='A MySDK for python packaging.',  # 一个简要的介绍而已
    long_description=open(
        os.path.join(
            os.path.dirname(__file__),
            'README.rst'
        )
    ).read(),
    packages=setuptools.find_packages(),
    include_package_data=True,
    author='xxx',
    author_email='xxx@gmail.com',
)

配合setup.py需要进行如下设置:

  • README.rst中需要保存一些说明性的语言,可以是包使用方法的demo
  • 因为打包过程一般默认打包.py文件,因此想要打包非py文件,需要在setup.py中加入
include_package_data = True

同时还需要加入MANIFEST.ini文件,对于MANIFEST.in文件中设置如下:

include volcstack-sdk/Data/data1.txt

2.3 完成打包

在当前工程目录下,执行如下命令:

python setup.py bdist_wheel

打包完成后目录结构如下所示:
在这里插入图片描述
在这里插入图片描述
如果报错,则表示当前环境没有安装wheel包,需要先进行安装。安装完成继续执行打包命令。

pip install wheel

注意:这里的环境信息决定了打包的sdk所支持的版本要求,我当前的环境是python37,因此完成打包后是不支持python2的,因此如果要无差别支持python2/3,,需要指定打包的参数。

python setup.py bdist_wheel --universal

2.4 使用自定义的sdk

此时继续将当前工程下dist下的.whl文件拷贝至\python37\Lib\site-packages下。使用如下命令安装。这里为了和上类比,还是将该whl文件拷贝到site-package下,当然也可以不用放在该目录下。

D:\python37\Lib\site-packages>pip install MySDK-1.0-py3-none-any.whl
Processing d:\python37\lib\site-packages\mysdk-1.0-py3-none-any.whl
Installing collected packages: MySDK
Successfully installed MySDK-1.0

引用和章节1.5中一样。(这里可以将上面的已经存在于site-package下的.egg包先手动删除)

import MySDK
MySDK.testSdk()
Exercise_sdk simple sdk testSdk

参考:
python打包SDK(windows+linux)

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是海康威视SDKPython 封装代码示例: ```python import os import time import json from hikvisionapi import Client # 初始化客户端 client = Client('http://192.0.0.64', 'admin', '12345') # 获取设备信息 device_info = client.get_device_info() # 获取通道列表 channels = client.get_channels() # 获取当前时间 current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) # 设置文件保存路径 save_path = os.path.join(os.getcwd(), 'recordings') # 创建文件夹 if not os.path.exists(save_path): os.makedirs(save_path) # 遍历通道列表 for channel in channels: channel_name = channel['name'] channel_id = channel['id'] # 开始录制 resp = client.start_recording(channel_id) if resp['status'] == 'success': print(f'{current_time} - {channel_name} 开始录制') # 等待5秒 time.sleep(5) # 停止录制 resp = client.stop_recording(channel_id) if resp['status'] == 'success': print(f'{current_time} - {channel_name} 停止录制') # 获取录制文件信息 recordings = client.get_recordings(channel_id) if recordings: # 获取最新录制文件 recording = recordings[-1] # 下载录制文件 recording_id = recording['id'] recording_name = recording['name'] recording_size = recording['size'] recording_url = recording['url'] recording_path = os.path.join(save_path, recording_name) print(f'{current_time} - {channel_name} 开始下载录制文件') client.download_recording(recording_url, recording_path) print(f'{current_time} - {channel_name} 下载完成') else: print(f'{current_time} - {channel_name} 无录制文件') else: print(f'{current_time} - {channel_name} 停止录制失败') else: print(f'{current_time} - {channel_name} 开始录制失败') ``` 这段代码使用了 `hikvisionapi` 库来封装了海康威视SDK的常用操作,包括获取设备信息、获取通道列表、开始录制、停止录制、获取录制文件信息、下载录制文件等。使用时需要将其中的IP地址、用户名、密码等信息修改为对应的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值