setuptools
的地方,在这里简单做一个小结。setup.py
的代码,这里以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
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
目录下找寻packagepackages
: 指定要将哪些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']}