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|setupfrom 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)

python封装SDK相关推荐

  1. python调用sdk的文章_如何使用 python 接入虹软 ArcFace SDK

    公司需要在项目中使用人脸识别SDK,并且对信息安全的要求非常高,在详细了解市场上几个主流人脸识别SDK后,综合来看虹软的Arcface SDK比较符合我们的需求,它提供了免费版本,并且可以在离线环境下 ...

  2. 使用uiautomator的python封装进行android的UI测试

    基本的需求是这样的,安装被测试的应用,启动并退出,然后安装测试样本,检测是否有相应的弹窗拦截 考虑到市面上的各种测试框架与自已熟悉的编程语言,最后选择了google自家的uiautomator来搞,借 ...

  3. python利器怎么编程-bluepy 一款python封装的BLE利器简单介绍

    1.bluepy 简介 bluepy 是github上一个很好的蓝牙开源项目,其地址在 LINK-1, 其主要功能是用python实现linux上BLE的接口. This is a project t ...

  4. python封装sql脚本 github_Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码...

    原标题:Github 大牛封装 Python 代码,实现自动发送邮件只需三行代码 在运维开发中,使用 Python 发送邮件是一个非常常见的应用场景.今天一起来探讨一下,GitHub 的大牛门是如何使 ...

  5. linux sdk 窗口句柄,Venus: 针对Linux平台上,对常用的系统API进行面向对象的封装SDK。...

    Venus 项目介绍 Linux平台上,对常用的系统API进行面向对象的封装SDK,使用C++实现,没有使用C++11特效,支持CentOS.Ubuntu.RedHat各个发行版本和不同内核版本使用, ...

  6. swift 打包sdk_在封装SDK中Swift和OC混编之相互调用

    oc和swift混编之相互调用.jpg 在非SDK中: 1.swift调用oc 步骤: 创建 工程名-Bridging-Header.h 放入oc的头文件,swift即可调用 在swift项目中或者在 ...

  7. python的底层实现,Python封装底层实现原理详解(通俗易懂)

    事实上,Python 封装特性的实现纯属"投机取巧",之所以类对象无法直接调用以双下划线开头命名的类属性和类方法,是因为其底层实现时,Python 偷偷改变了它们的名称. 前面章节 ...

  8. python封装概念_Python封装及解构

    python封装及解构 Python的封装与其他语言的封装箱不同,python中没有装箱的概念,一切皆对象 将多个值使用逗号进行分割,本质上是返回元组 In [1]: a = 1,2 In [2]: ...

  9. python的sdk是什么意思_python sdk

    关于 python sdk的搜索结果 问题 命令行工具 CLI:用户指南:阿里云 Python SDK 列表 阿里云各产品对应的 Python SDK 如下所示. 产品Python SDK账号登录al ...

最新文章

  1. 产品经理如何在技术人员面前更有说服力?
  2. J0ker的CISSP之路:复习Access Control(10)
  3. python3-基础6
  4. python语言程序设计基础第二版第六章答案-Python语言程序设计基础(第2版) 课后题 第六章...
  5. 11_短信发送器_快速回复页面实现
  6. iOS-----使用NSURLConnection
  7. 设计模式之 六大原则
  8. 输入输出流——字符流部分
  9. Word 2007批注及批注者姓名修改技巧
  10. 阿里云ECS+Nginx+nginx_rtmp_module+FFMPEG服务器搭建过程
  11. Oracle 日期时间函数大全
  12. 基于nodejs,tinypng的压缩图片工具
  13. Magic Swf2Gif(SWF转换GIF)绿色汉化版 V1.35
  14. linux系统安装yarn,centos安装yarn
  15. 企业微信oauth认证_企业微信登陆
  16. 加载类型库/DLL 时出错。 (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)
  17. 北斗短报文通信原理及功能介绍
  18. Mysql语句商城系统表案例
  19. 分销平台传统的宣传流程
  20. java程序license验证_基于TrueLicense实现产品License验证功能

热门文章

  1. 读书的心情总是那么好,心情愉悦
  2. Unicode编码是什么?
  3. 二叉树的前序中序后序遍历java代码实现
  4. “HTTP 错误 500.19”的错误解决方法
  5. 使用照相机开启闪光灯
  6. 15. Traits基础
  7. Rust 五分钟印象
  8. ERA5 积雪 降雪 区别_漠河降雪量已达入秋以来最大级别
  9. 梦网云通讯平台API单条短信发送接口single_send说明POST请求实例
  10. java避免装箱_深入剖析Java中的装箱和拆箱