• 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
    
    • 1
    • 2

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

    # Exercise_sdk.py
    def testSdk():
        print("Exercise_sdk simple sdk testSdk")
    
    • 1
    • 2
    • 3

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    1.4 完成打包

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

    E:\volcstack-sdk>python setup.py bdist_egg
    
    • 1
    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)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

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

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

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

    1.5 使用自定义的sdk

    进入Python Console

    import MySDK
    MySDK.testSdk()
    Exercise_sdk simple sdk testSdk
    
    • 1
    • 2
    • 3

    发现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',
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

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

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

    include volcstack-sdk/Data/data1.txt
    
    • 1

    2.3 完成打包

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

    python setup.py bdist_wheel
    
    • 1

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

    pip install wheel
    
    • 1

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

    python setup.py bdist_wheel --universal
    
    • 1

    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
    • 2
    • 3
    • 4
    • 5

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

    import MySDK
    MySDK.testSdk()
    Exercise_sdk simple sdk testSdk
    
    • 1
    • 2
    • 3

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

  • 相关阅读:
    好玩的js特效
    WindowsAPI 进程和线程相关说明
    openEuler快速入门-Navicat远程链接openGauss数据库
    干货 | 人力资源数字化的优势和应用场景展示
    探究大语言模型如何使用长上下文
    2007-2008期末试题B卷
    java计算机毕业设计高校实习管理平台系统源码+mysql数据库+系统+lw文档+部署
    用两个栈实现一个队列
    分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>
    2022年最新《Java八股文面试宝典》全网独一份!(效率最高、知识最新、包含各个技术栈)
  • 原文地址:https://blog.csdn.net/rhx_qiuzhi/article/details/125022521