setup.py编写指南
创始人
2024-01-25 03:05:35
0

目录

        • 引言
        • 具体讲解
          • RapidOCR目录结构如下
          • 执行代码
          • 预期最终结果
          • setup.py内容讲解
          • 参数具体讲解
        • 参考资料

引言

  • 最近工作遇到要打包模块为whl格式,便于交付部署,总是遇到使用setuptools的地方,在这里简单做一个小结。
  • 主要记录如何编写setup.py的代码,这里以RapidOCR项目为例讲解,力图做到言简意赅,看完可以上手。
  • 相关源码和文件可以在AI Studio这里查看和使用。

具体讲解

RapidOCR目录结构如下
RapidOCR
├── config.yaml
├── rapidocr_onnxruntime
│   ├── ch_ppocr_v2_cls
│   │   ├── config.yaml
│   │   ├── __init__.py
│   │   ├── text_cls.py
│   │   └── utils.py
│   ├── ch_ppocr_v3_det
│   │   ├── config.yaml
│   │   ├── __init__.py
│   │   ├── text_detect.py
│   │   └── utils.py
│   ├── ch_ppocr_v3_rec
│   │   ├── config.yaml
│   │   ├── __init__.py
│   │   ├── text_recognize.py
│   │   └── utils.py
│   ├── __init__.py
│   └── rapid_ocr_api.py
├── resources
│   ├── fonts
│   │   └── FZYTK.TTF
│   └── models
│       ├── ch_ppocr_mobile_v2.0_cls_infer.onnx
│       ├── ch_PP-OCRv3_det_infer.onnx
│       └── ch_PP-OCRv3_rec_infer.onnx
├── setup.py
├── test_demo.py
└── test_images├── ch_en_num.jpg└── single_line_text.jpg
执行代码
  • 注意:因为rapidocr_onnxruntime模块下有多个字模块,为了可以将rapidocr_onnxruntime作为一个整理打包进去,需要在rapidocr_onnxruntime外面再加一层。具体调整如下:
    rapidocr_onnxruntime/
    ├── __init__.py
    └── rapidocr_onnxruntime├── ch_ppocr_v2_cls│   ├── config.yaml│   ├── __init__.py│   ├── __pycache__│   ├── text_cls.py│   └── utils.py├── ch_ppocr_v3_det│   ├── config.yaml│   ├── __init__.py│   ├── __pycache__│   ├── text_detect.py│   └── utils.py├── ch_ppocr_v3_rec│   ├── config.yaml│   ├── __init__.py│   ├── __pycache__│   ├── text_recognize.py│   └── utils.py├── __init__.py├── __pycache__└── rapid_ocr_api.py
    
  • 执行python setup.py bdist_wheel,即可在dist目录下得到rapidocr_onnxruntime-1.0.0-py3-none-any.whl
预期最终结果
  • 最终目录结构为:
    .
    ├── rapidocr_onnxruntime-1.0.0-py3-none-any.whl
    ├── config.yaml
    ├── resources
    │   ├── fonts
    │   │   └── FZYTK.TTF
    │   └── models
    │       ├── ch_ppocr_mobile_v2.0_cls_infer.onnx
    │       ├── ch_PP-OCRv3_det_infer.onnx
    │       └── ch_PP-OCRv3_rec_infer.onnx
    └── test_demo.py
    
  • 使用:
    • 安装: pip install rapidocr_onnxruntime-1.0.0-py3-none-any.whl
    • 调用:
      import cv2
      from rapidocr_onnxruntime import RapidOCRrapid_ocr = RapidOCR('config.yaml')
      img = cv2.imread('test_images/ch_en_num.jpg')
      result =  text_sys(img)
      print(result)
      
setup.py内容讲解
# setup.py
import setuptoolsmodule_name = 'rapidocr_onnxruntime'setuptools.setup(name=module_name,version='1.0.0',platforms="Any",description="RapidOCR",author="SWHL",author_email="liekkaskono@163.com",url="https://github.com/RapidAI/RapidOCR",license='Apache-2.0',include_package_data=True,install_requires=["pyclipper>=1.2.1", "onnxruntime>=1.7.0","opencv_python>=4.5.1.48", "numpy>=1.19.3","six>=1.15.0", "Shapely>=1.7.1"],package_dir={'': module_name},packages=setuptools.find_packages(where=module_name),keywords=['ocr text_detection text_recognition db onnxruntime paddleocr openvino'],classifiers=['Programming Language :: Python :: 3.6','Programming Language :: Python :: 3.7','Programming Language :: Python :: 3.8','Programming Language :: Python :: 3.9',]
)
参数具体讲解

以下部分参数内容,可以在pip安装该库之后,通过命令pip show rapidocr_onnxruntime查看。

  • name: package名称,e.g. 具体对应上例就是rapidocr_onnxruntime这个package,里面必须有__init__.py文件。
  • version: package版本号, e.g. ·v0.0.1·
  • author: package作者, e.g. SWHL
  • author_email: 作者邮箱, e.g. liekkaskono@163.com
  • description: package描述, e.g. RapidOCR
  • url: 项目的github地址或者其他地址,e.g. https://github.com/RapidAI/RapidOCR
  • license: 许可证,需要根据自己情况决定采用哪个许可证, e.g. Apache-2.0
  • python_requires:指定python的版本范围,e.g. python_requires='<=3.7,>=2.7' (大于等于2.7,小于等于3.7)
  • install_requires: 项目依赖的python库,使用pip安装时会自动检查和安装依赖,可以灵活指定库的版本号,e.g. ['numpy>=1.19.5', 'opencv-python==4.4.54.8']
  • package_dir: 指定package所在的目录,e.g. package_dir={'': 'rapidocr_onnxruntime'}打包时,就会从rapidocr_onnxruntime目录下找寻package
  • packages: 指定要将哪些package打包进去,可以手动指定,也可以自动查找。
    • 手动指定示例:packages=['rapidocr', 'rapidocr.ch_ppocr_v2_cls']
    • 自动查找示例:packages=setuptools.find_packages(where=module_name)find_packages会自动查找where指定目录下的所有package,也就是说会查找指定目录下所有带有__init__.py的目录。
  • keywords: 逗号或空格分割的一系列关于该项目的关键词,e.g. keywords=['ocr text_detection text_recognition db onnxruntime paddleocr openvino']
  • classifiers: 指定一些提示,e.g. classifiers=['Programming Language :: Python :: 3.7',]
  • entry_points: 终端直接运行该库,例如:rapioocr --img_path xxx.jpg
    # rapidocr/rapid_ocr_api.py下必须要有main函数,
    def main():parser = argparse.ArgumentParser()parser.add_argument('--img_path', type=str, required=True)args = parser.parse_args()text_sys = RapidOCR()result = text_sys(args.img_path)print(result)if __name__ == '__main__':main()# setup.py写法:
    entry_points={'console_scripts': ['rapid_ocr=rapid_ocr.rapid_ocr_api:main'],
    }
    
  • include_package_data: 是否将package中相关文件也打包进去
    # 包含指定目录下的所有txt文件
    include_package_data=True,
    package_data={'': ['*.txt']}
    

参考资料

  • 官方文档

相关内容

热门资讯

创业板上市公司市值,2020创... “吕杨先生'的1000 相位分享”宁德时代,今天上涨5.98%,收于434.10元/股。股价创历史新...
投资二万的小型加工厂(加盟小型... 目前农村很多小规模的加工厂项目并不需要大量的投资,有的只需要几千或者几万的投资就可以完成。回答这个粉...
最挣钱没人干的行业,年轻人小额... 穷人想创业,却觉得街上生意多,竞争激烈,不知道做好什么。而对于穷人创业来说,钱是个大问题。今天我来介...
进口水果店加盟连锁,全国连锁品... 如今,新鲜丰富的水果更受消费者欢迎。市场上不同的加盟品牌,在提供优质产品的基础上,在特色产品类型、综...
一个人干的小本生意(想做小生意... 这个时代,除非高层能进入华为、腾讯这样的公司,否则干一辈子都赚不到钱。但是,一个人要想创业、投资、做...
创业板股票代码前三位(创业板股... 创业板指数今日上涨0.77%,收于2939.39点,总成交量为1453.6亿元,比上一交易日增加93...
2万创业可以做什么(1万块钱创... "劳动人民、劳动灵魂和劳动都是人."这在去年开始流行,所有工作的人都拿他们的工作开玩笑。经过几十年的...
创业板前十大市值个股(创业板上... 宁德时报(300750。中国领先的动力电池公司SZ今日开盘后一度上涨超过5%,股价接近430元,成为...
加盟店排行榜餐饮(小吃加盟排行... 餐饮业在我们的生活中随处可见。随着人们经济水平的提高,越来越多的朋友开始关注和享受美食。在业余时间,...
每一天赚500元,500元创业... 大家好,我们又见面了。我是你的老朋友,农民张。感谢您一直以来的支持和鼓励。在你的支持下,我可以在写作...