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.whlimport cv2
from rapidocr_onnxruntime import RapidOCR
rapid_ocr = RapidOCR('config.yaml')
img = cv2.imread('test_images/ch_en_num.jpg')
result = text_sys(img)
print(result)
# setup.py
import setuptools
module_name = 'rapidocr_onnxruntime'
setuptools.setup(
name=module_name,
version='1.0.0',
platforms="Any",
author="SWHL",
author_email="liekkaskono@163.com",
long_description=get_readme(),
long_description_content_type='text/markdown',
description="RapidOCR",
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',
],
extras_require={
"zope.testbrowser": ["zope.testbrowser>=5.5.1", "lxml>=4.2.4", "cssselect"],
"django": ["Django>=2.0.6", "lxml>=4.2.4", "cssselect"],
"flask": ["Flask>=2.0.2", "lxml>=4.2.4", "cssselect"],
"selenium": ["selenium>=4.1.0,<4.5.0"],
},
)
以下部分参数内容,可以在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
long_description: 该部分内容是pypi包下面的README文件,输入类型是str
long_description_content_type: 指定README类型text/markdown,根据所给description来具体指定
description: package描述,该部分内容会出现在下面示例图中红框位置:

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', 'A>=1, <2']
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']}
extras_require用法:为库下面指定一些特定领域的包依赖。官网docs | stackoverflow
pip install xxx[django]