pyxllib 0.3.144__tar.gz → 0.3.148__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.144/pyxllib.egg-info → pyxllib-0.3.148}/PKG-INFO +13 -13
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/autogui/uiautolib.py +24 -10
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/autogui/wechat.py +34 -11
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/autogui/wechat_msg.py +2 -0
- pyxllib-0.3.148/pyxllib/prog/filelock.py +42 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/multiprogs.py +131 -32
- {pyxllib-0.3.144 → pyxllib-0.3.148/pyxllib.egg-info}/PKG-INFO +13 -13
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib.egg-info/SOURCES.txt +1 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/setup.py +1 -1
- {pyxllib-0.3.144 → pyxllib-0.3.148}/LICENSE +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/MANIFEST.in +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/README.md +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/autogui/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/autogui/activewin.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/autogui/all.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/autogui/autogui.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/data/echarts.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/data/jsonlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/drissionlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/robustprocfile.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/libreoffice.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/xlsxlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/file/xlsyncfile.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/cachetools.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/pupil.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/jinjalib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/templates/echart_base.html +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/templates/highlight_code.html +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/templates/latex_editor.html +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib.egg-info/requires.txt +12 -12
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/data/tiktokenlib.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/openai2/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/openai2/_core/chat.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/openai2/_core/chat_in_cmd.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/openai2/_core/group_chat.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/openai2/openai2.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/requirements.txt +0 -0
- {pyxllib-0.3.144 → pyxllib-0.3.148}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pyxllib
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.148
|
4
4
|
Summary: 厦门理工模式识别团队通用python代码工具库
|
5
5
|
Home-page: https://github.com/XLPRUtils/pyxllib
|
6
6
|
Author: code4101
|
@@ -39,32 +39,32 @@ Requires-Dist: pandas>=0.23.4
|
|
39
39
|
Requires-Dist: pillow
|
40
40
|
Provides-Extra: xlcv
|
41
41
|
Requires-Dist: pillow; extra == "xlcv"
|
42
|
-
Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
|
43
42
|
Requires-Dist: opencv-python; extra == "xlcv"
|
43
|
+
Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
|
44
44
|
Provides-Extra: xlai
|
45
|
-
Requires-Dist: opencv-python; extra == "xlai"
|
46
45
|
Requires-Dist: visdom; extra == "xlai"
|
47
|
-
Requires-Dist: pillow; extra == "xlai"
|
48
|
-
Requires-Dist: pynvml; extra == "xlai"
|
49
46
|
Requires-Dist: opsdroid-get-image-size; extra == "xlai"
|
47
|
+
Requires-Dist: pynvml; extra == "xlai"
|
48
|
+
Requires-Dist: pillow; extra == "xlai"
|
49
|
+
Requires-Dist: opencv-python; extra == "xlai"
|
50
50
|
Provides-Extra: xlall
|
51
|
-
Requires-Dist: flask-wtf; extra == "xlall"
|
52
51
|
Requires-Dist: flask-jwt-extended; extra == "xlall"
|
53
52
|
Requires-Dist: flask-restful; extra == "xlall"
|
53
|
+
Requires-Dist: opsdroid-get-image-size; extra == "xlall"
|
54
54
|
Requires-Dist: uvicorn; extra == "xlall"
|
55
|
+
Requires-Dist: sentencepiece; extra == "xlall"
|
56
|
+
Requires-Dist: flask-wtf; extra == "xlall"
|
55
57
|
Requires-Dist: openai2; extra == "xlall"
|
58
|
+
Requires-Dist: arts; extra == "xlall"
|
59
|
+
Requires-Dist: xlrd; extra == "xlall"
|
60
|
+
Requires-Dist: flask; extra == "xlall"
|
56
61
|
Requires-Dist: ujson; extra == "xlall"
|
57
62
|
Requires-Dist: fastapi; extra == "xlall"
|
58
63
|
Requires-Dist: html2text; extra == "xlall"
|
59
|
-
Requires-Dist: zhconv; extra == "xlall"
|
60
|
-
Requires-Dist: opencv-python; extra == "xlall"
|
61
64
|
Requires-Dist: pillow; extra == "xlall"
|
62
|
-
Requires-Dist:
|
63
|
-
Requires-Dist:
|
65
|
+
Requires-Dist: opencv-python; extra == "xlall"
|
66
|
+
Requires-Dist: zhconv; extra == "xlall"
|
64
67
|
Requires-Dist: flask-cors; extra == "xlall"
|
65
|
-
Requires-Dist: arts; extra == "xlall"
|
66
|
-
Requires-Dist: opsdroid-get-image-size; extra == "xlall"
|
67
|
-
Requires-Dist: xlrd; extra == "xlall"
|
68
68
|
|
69
69
|
# 1 install
|
70
70
|
|
@@ -9,13 +9,17 @@
|
|
9
9
|
"""
|
10
10
|
|
11
11
|
import os
|
12
|
+
import sys
|
12
13
|
import textwrap
|
13
14
|
import time
|
14
15
|
from typing import Iterable, Callable, List
|
16
|
+
import subprocess
|
17
|
+
import tempfile
|
15
18
|
|
16
19
|
import psutil
|
17
20
|
import pandas as pd
|
18
21
|
|
22
|
+
from loguru import logger
|
19
23
|
# ui组件大多是树形组织结构,auto库自带树形操作太弱。没有专业的树形结构库,能搞个毛线。
|
20
24
|
from anytree import NodeMixin
|
21
25
|
|
@@ -236,22 +240,32 @@ class UiCtrlNode(NodeMixin):
|
|
236
240
|
ctrl = find_ctrl(class_name=class_name, name=name, **kwargs)
|
237
241
|
return cls(ctrl, build_depth=build_depth)
|
238
242
|
|
239
|
-
def activate(self):
|
243
|
+
def activate(self, check_seconds=2):
|
240
244
|
""" 激活当前窗口
|
241
|
-
|
242
|
-
todo 修改的更稳定些?多些判断,重复测试,等待?
|
243
245
|
"""
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
246
|
+
while True:
|
247
|
+
hwnd = win32gui.FindWindow(self.ctrl.ClassName, self.text)
|
248
|
+
# logger.info(hwnd)
|
249
|
+
if not hwnd:
|
250
|
+
return
|
251
|
+
|
248
252
|
if win32gui.GetForegroundWindow() != hwnd:
|
249
|
-
|
253
|
+
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)
|
254
|
+
|
250
255
|
try:
|
251
|
-
|
256
|
+
# 在这里执行SetForegroundWindow,只有程序的第1次运行有效,之后就会被很多全屏类的应用占用最前置,覆盖不了了
|
257
|
+
# 为了解决这问题,就只能暴力每次都新开一个程序来执行这个SetForegroundWindow操作
|
258
|
+
subprocess.run(
|
259
|
+
[sys.executable, "-c", f"import win32gui; win32gui.SetForegroundWindow({hwnd})"],
|
260
|
+
stdout=subprocess.PIPE,
|
261
|
+
)
|
252
262
|
except Exception as e:
|
253
263
|
pass
|
254
|
-
|
264
|
+
# 理论上并不需要等待,但加个等待,有助于稳定性检测,如果当前窗口在check_seconds秒内频繁切换,
|
265
|
+
# 使用activate虽然激活了,但并不安全,只有check_seconds秒内维持稳定在这个窗口,再进行下游任务会更好
|
266
|
+
time.sleep(check_seconds)
|
267
|
+
else:
|
268
|
+
break
|
255
269
|
|
256
270
|
def build_children(self, build_depth=-1, child_node_class=None):
|
257
271
|
""" 创建并添加子节点到树中 """
|
@@ -10,21 +10,15 @@
|
|
10
10
|
|
11
11
|
import time
|
12
12
|
from copy import deepcopy
|
13
|
-
from typing import Iterable
|
14
|
-
import os
|
15
13
|
from typing import (Iterable, Callable, List)
|
16
|
-
import
|
17
|
-
import re
|
18
|
-
import textwrap
|
14
|
+
from typing import Optional
|
19
15
|
|
20
16
|
import uiautomation as auto
|
21
|
-
from anytree import NodeMixin, RenderTree
|
22
17
|
|
23
18
|
import win32con
|
24
19
|
import win32gui
|
25
20
|
|
26
|
-
from pyxllib.prog.
|
27
|
-
from pyxllib.autogui.wechat_msg import msg_parsers
|
21
|
+
from pyxllib.prog.filelock import get_autoui_lock
|
28
22
|
from pyxllib.autogui.uiautolib import find_ctrl, UiCtrlNode, copy_files_to_clipboard
|
29
23
|
|
30
24
|
|
@@ -41,7 +35,7 @@ class WeChatConfig:
|
|
41
35
|
WINDOW_CLASSNAME = 'WeChatMainWndForPC'
|
42
36
|
|
43
37
|
|
44
|
-
WeChat = WeChatConfig
|
38
|
+
# WeChat = WeChatConfig
|
45
39
|
|
46
40
|
|
47
41
|
class IntervalConfig:
|
@@ -456,6 +450,35 @@ class WeChatMainWnd(UiCtrlNode):
|
|
456
450
|
time.sleep(1) # 等待发送动作完成
|
457
451
|
|
458
452
|
|
453
|
+
class WeChatSingletonLock:
|
454
|
+
""" 基于 get_autoui_lock 的微信全局唯一单例控制器,确保同一时间仅有一个微信自动化程序在操作 """
|
455
|
+
|
456
|
+
def __init__(self, lock_timeout: Optional[float] = -1):
|
457
|
+
# 初始化全局锁
|
458
|
+
self.lock = get_autoui_lock(timeout=lock_timeout)
|
459
|
+
self.wechat = WeChatMainWnd()
|
460
|
+
|
461
|
+
def __enter__(self):
|
462
|
+
# 获取锁并激活微信窗口
|
463
|
+
self.lock.acquire()
|
464
|
+
self.wechat.activate()
|
465
|
+
return self.wechat
|
466
|
+
|
467
|
+
def __exit__(self, exc_type, exc_value, traceback):
|
468
|
+
# 释放锁
|
469
|
+
self.lock.release()
|
470
|
+
|
471
|
+
|
472
|
+
def wechat_lock_send(user, text=None, files=None, *, timeout=-1):
|
473
|
+
""" 使用全局唯一单例锁,确保同一时间仅有一个微信自动化程序在操作 """
|
474
|
+
with WeChatSingletonLock(timeout) as we:
|
475
|
+
we.set_chat_with(user)
|
476
|
+
if text:
|
477
|
+
we.send_text(user, text)
|
478
|
+
if files:
|
479
|
+
we.send_files(files)
|
480
|
+
|
481
|
+
|
459
482
|
def __4_wx():
|
460
483
|
""" 别人的原版实现 """
|
461
484
|
|
@@ -496,8 +519,8 @@ class WxOperation:
|
|
496
519
|
|
497
520
|
def locate_wechat_window(self):
|
498
521
|
if not self.visible_flag:
|
499
|
-
wake_up_window(class_name=
|
500
|
-
self.wx_window = auto.WindowControl(Name=
|
522
|
+
wake_up_window(class_name=WeChatConfig.WINDOW_CLASSNAME, name=WeChatConfig.WINDOW_NAME)
|
523
|
+
self.wx_window = auto.WindowControl(Name=WeChatConfig.WINDOW_NAME, ClassName=WeChatConfig.WINDOW_CLASSNAME)
|
501
524
|
if not self.wx_window.Exists(Interval.MAX_SEARCH_SECOND,
|
502
525
|
searchIntervalSeconds=Interval.MAX_SEARCH_INTERVAL):
|
503
526
|
raise Exception('微信似乎并没有登录!')
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# @Author : 陈坤泽
|
4
|
+
# @Email : 877362867@qq.com
|
5
|
+
# @Date : 2024/11/13
|
6
|
+
|
7
|
+
import os
|
8
|
+
import tempfile
|
9
|
+
import time
|
10
|
+
|
11
|
+
from filelock import FileLock, Timeout
|
12
|
+
|
13
|
+
|
14
|
+
class XlFileLock(FileLock):
|
15
|
+
def __init__(self, lock_file: str, timeout: float = -1, **kwargs):
|
16
|
+
"""
|
17
|
+
初始化 XlFileLock 实例,锁文件默认存储在系统临时目录中。
|
18
|
+
|
19
|
+
:param str filename: 锁文件的文件名(不包含路径)。
|
20
|
+
:param float timeout: 获取锁的超时时间(以秒为单位),默认值为 -1 表示无限等待。
|
21
|
+
"""
|
22
|
+
lock_file_path = os.path.join(tempfile.gettempdir(), lock_file)
|
23
|
+
super().__init__(lock_file=lock_file_path, timeout=timeout, **kwargs)
|
24
|
+
|
25
|
+
|
26
|
+
def get_autoui_lock(lock_file='autoui.lock', timeout=-1):
|
27
|
+
"""
|
28
|
+
注意:XlFileLock中的lock_file无法设置默认值,这跟FileLock的底层有关
|
29
|
+
所以无法继承一个AutoUiLock类,但是可以通过这种函数的方式,绕开它特殊的初始化限制
|
30
|
+
"""
|
31
|
+
lock = XlFileLock(lock_file=lock_file, timeout=timeout)
|
32
|
+
return lock
|
33
|
+
|
34
|
+
|
35
|
+
if __name__ == "__main__":
|
36
|
+
try:
|
37
|
+
with get_autoui_lock(timeout=5):
|
38
|
+
print("Lock acquired, doing some work...")
|
39
|
+
time.sleep(3)
|
40
|
+
print("Work done.")
|
41
|
+
except Timeout:
|
42
|
+
print("Failed to acquire lock within the timeout.")
|
@@ -15,12 +15,18 @@ import subprocess
|
|
15
15
|
import sys
|
16
16
|
import time
|
17
17
|
import textwrap
|
18
|
+
import threading
|
18
19
|
|
19
20
|
from deprecated import deprecated
|
20
21
|
from loguru import logger
|
21
22
|
from croniter import croniter
|
23
|
+
import pandas as pd
|
24
|
+
|
25
|
+
from fastapi import FastAPI
|
26
|
+
from fastapi.responses import PlainTextResponse
|
22
27
|
|
23
28
|
from pyxllib.prog.specialist import parse_datetime
|
29
|
+
from pyxllib.algo.stat import print_full_dataframe
|
24
30
|
from pyxllib.file.specialist import XlPath
|
25
31
|
|
26
32
|
|
@@ -259,6 +265,7 @@ class MultiProgramLauncher:
|
|
259
265
|
|
260
266
|
def init_scheduler(self):
|
261
267
|
from apscheduler.schedulers.background import BackgroundScheduler
|
268
|
+
# from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
262
269
|
|
263
270
|
if self.scheduler is None:
|
264
271
|
self.scheduler = BackgroundScheduler()
|
@@ -497,6 +504,8 @@ class MultiProgramLauncher:
|
|
497
504
|
cmd.append(args)
|
498
505
|
else:
|
499
506
|
cmd += list(args)
|
507
|
+
if name is None:
|
508
|
+
name = module
|
500
509
|
return self.add_program_cmd3(cmd, ports=ports, name=name, locations=locations, shell=shell, **kwargs)
|
501
510
|
|
502
511
|
def add_prog(self, prog, extcmds='',
|
@@ -624,6 +633,23 @@ class MultiProgramLauncher:
|
|
624
633
|
def __4_多程序管理(self):
|
625
634
|
pass
|
626
635
|
|
636
|
+
def count_running(self):
|
637
|
+
return sum(1 for worker in self.workers if worker.is_running())
|
638
|
+
|
639
|
+
def list_workers(self):
|
640
|
+
"""返回所有任务的状态 DataFrame"""
|
641
|
+
ls = []
|
642
|
+
for worker in self.workers:
|
643
|
+
ls.append({
|
644
|
+
'name': worker.name,
|
645
|
+
'pid': worker.program.pid if worker.program else None,
|
646
|
+
'poll': worker.program.poll() if worker.program else None,
|
647
|
+
'args': worker.raw_cmd,
|
648
|
+
'port': worker.port,
|
649
|
+
'locations': worker.locations,
|
650
|
+
})
|
651
|
+
return pd.DataFrame(ls)
|
652
|
+
|
627
653
|
def cleanup_finished(self, exit_code=None):
|
628
654
|
"""
|
629
655
|
清除已运行完的程序
|
@@ -654,50 +680,51 @@ class MultiProgramLauncher:
|
|
654
680
|
worker.terminate()
|
655
681
|
self.workers = []
|
656
682
|
|
657
|
-
def
|
683
|
+
def proc_cmd(self, cmd):
|
684
|
+
if cmd == 'kill':
|
685
|
+
self.stop_all()
|
686
|
+
return False
|
687
|
+
elif cmd == 'count':
|
688
|
+
print(f'有{self.count_running()}个程序正在运行')
|
689
|
+
elif cmd.startswith('cleanup'):
|
690
|
+
args = cmd.split()
|
691
|
+
exit_code = int(args[1]) if len(args) > 1 else None
|
692
|
+
self.cleanup_finished(exit_code)
|
693
|
+
print("清理完成")
|
694
|
+
elif cmd == 'list': # 列出所有程序(转df查看)
|
695
|
+
df = self.list_workers()
|
696
|
+
print_full_dataframe(df)
|
697
|
+
return True
|
698
|
+
|
699
|
+
def run_endless(self, cmd=True, wait_seconds=1, *, port=None):
|
658
700
|
"""
|
659
701
|
一直运行,直到用户输入 kill 命令或 Ctrl+C
|
660
702
|
|
661
|
-
|
703
|
+
:param bool cmd: 是否支持命令行input输入指令监控状态的模式
|
704
|
+
默认支持,但在有scheduler调度的情况不建议开启,有input阻塞其他子程的风险
|
705
|
+
:param int|float wait_seconds: 每次循环之间停顿秒数,用来给其他子程等运行时间,避免阻塞
|
706
|
+
:param int port: 是否要开一个后端服务,支持查询程序运行状态
|
707
|
+
|
708
|
+
poll:
|
662
709
|
如果进程仍在运行,poll()方法返回None。
|
663
710
|
如果进程已经结束,poll()方法返回进程的退出码(exit code)。
|
664
711
|
如果进程正常结束,退出码通常为0。
|
665
712
|
如果进程异常结束,退出码通常是一个非零值,表示异常的类型或错误码。
|
666
|
-
|
667
|
-
import pandas as pd
|
668
|
-
from pyxllib.algo.stat import print_full_dataframe
|
669
|
-
|
713
|
+
"""
|
670
714
|
if self.scheduler: # 如果有定时任务,启动调度器
|
671
715
|
self.scheduler.start()
|
672
716
|
|
717
|
+
if port:
|
718
|
+
dashboard = LauncherDashboard(self)
|
719
|
+
threading.Thread(target=lambda: dashboard.run(port), daemon=True).start()
|
720
|
+
|
673
721
|
try:
|
674
722
|
while True:
|
675
|
-
cmd
|
676
|
-
|
677
|
-
self.
|
678
|
-
|
679
|
-
|
680
|
-
# 需要实际检查现有程序
|
681
|
-
m = sum([1 for worker in self.workers if worker.is_running()])
|
682
|
-
print(f'有{m}个程序正在运行')
|
683
|
-
elif cmd.startswith('cleanup'):
|
684
|
-
# 获取 exit_code 参数
|
685
|
-
args = cmd.split()
|
686
|
-
if len(args) > 1: # 支持跟一个参数,删除制定状态的程序
|
687
|
-
exit_code = int(args[1])
|
688
|
-
else:
|
689
|
-
exit_code = None
|
690
|
-
self.cleanup_finished(exit_code)
|
691
|
-
print("清理完成")
|
692
|
-
elif cmd == 'list': # 列出所有程序(转df查看)
|
693
|
-
ls = []
|
694
|
-
for worker in self.workers:
|
695
|
-
ls.append([worker.name,
|
696
|
-
worker.program and worker.program.pid,
|
697
|
-
worker.program and worker.program.poll(),
|
698
|
-
worker.raw_cmd])
|
699
|
-
df = pd.DataFrame(ls, columns=['name', 'pid', 'poll', 'args'])
|
700
|
-
print_full_dataframe(df)
|
723
|
+
if cmd:
|
724
|
+
_cmd = input(">>> ")
|
725
|
+
if not self.proc_cmd(_cmd):
|
726
|
+
break
|
727
|
+
time.sleep(wait_seconds)
|
701
728
|
except KeyboardInterrupt:
|
702
729
|
print("\n检测到 Ctrl+C,正在终止所有程序...")
|
703
730
|
self.stop_all()
|
@@ -714,6 +741,78 @@ class MultiProcessLauncher(MultiProgramLauncher):
|
|
714
741
|
pass
|
715
742
|
|
716
743
|
|
744
|
+
class LauncherDashboard:
|
745
|
+
def __init__(self, launcher):
|
746
|
+
self.launcher = launcher
|
747
|
+
self.app = FastAPI()
|
748
|
+
self.setup_routes()
|
749
|
+
|
750
|
+
def setup_routes(self):
|
751
|
+
@self.app.get("/", response_class=PlainTextResponse)
|
752
|
+
async def home():
|
753
|
+
"""主页,展示所有任务状态"""
|
754
|
+
df = self.launcher.list_workers()
|
755
|
+
return self.render_text(df)
|
756
|
+
|
757
|
+
@self.app.get("/count", response_class=PlainTextResponse)
|
758
|
+
async def get_count():
|
759
|
+
"""返回正在运行的任务数量"""
|
760
|
+
count = self.launcher.count_running()
|
761
|
+
return f"正在运行的任务数量: {count}\n"
|
762
|
+
|
763
|
+
@self.app.post("/stop", response_class=PlainTextResponse)
|
764
|
+
async def stop_all():
|
765
|
+
"""停止所有任务"""
|
766
|
+
self.launcher.stop_all()
|
767
|
+
return "所有任务已停止。\n"
|
768
|
+
|
769
|
+
@self.app.post("/cleanup", response_class=PlainTextResponse)
|
770
|
+
async def cleanup(exit_code: int = None):
|
771
|
+
"""清理已完成的任务"""
|
772
|
+
self.launcher.cleanup_finished(exit_code)
|
773
|
+
return "清理完成。\n"
|
774
|
+
|
775
|
+
def render_text(self, df):
|
776
|
+
"""生成纯文本格式的任务状态"""
|
777
|
+
if df.empty:
|
778
|
+
return "没有任务正在运行。\n"
|
779
|
+
|
780
|
+
# 调整表头以显示新的属性:port 和 locations
|
781
|
+
output = ["当前任务状态:\n"]
|
782
|
+
output.append(f"{'编号':<5} {'名称':<15} {'PID':<10} {'状态':<10} {'端口':<10} {'位置':<20} {'命令'}")
|
783
|
+
output.append("-" * 120)
|
784
|
+
|
785
|
+
for idx, (_, row) in enumerate(df.iterrows(), start=1):
|
786
|
+
name = row['name']
|
787
|
+
|
788
|
+
# 更鲁棒地处理 pid,考虑 NaN 情况
|
789
|
+
pid = "N/A" if pd.isna(row['pid']) else int(row['pid'])
|
790
|
+
|
791
|
+
# 获取任务状态
|
792
|
+
status = "运行中" if row['poll'] is None else "已结束"
|
793
|
+
|
794
|
+
# 处理 args,确保路径展示更清晰
|
795
|
+
args = [a for a in row['args'] if a] if isinstance(row['args'], list) else []
|
796
|
+
args_str = "[" + ", ".join(
|
797
|
+
repr(arg).replace("\\\\", "\\") if '\\' in arg else repr(arg) for arg in args
|
798
|
+
) + "]"
|
799
|
+
|
800
|
+
# 处理 port 和 locations
|
801
|
+
port = row['port'] if not pd.isna(row['port']) else "N/A"
|
802
|
+
locations = ", ".join(row['locations']) if isinstance(row['locations'], list) else "N/A"
|
803
|
+
|
804
|
+
# 格式化输出
|
805
|
+
output.append(f"{idx:<5} {name:<15} {pid:<10} {status:<10} {port:<10} {locations:<20} {args_str}")
|
806
|
+
|
807
|
+
output.append("\n")
|
808
|
+
return "\n".join(output)
|
809
|
+
|
810
|
+
def run(self, port=8080):
|
811
|
+
"""启动 FastAPI 服务"""
|
812
|
+
import uvicorn
|
813
|
+
uvicorn.run(self.app, host="0.0.0.0", port=port, log_level="warning")
|
814
|
+
|
815
|
+
|
717
816
|
def __3_装饰器工具():
|
718
817
|
pass
|
719
818
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pyxllib
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.148
|
4
4
|
Summary: 厦门理工模式识别团队通用python代码工具库
|
5
5
|
Home-page: https://github.com/XLPRUtils/pyxllib
|
6
6
|
Author: code4101
|
@@ -39,32 +39,32 @@ Requires-Dist: pandas>=0.23.4
|
|
39
39
|
Requires-Dist: pillow
|
40
40
|
Provides-Extra: xlcv
|
41
41
|
Requires-Dist: pillow; extra == "xlcv"
|
42
|
-
Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
|
43
42
|
Requires-Dist: opencv-python; extra == "xlcv"
|
43
|
+
Requires-Dist: opsdroid-get-image-size; extra == "xlcv"
|
44
44
|
Provides-Extra: xlai
|
45
|
-
Requires-Dist: opencv-python; extra == "xlai"
|
46
45
|
Requires-Dist: visdom; extra == "xlai"
|
47
|
-
Requires-Dist: pillow; extra == "xlai"
|
48
|
-
Requires-Dist: pynvml; extra == "xlai"
|
49
46
|
Requires-Dist: opsdroid-get-image-size; extra == "xlai"
|
47
|
+
Requires-Dist: pynvml; extra == "xlai"
|
48
|
+
Requires-Dist: pillow; extra == "xlai"
|
49
|
+
Requires-Dist: opencv-python; extra == "xlai"
|
50
50
|
Provides-Extra: xlall
|
51
|
-
Requires-Dist: flask-wtf; extra == "xlall"
|
52
51
|
Requires-Dist: flask-jwt-extended; extra == "xlall"
|
53
52
|
Requires-Dist: flask-restful; extra == "xlall"
|
53
|
+
Requires-Dist: opsdroid-get-image-size; extra == "xlall"
|
54
54
|
Requires-Dist: uvicorn; extra == "xlall"
|
55
|
+
Requires-Dist: sentencepiece; extra == "xlall"
|
56
|
+
Requires-Dist: flask-wtf; extra == "xlall"
|
55
57
|
Requires-Dist: openai2; extra == "xlall"
|
58
|
+
Requires-Dist: arts; extra == "xlall"
|
59
|
+
Requires-Dist: xlrd; extra == "xlall"
|
60
|
+
Requires-Dist: flask; extra == "xlall"
|
56
61
|
Requires-Dist: ujson; extra == "xlall"
|
57
62
|
Requires-Dist: fastapi; extra == "xlall"
|
58
63
|
Requires-Dist: html2text; extra == "xlall"
|
59
|
-
Requires-Dist: zhconv; extra == "xlall"
|
60
|
-
Requires-Dist: opencv-python; extra == "xlall"
|
61
64
|
Requires-Dist: pillow; extra == "xlall"
|
62
|
-
Requires-Dist:
|
63
|
-
Requires-Dist:
|
65
|
+
Requires-Dist: opencv-python; extra == "xlall"
|
66
|
+
Requires-Dist: zhconv; extra == "xlall"
|
64
67
|
Requires-Dist: flask-cors; extra == "xlall"
|
65
|
-
Requires-Dist: arts; extra == "xlall"
|
66
|
-
Requires-Dist: opsdroid-get-image-size; extra == "xlall"
|
67
|
-
Requires-Dist: xlrd; extra == "xlall"
|
68
68
|
|
69
69
|
# 1 install
|
70
70
|
|
@@ -50,7 +50,7 @@ _dir = Path(__file__).parent
|
|
50
50
|
|
51
51
|
setup(
|
52
52
|
name='pyxllib', # pip 安装时用的名字
|
53
|
-
version='0.3.
|
53
|
+
version='0.3.148', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
54
54
|
author='code4101',
|
55
55
|
author_email='877362867@qq.com',
|
56
56
|
url='https://github.com/XLPRUtils/pyxllib',
|
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
|