pyxllib 0.3.116__tar.gz → 0.3.117__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyxllib-0.3.116/pyxllib.egg-info → pyxllib-0.3.117}/PKG-INFO +1 -1
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/data/sqlite.py +15 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/specialist/filelib.py +1 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/pupil.py +51 -0
- pyxllib-0.3.117/pyxllib/prog/scheduler.py +129 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib.egg-info/SOURCES.txt +1 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib.egg-info/requires.txt +14 -7
- {pyxllib-0.3.116 → pyxllib-0.3.117}/setup.py +2 -2
- {pyxllib-0.3.116 → pyxllib-0.3.117}/LICENSE +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/MANIFEST.in +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/README.md +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/drissionlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/file/xlsxlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/cachetools.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/multiprocs.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/jinjalib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/requirements.txt +0 -0
- {pyxllib-0.3.116 → pyxllib-0.3.117}/setup.cfg +0 -0
@@ -90,6 +90,8 @@ class SqlBuilder:
|
|
90
90
|
|
91
91
|
:param desc: 例如 'id%2=1'
|
92
92
|
"""
|
93
|
+
if not desc:
|
94
|
+
return
|
93
95
|
column, divisor_remainder = desc.split('%')
|
94
96
|
divisor, remainder = map(int, divisor_remainder.split('='))
|
95
97
|
return self.where_mod(column, divisor, remainder)
|
@@ -364,6 +366,19 @@ class SqlBase:
|
|
364
366
|
f'UPDATE {table_name} SET {kvs} WHERE {ops}',
|
365
367
|
self.cvt_types(vals))
|
366
368
|
|
369
|
+
def delete_row(self, table_name, where, *, commit=False):
|
370
|
+
""" 【删】删除数据
|
371
|
+
|
372
|
+
:param dict where: 怎么匹配到对应记录
|
373
|
+
:param commit: 建议减小commit频率,会极大降低性能
|
374
|
+
:return:
|
375
|
+
"""
|
376
|
+
ops = ' AND '.join([f'{k}=%s' for k in where.keys()])
|
377
|
+
vals = list(where.values())
|
378
|
+
self.commit_base(commit,
|
379
|
+
f'DELETE FROM {table_name} WHERE {ops}',
|
380
|
+
self.cvt_types(vals))
|
381
|
+
|
367
382
|
def select_col(self, table_name, col):
|
368
383
|
""" 获得一列数据,常使用的功能,所以做了一个封装
|
369
384
|
|
@@ -2312,6 +2312,7 @@ def cache_file(file, make_data_func: Callable[[], Any] = None, *,
|
|
2312
2312
|
def wrapper(*args2, **kwargs2):
|
2313
2313
|
|
2314
2314
|
f = XlPath.init(file, XlPath.tempdir())
|
2315
|
+
f.parent.mkdir(exist_ok=True, parents=True)
|
2315
2316
|
|
2316
2317
|
# 1 优先看是不是需要先从文件读取数据
|
2317
2318
|
if mode == 'read_first' and f.is_file():
|
@@ -1037,6 +1037,21 @@ class MultiProcessLauncher:
|
|
1037
1037
|
self.workers.append(worker)
|
1038
1038
|
return worker
|
1039
1039
|
|
1040
|
+
def add_process_python(self, file, args='', name=None, shell=False):
|
1041
|
+
""" 添加并启动一个Python模块作为后台进程。
|
1042
|
+
|
1043
|
+
:param file: 要执行的Python文件路径
|
1044
|
+
:param str|list args: 模块的参数
|
1045
|
+
:param name: 进程的名称,默认为模块名
|
1046
|
+
"""
|
1047
|
+
cmd = [f'{sys.executable}', f'{file}']
|
1048
|
+
if isinstance(args, str):
|
1049
|
+
cmd.append(args)
|
1050
|
+
else:
|
1051
|
+
cmd += list(args)
|
1052
|
+
|
1053
|
+
return self.add_process_cmd(cmd, name, shell=shell)
|
1054
|
+
|
1040
1055
|
def add_process_python_module(self, module, args='', name=None, shell=False):
|
1041
1056
|
""" 添加并启动一个Python模块作为后台进程。
|
1042
1057
|
|
@@ -1102,6 +1117,42 @@ class MultiProcessLauncher:
|
|
1102
1117
|
print_full_dataframe(df)
|
1103
1118
|
|
1104
1119
|
|
1120
|
+
def support_multi_processes(default_processes=1):
|
1121
|
+
""" 对函数进行扩展,支持并发多进程运行
|
1122
|
+
|
1123
|
+
注意被装饰的函数,需要支持 process_count、process_id 两个参数,来获得总进程数,当前进程id的信息
|
1124
|
+
"""
|
1125
|
+
|
1126
|
+
def decorator(func):
|
1127
|
+
|
1128
|
+
def wrapper(*args, **kwargs):
|
1129
|
+
process_count = int(kwargs.pop('process_count', default_processes))
|
1130
|
+
process_id = kwargs.pop('process_id', None)
|
1131
|
+
|
1132
|
+
if process_count == 1 or process_id is not None:
|
1133
|
+
if process_id is None:
|
1134
|
+
return func(*args, **kwargs)
|
1135
|
+
else:
|
1136
|
+
return func(*args, **kwargs, process_count=process_count, process_id=process_id)
|
1137
|
+
else:
|
1138
|
+
mpl = MultiProcessLauncher()
|
1139
|
+
for i in range(int(process_count)):
|
1140
|
+
cmds = [func.__name__,
|
1141
|
+
'--process_count', str(process_count),
|
1142
|
+
'--process_id', str(i)
|
1143
|
+
]
|
1144
|
+
cmds.extend(map(str, args)) # 添加位置参数
|
1145
|
+
for k, v in kwargs.items():
|
1146
|
+
cmds.append(f'--{k}') # 添加关键字参数的键
|
1147
|
+
cmds.append(str(v)) # 添加关键字参数的值
|
1148
|
+
mpl.add_process_python(sys.argv[0], cmds)
|
1149
|
+
mpl.run_endless()
|
1150
|
+
|
1151
|
+
return wrapper
|
1152
|
+
|
1153
|
+
return decorator
|
1154
|
+
|
1155
|
+
|
1105
1156
|
def xlmd5(content):
|
1106
1157
|
if isinstance(content, str):
|
1107
1158
|
content = content.encode('utf-8')
|
@@ -0,0 +1,129 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Author : 陈坤泽
|
4
|
+
# @Email : 877362867@qq.com
|
5
|
+
# @Date : 2024/06/18
|
6
|
+
|
7
|
+
|
8
|
+
from pyxllib.prog.pupil import check_install_package
|
9
|
+
|
10
|
+
check_install_package('croniter')
|
11
|
+
|
12
|
+
import datetime
|
13
|
+
import time
|
14
|
+
import sys
|
15
|
+
|
16
|
+
from croniter import croniter
|
17
|
+
|
18
|
+
|
19
|
+
class SchedulerUtils:
|
20
|
+
@classmethod
|
21
|
+
def calculate_future_time(cls, start_time, wait_seconds):
|
22
|
+
""" 计算延迟时间
|
23
|
+
|
24
|
+
:param datetime start_time: 开始时间
|
25
|
+
:param int wait_seconds: 等待秒数
|
26
|
+
todo 先只支持秒数这种标准秒数,后续可以考虑支持更多智能的"1小时"等这种解析
|
27
|
+
"""
|
28
|
+
return start_time + datetime.timedelta(seconds=wait_seconds)
|
29
|
+
|
30
|
+
@classmethod
|
31
|
+
def calculate_next_cron_time(cls, cron_tag, base_time=None):
|
32
|
+
""" 使用crontab标记的运行周期,然后计算相对当前时间,下一次要启动运行的时间
|
33
|
+
|
34
|
+
:param str cron_tag:
|
35
|
+
30 2 * * 1: 这部分是时间和日期的设定,具体含义如下:
|
36
|
+
30: 表示分钟,即每小时的第 30 分钟。
|
37
|
+
2: 表示小时,即凌晨 2 点。
|
38
|
+
第三个星号 *: 表示日,这里的星号意味着每天。
|
39
|
+
第四个星号 *: 表示月份,星号同样表示每个月。
|
40
|
+
1: 表示星期中的日子,这里的 1 代表星期一。
|
41
|
+
"""
|
42
|
+
|
43
|
+
# 如果没有提供基准时间,则使用当前时间
|
44
|
+
if base_time is None:
|
45
|
+
base_time = datetime.datetime.now()
|
46
|
+
# 初始化 croniter 对象
|
47
|
+
cron = croniter(cron_tag, base_time)
|
48
|
+
# 计算下一次运行时间
|
49
|
+
next_time = cron.get_next(datetime.datetime)
|
50
|
+
return next_time
|
51
|
+
|
52
|
+
@classmethod
|
53
|
+
def wait_until_time(cls, dst_time):
|
54
|
+
"""
|
55
|
+
:param datetime dst_time: 一直等待到目标时间
|
56
|
+
期间可以用time.sleep进行等待
|
57
|
+
"""
|
58
|
+
# 一般来说,只要计算一轮待等待秒数就行。但是time.sleep机制好像不一定准确的,所以使用无限循环重试会更好。
|
59
|
+
while True:
|
60
|
+
# 先计算当前时间和目标时间的相差秒数
|
61
|
+
wait_seconds = (dst_time - datetime.datetime.now()).total_seconds()
|
62
|
+
if wait_seconds <= 0:
|
63
|
+
break
|
64
|
+
time.sleep(max(1, wait_seconds)) # 最少等待1秒
|
65
|
+
|
66
|
+
@classmethod
|
67
|
+
def smart_wait(cls, start_time, end_time, wait_tag, print_mode=0):
|
68
|
+
""" 智能等待,一般用在对进程的管理重启上
|
69
|
+
|
70
|
+
:param datetime start_time: 程序启动的时间
|
71
|
+
:param datetime end_time: 程序结束的时间
|
72
|
+
:param str|float|int wait_tag: 等待标记
|
73
|
+
如果是str,则按照crontab解析
|
74
|
+
如果是int,则表示等待的秒数
|
75
|
+
如果是float,则表示等待的秒数
|
76
|
+
"""
|
77
|
+
# 1 尝试把wait_tag转成数值
|
78
|
+
try:
|
79
|
+
wait_tag = float(wait_tag)
|
80
|
+
except ValueError: # 转不成也没关系
|
81
|
+
pass
|
82
|
+
|
83
|
+
if start_time is None:
|
84
|
+
start_time = datetime.datetime.now()
|
85
|
+
if end_time is None:
|
86
|
+
end_time = datetime.datetime.now()
|
87
|
+
|
88
|
+
# 2 计算下一次启动时间
|
89
|
+
if isinstance(wait_tag, str):
|
90
|
+
# 按照crontab解析
|
91
|
+
next_time = cls.calculate_next_cron_time(wait_tag, end_time)
|
92
|
+
elif wait_tag >= 0:
|
93
|
+
# 正值则是从end_time开始往后等待
|
94
|
+
next_time = cls.calculate_future_time(end_time, wait_tag)
|
95
|
+
elif wait_tag < 0:
|
96
|
+
# 负值则是从start_time开始往前等待
|
97
|
+
next_time = cls.calculate_future_time(start_time, wait_tag)
|
98
|
+
else:
|
99
|
+
raise ValueError
|
100
|
+
|
101
|
+
if print_mode:
|
102
|
+
print(f'等待到时间{next_time}...')
|
103
|
+
|
104
|
+
cls.wait_until_time(next_time)
|
105
|
+
|
106
|
+
|
107
|
+
def trial():
|
108
|
+
# 设置基准时间
|
109
|
+
base_time = datetime.datetime.now()
|
110
|
+
# 定义crontab表达式
|
111
|
+
cron_expression = '30 2 * * 1' # 每周一凌晨2点30分执行
|
112
|
+
# 测试延迟功能
|
113
|
+
delayed_time = SchedulerUtils.calculate_future_time(base_time, 10) # 延迟10秒
|
114
|
+
# 测试crontab计算下一次运行时间
|
115
|
+
next_run_time = SchedulerUtils.calculate_next_cron_time(cron_expression, base_time)
|
116
|
+
|
117
|
+
print(base_time, delayed_time, next_run_time, sep='\n')
|
118
|
+
|
119
|
+
|
120
|
+
if __name__ == '__main__':
|
121
|
+
import fire
|
122
|
+
|
123
|
+
# 1 如果输入命令行参数,使用fire机制运行
|
124
|
+
if len(sys.argv) > 1:
|
125
|
+
fire.Fire()
|
126
|
+
exit()
|
127
|
+
|
128
|
+
# 2 否则执行这里的测试代码
|
129
|
+
trial()
|
@@ -21,22 +21,29 @@ Jinja2
|
|
21
21
|
pandas>=0.23.4
|
22
22
|
|
23
23
|
[xlai]
|
24
|
+
pynvml
|
24
25
|
opsdroid-get-image-size
|
26
|
+
opencv-python
|
25
27
|
pillow
|
26
|
-
pynvml
|
27
28
|
xlcocotools
|
28
29
|
visdom
|
29
|
-
opencv-python
|
30
30
|
|
31
31
|
[xlall]
|
32
|
+
flask-cors
|
33
|
+
html2text
|
34
|
+
ujson
|
35
|
+
flask-wtf
|
36
|
+
sentencepiece
|
37
|
+
flask-jwt-extended
|
38
|
+
flask
|
32
39
|
opsdroid-get-image-size
|
33
|
-
pillow
|
34
|
-
pynvml
|
35
|
-
xlcocotools
|
36
|
-
visdom
|
37
40
|
opencv-python
|
41
|
+
flask-restful
|
42
|
+
pillow
|
43
|
+
zhconv
|
44
|
+
xlrd
|
38
45
|
|
39
46
|
[xlcv]
|
40
|
-
opsdroid-get-image-size
|
41
47
|
pillow
|
48
|
+
opsdroid-get-image-size
|
42
49
|
opencv-python
|
@@ -44,7 +44,7 @@ _dir = Path(__file__).parent
|
|
44
44
|
|
45
45
|
setup(
|
46
46
|
name='pyxllib', # pip 安装时用的名字
|
47
|
-
version='0.3.
|
47
|
+
version='0.3.117', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
48
48
|
author='code4101',
|
49
49
|
author_email='877362867@qq.com',
|
50
50
|
url='https://github.com/XLPRUtils/pyxllib',
|
@@ -73,6 +73,6 @@ setup(
|
|
73
73
|
# ②开发版:python setup.py develop easy_install pyxllib[xlcv]
|
74
74
|
extras_require={'xlcv': '\n'.join(set((xlcv).splitlines())),
|
75
75
|
'xlai': '\n'.join(set((xlcv + xlai).splitlines())),
|
76
|
-
'xlall': '\n'.join(set((xlcv +
|
76
|
+
'xlall': '\n'.join(set((xlcv + xlall).splitlines())),
|
77
77
|
},
|
78
78
|
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|