pyxllib 0.3.115__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.
Files changed (349) hide show
  1. {pyxllib-0.3.115/pyxllib.egg-info → pyxllib-0.3.117}/PKG-INFO +2 -1
  2. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/pupil.py +7 -4
  3. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/stat.py +1 -1
  4. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/data/sqlite.py +15 -0
  5. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/specialist/filelib.py +45 -8
  6. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/xlsxlib.py +14 -2
  7. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/cachetools.py +2 -0
  8. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/pupil.py +153 -12
  9. pyxllib-0.3.117/pyxllib/prog/scheduler.py +129 -0
  10. {pyxllib-0.3.115 → pyxllib-0.3.117/pyxllib.egg-info}/PKG-INFO +2 -1
  11. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib.egg-info/SOURCES.txt +1 -0
  12. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib.egg-info/requires.txt +20 -5
  13. {pyxllib-0.3.115 → pyxllib-0.3.117}/setup.py +11 -4
  14. {pyxllib-0.3.115 → pyxllib-0.3.117}/LICENSE +0 -0
  15. {pyxllib-0.3.115 → pyxllib-0.3.117}/MANIFEST.in +0 -0
  16. {pyxllib-0.3.115 → pyxllib-0.3.117}/README.md +0 -0
  17. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/__init__.py +0 -0
  18. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/__init__.py +0 -0
  19. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/disjoint.py +0 -0
  20. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/geo.py +0 -0
  21. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/intervals.py +0 -0
  22. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/matcher.py +0 -0
  23. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/newbie.py +0 -0
  24. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/shapelylib.py +0 -0
  25. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/specialist.py +0 -0
  26. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/treelib.py +0 -0
  27. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/algo/unitlib.py +0 -0
  28. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/cv/__init__.py +0 -0
  29. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/cv/expert.py +0 -0
  30. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/cv/imfile.py +0 -0
  31. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/cv/imhash.py +0 -0
  32. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/cv/pupil.py +0 -0
  33. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/cv/rgbfmt.py +0 -0
  34. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/cv/trackbartools.py +0 -0
  35. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/cv/xlcvlib.py +0 -0
  36. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/cv/xlpillib.py +0 -0
  37. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/data/__init__.py +0 -0
  38. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/data/echarts.py +0 -0
  39. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/data/jsonlib.py +0 -0
  40. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/data/oss.py +0 -0
  41. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/data/pglib.py +0 -0
  42. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/data/sqllib.py +0 -0
  43. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/JLineViewer.py +0 -0
  44. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/__init__.py +0 -0
  45. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/autogui/__init__.py +0 -0
  46. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/autogui/autogui.py +0 -0
  47. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/autogui/virtualkey.py +0 -0
  48. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/demolib.py +0 -0
  49. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/drissionlib.py +0 -0
  50. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/kq5034lib.py +0 -0
  51. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/old.py +0 -0
  52. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/qt.py +0 -0
  53. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/robustprocfile.py +0 -0
  54. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/seleniumlib.py +0 -0
  55. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/tk.py +0 -0
  56. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/unixlib.py +0 -0
  57. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/utools.py +0 -0
  58. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/webhook.py +0 -0
  59. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/win32lib.py +0 -0
  60. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/ext/yuquelib.py +0 -0
  61. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/__init__.py +0 -0
  62. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/docxlib.py +0 -0
  63. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/gitlib.py +0 -0
  64. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/libreoffice.py +0 -0
  65. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/movielib.py +0 -0
  66. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/newbie.py +0 -0
  67. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/onenotelib.py +0 -0
  68. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/packlib/__init__.py +0 -0
  69. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/packlib/zipfile.py +0 -0
  70. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/pdflib.py +0 -0
  71. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/pupil.py +0 -0
  72. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/specialist/__init__.py +0 -0
  73. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/specialist/dirlib.py +0 -0
  74. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/file/specialist/download.py +0 -0
  75. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/__init__.py +0 -0
  76. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/deprecatedlib.py +0 -0
  77. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/ipyexec.py +0 -0
  78. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/multiprocs.py +0 -0
  79. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/newbie.py +0 -0
  80. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/sitepackages.py +0 -0
  81. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/specialist/__init__.py +0 -0
  82. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/specialist/bc.py +0 -0
  83. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/specialist/browser.py +0 -0
  84. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/specialist/common.py +0 -0
  85. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/specialist/datetime.py +0 -0
  86. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/specialist/tictoc.py +0 -0
  87. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/specialist/xllog.py +0 -0
  88. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/prog/xlosenv.py +0 -0
  89. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/stdlib/__init__.py +0 -0
  90. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
  91. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/stdlib/tablepyxl/style.py +0 -0
  92. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
  93. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/__init__.py +0 -0
  94. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/ahocorasick.py +0 -0
  95. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/charclasslib.py +0 -0
  96. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/jiebalib.py +0 -0
  97. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/jinjalib.py +0 -0
  98. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/jscode.py +0 -0
  99. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/latex/__init__.py +0 -0
  100. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/levenshtein.py +0 -0
  101. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/nestenv.py +0 -0
  102. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/newbie.py +0 -0
  103. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/pupil/__init__.py +0 -0
  104. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/pupil/common.py +0 -0
  105. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/pupil/xlalign.py +0 -0
  106. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/pycode.py +0 -0
  107. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/specialist/__init__.py +0 -0
  108. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/specialist/common.py +0 -0
  109. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/specialist/ptag.py +0 -0
  110. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/spellchecker.py +0 -0
  111. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/vbacode.py +0 -0
  112. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/text/xmllib.py +0 -0
  113. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/xl.py +0 -0
  114. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib/xlcv.py +0 -0
  115. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib.egg-info/dependency_links.txt +0 -0
  116. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxllib.egg-info/top_level.txt +0 -0
  117. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/__init__.py +0 -0
  118. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ai/__init__.py +0 -0
  119. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ai/clientlib.py +0 -0
  120. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ai/specialist.py +0 -0
  121. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ai/torch_app.py +0 -0
  122. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ai/xlpaddle.py +0 -0
  123. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ai/xltorch.py +0 -0
  124. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/__init__.py +0 -0
  125. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/coco.py +0 -0
  126. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/datacls.py +0 -0
  127. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/datasets.py +0 -0
  128. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/gptlib.py +0 -0
  129. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/icdar/__init__.py +0 -0
  130. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/icdar/deteval.py +0 -0
  131. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/icdar/icdar2013.py +0 -0
  132. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/icdar/iou.py +0 -0
  133. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
  134. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/imtextline.py +0 -0
  135. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/labelme.py +0 -0
  136. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/removeline.py +0 -0
  137. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/specialist.py +0 -0
  138. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/data/tiktokenlib.py +0 -0
  139. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/eval/__init__.py +0 -0
  140. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/paddleocr.py +0 -0
  141. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/__init__.py +0 -0
  142. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
  143. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/__init__.py +0 -0
  144. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
  145. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
  146. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
  147. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
  148. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
  149. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
  150. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
  151. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
  152. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
  153. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
  154. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
  155. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
  156. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
  157. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
  158. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
  159. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
  160. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
  161. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
  162. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
  163. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
  164. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
  165. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
  166. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
  167. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/__init__.py +0 -0
  168. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
  169. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
  170. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/center_loss.py +0 -0
  171. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
  172. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
  173. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
  174. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
  175. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
  176. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
  177. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
  178. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
  179. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
  180. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
  181. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
  182. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
  183. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
  184. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
  185. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
  186. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
  187. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
  188. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
  189. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/__init__.py +0 -0
  190. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
  191. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
  192. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
  193. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
  194. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
  195. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
  196. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
  197. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
  198. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
  199. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
  200. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
  201. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
  202. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
  203. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
  204. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
  205. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
  206. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
  207. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
  208. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
  209. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
  210. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
  211. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
  212. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
  213. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
  214. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
  215. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
  216. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
  217. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
  218. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
  219. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
  220. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
  221. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
  222. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
  223. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
  224. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
  225. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
  226. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
  227. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
  228. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
  229. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
  230. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
  231. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
  232. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
  233. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
  234. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
  235. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
  236. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
  237. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
  238. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
  239. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
  240. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
  241. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
  242. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
  243. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
  244. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
  245. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
  246. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
  247. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
  248. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
  249. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
  250. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
  251. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
  252. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
  253. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
  254. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
  255. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
  256. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
  257. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
  258. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
  259. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
  260. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/__init__.py +0 -0
  261. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/eval.py +0 -0
  262. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/export_center.py +0 -0
  263. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/export_model.py +0 -0
  264. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
  265. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
  266. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
  267. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
  268. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
  269. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
  270. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
  271. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_det.py +0 -0
  272. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
  273. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
  274. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
  275. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/infer_table.py +0 -0
  276. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/program.py +0 -0
  277. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
  278. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/train.py +0 -0
  279. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/tools/xlprog.py +0 -0
  280. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
  281. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/__init__.py +0 -0
  282. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
  283. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
  284. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
  285. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
  286. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
  287. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
  288. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
  289. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
  290. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
  291. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
  292. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
  293. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
  294. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
  295. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
  296. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
  297. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
  298. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
  299. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
  300. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
  301. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
  302. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
  303. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
  304. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
  305. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
  306. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
  307. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
  308. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
  309. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
  310. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
  311. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
  312. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
  313. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
  314. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/dict90.txt +0 -0
  315. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
  316. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
  317. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
  318. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
  319. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
  320. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
  321. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
  322. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
  323. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/gen_label.py +0 -0
  324. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
  325. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/iou.py +0 -0
  326. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/logging.py +0 -0
  327. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/network.py +0 -0
  328. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
  329. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/profiler.py +0 -0
  330. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/save_load.py +0 -0
  331. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/stats.py +0 -0
  332. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppocr/utils/utility.py +0 -0
  333. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/__init__.py +0 -0
  334. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/predict_system.py +0 -0
  335. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/__init__.py +0 -0
  336. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/eval_table.py +0 -0
  337. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/matcher.py +0 -0
  338. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
  339. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/predict_table.py +0 -0
  340. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
  341. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
  342. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
  343. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
  344. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
  345. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
  346. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/ppstructure/utility.py +0 -0
  347. {pyxllib-0.3.115 → pyxllib-0.3.117}/pyxlpr/xlai.py +0 -0
  348. {pyxllib-0.3.115 → pyxllib-0.3.117}/requirements.txt +0 -0
  349. {pyxllib-0.3.115 → pyxllib-0.3.117}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.115
3
+ Version: 0.3.117
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -15,6 +15,7 @@ Requires-Python: >=3.6
15
15
  Description-Content-Type: text/markdown
16
16
  Provides-Extra: xlcv
17
17
  Provides-Extra: xlai
18
+ Provides-Extra: xlall
18
19
  License-File: LICENSE
19
20
 
20
21
  # 1 install
@@ -455,9 +455,10 @@ def matchpairs(xs, ys, cmp_func, least_score=sys.float_info.epsilon, *,
455
455
  def get_number_width(n):
456
456
  """ 判断数值n的长度
457
457
 
458
+ 参考资料:https://jstrieb.github.io/posts/digit-length/
459
+
458
460
  >>> get_number_width(0)
459
- Traceback (most recent call last):
460
- AssertionError
461
+ 1
461
462
  >>> get_number_width(9)
462
463
  1
463
464
  >>> get_number_width(10)
@@ -465,8 +466,10 @@ def get_number_width(n):
465
466
  >>> get_number_width(97)
466
467
  2
467
468
  """
468
- assert n > 0
469
- return math.ceil(math.log10(n + 1))
469
+ # assert n > 0
470
+ # return math.ceil(math.log10(n + 1))
471
+
472
+ return 1 if n == 0 else (math.floor(math.log10(n)) + 1)
470
473
 
471
474
 
472
475
  class SearchBase:
@@ -449,7 +449,7 @@ def print_full_dataframe(df):
449
449
  'display.max_colwidth', None):
450
450
  print(df)
451
451
 
452
- pd.options('display.max_rows', 60)
452
+ pd.options.display.max_rows = 60
453
453
 
454
454
 
455
455
  def custom_fillna(df, default_fill_value='', numeric_fill_value=None, specific_fill=None):
@@ -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
 
@@ -887,6 +887,7 @@ class XlPath(type(pathlib.Path())):
887
887
  return 0
888
888
 
889
889
  def mtime(self):
890
+ """ 文件的修改时间 """
890
891
  # windows会带小数,linux使用%Ts只有整数部分。
891
892
  # 这里不用四舍五入,取整数部分就是对应的。
892
893
  return int(os.stat(self).st_mtime)
@@ -1287,6 +1288,7 @@ class XlPath(type(pathlib.Path())):
1287
1288
 
1288
1289
  def write_auto(self, data, *args, if_exists=None, **kwargs):
1289
1290
  """ 根据文件后缀自动识别写入函数 """
1291
+ self.parent.mkdir(exist_ok=True, parents=True)
1290
1292
  mode = self.suffix.lower()[1:]
1291
1293
  write_func = getattr(self, 'write_' + mode, None)
1292
1294
  if self.exist_preprcs(if_exists):
@@ -2283,8 +2285,11 @@ class PathGroups(Groups):
2283
2285
  return ls
2284
2286
 
2285
2287
 
2286
- def cache_file(file, make_data_func: Callable[[], Any] = None, *, reset=False, **kwargs):
2287
- """ 局部函数功能结果缓存
2288
+ def cache_file(file, make_data_func: Callable[[], Any] = None, *,
2289
+ mode='read_first',
2290
+ cache_time=None,
2291
+ **kwargs):
2292
+ """ 能将局部函数功能结果缓存进文件的功能
2288
2293
 
2289
2294
  输入的文件file如果存在则直接读取内容;
2290
2295
  否则用make_data_func生成,并且备份一个file文件
@@ -2292,20 +2297,52 @@ def cache_file(file, make_data_func: Callable[[], Any] = None, *, reset=False, *
2292
2297
  :param file: 需要缓存的文件路径
2293
2298
  :param make_data_func: 如果文件不存在,则需要生成一份,要提供数据生成函数
2294
2299
  cache_file可以当装饰器用,此时不用显式指定该参数
2295
- :param reset: 如果file是否已存在,都用make_data_func强制重置一遍
2300
+ :param mode:
2301
+ read_first(默认): 优先尝试从已有文件读取
2302
+ generate_first: 函数生成优先
2303
+ :param cache_time: 文件缓存时间,单位为秒,默认为None,表示始终使用缓存文件
2304
+ 如果设置60,表示超过60秒后,需要重新优先从函数获得更新内容
2296
2305
  :param kwargs: 可以传递read、write支持的扩展参数
2297
- :return: 从缓存文件直接读取到的数据
2306
+ :return: 读取到的数据
2298
2307
  """
2308
+ from datetime import datetime, timedelta
2309
+ from pyxllib.prog.pupil import format_exception
2299
2310
 
2300
2311
  def decorator(func):
2301
2312
  def wrapper(*args2, **kwargs2):
2313
+
2302
2314
  f = XlPath.init(file, XlPath.tempdir())
2303
- if f.exists() and not reset: # 文件存在,直接读取返回
2304
- data = f.read_auto(**kwargs)
2305
- else: # 文件不存在则要生成一份数据
2315
+ f.parent.mkdir(exist_ok=True, parents=True)
2316
+
2317
+ # 1 优先看是不是需要先从文件读取数据
2318
+ if mode == 'read_first' and f.is_file():
2319
+ if cache_time is None:
2320
+ return f.read_auto(**kwargs)
2321
+
2322
+ current_time = datetime.now()
2323
+ last_modified = datetime.fromtimestamp(f.mtime()) # 获取文件的修改时间
2324
+ if not isinstance(cache_time, timedelta):
2325
+ cache_time2 = timedelta(seconds=cache_time)
2326
+ else:
2327
+ cache_time2 = cache_time
2328
+
2329
+ if cache_time is None or (current_time - last_modified <= cache_time2):
2330
+ return f.read_auto(**kwargs)
2331
+
2332
+ # 2 如果需要重新生成数据,且没有已存在的保底文件
2333
+ if not f.is_file():
2306
2334
  data = func(*args2, **kwargs2)
2307
2335
  f.write_auto(data, **kwargs)
2308
- return data
2336
+ return data
2337
+
2338
+ # 3 需要重新生成,但是有保底文件
2339
+ try:
2340
+ data = func(*args2, **kwargs2)
2341
+ f.write_auto(data, **kwargs)
2342
+ return data
2343
+ except Exception as e:
2344
+ print(format_exception(e))
2345
+ return f.read_auto(**kwargs)
2309
2346
 
2310
2347
  return wrapper
2311
2348
 
@@ -36,6 +36,7 @@ from openpyxl import Workbook
36
36
  from openpyxl.cell.cell import MergedCell
37
37
  from openpyxl.styles import Font, Alignment
38
38
  from openpyxl.utils.cell import get_column_letter, column_index_from_string
39
+ import openpyxl.worksheet.formula
39
40
  import pandas as pd
40
41
 
41
42
  try:
@@ -518,7 +519,7 @@ def is_string_type(value):
518
519
  try:
519
520
  pd.to_datetime(value, errors='raise')
520
521
  return False
521
- except (ValueError, TypeError, OverflowError):
522
+ except (ValueError, TypeError, OverflowError, AttributeError):
522
523
  pass
523
524
 
524
525
  # 检查是否为浮点数类型
@@ -573,10 +574,18 @@ class XlCell(openpyxl.cell.cell.Cell): # 适用于 openpyxl.cell.cell.MergedCel
573
574
 
574
575
  TODO 这个函数还是可以看看能不能有更好的实现、提速
575
576
  """
577
+
578
+ def try_offset(x, y):
579
+ try:
580
+ return isinstance(self.offset(x, y), MergedCell)
581
+ except ValueError:
582
+ # 有可能会越界:ValueError: Row numbers must be between 1 and 1048576
583
+ return False
584
+
576
585
  _type, status = 0, {}
577
586
  if isinstance(self, MergedCell):
578
587
  _type = 1
579
- elif isinstance(self.offset(1, 0), MergedCell) or isinstance(self.offset(0, 1), MergedCell):
588
+ elif try_offset(1, 0) or try_offset(0, 1):
580
589
  # 这里只能判断可能是合并单元格,具体是不是合并单元格,还要
581
590
  rng = self.in_range()
582
591
  status['rng'] = rng
@@ -761,7 +770,10 @@ class XlCell(openpyxl.cell.cell.Cell): # 适用于 openpyxl.cell.cell.MergedCel
761
770
  注意,遇到公式是很难计算处理的,大概率只能保持原公式显示
762
771
  因为日期用的比较多,需要时常获得真实的渲染效果,所以这里封装一个接口
763
772
  """
773
+
764
774
  x = self.value
775
+ if isinstance(x, openpyxl.worksheet.formula.ArrayFormula): # 数组公式要特别渲染
776
+ return x.text
765
777
  xl_fmt = self.get_number_format()
766
778
  return xl_render_value(x, xl_fmt)
767
779
 
@@ -24,6 +24,8 @@ from cached_property import cached_property_with_ttl # 限时缓存,单位秒
24
24
  from cached_property import threaded_cached_property_with_ttl # 线程 + 限时
25
25
 
26
26
 
27
+ # todo 240609周日21:19 https://github.com/awolverp/cachebox,据说这个缓存库速度更快的多
28
+
27
29
  # 进一步封装的更通用、自己常用的装饰器
28
30
 
29
31
  def xlcache(maxsize=128, *, ttl=None, lock=None, property=False):
@@ -555,6 +555,9 @@ class Timeout:
555
555
  return wrapper
556
556
 
557
557
  def __enter__(self):
558
+ if self.seconds == 0: # 可以设置0来关闭超时功能
559
+ return
560
+
558
561
  def overtime(signum, frame):
559
562
  raise TimeoutError(f'with 上下文代码块运行超时 > [{self.seconds} 秒]')
560
563
 
@@ -568,6 +571,9 @@ class Timeout:
568
571
  self.alarm.start()
569
572
 
570
573
  def __exit__(self, exc_type, exc_val, exc_tb):
574
+ if self.seconds == 0:
575
+ return
576
+
571
577
  # with已经运行完了,马上关闭警告器
572
578
  self.alarm.cancel()
573
579
 
@@ -973,30 +979,93 @@ class OutputLogger(logging.Logger):
973
979
  self.print(msg)
974
980
 
975
981
 
982
+ class ProcessWorker:
983
+ """ 代表一个单独的工作进程 """
984
+
985
+ def __init__(self, name, process, port=None, locations=None,
986
+ raw_cmd=None):
987
+ """
988
+
989
+ :param name: 进程昵称
990
+ :param process: 进程对象
991
+ :param port: 是否有执行所在端口
992
+ :param locations: 是否有url地址映射,一般用于nginx等配置
993
+ """
994
+ self.name = name
995
+ self.process = process
996
+ self.port = port
997
+ self.locations = locations
998
+ self.raw_cmd = raw_cmd
999
+
1000
+ def terminate(self):
1001
+ """ 比较优雅结束进程的方法 """
1002
+ if self.process is not None:
1003
+ self.process.terminate()
1004
+
1005
+ def kill(self):
1006
+ """ 有时候需要强硬的kill方法来结束进程 """
1007
+ if self.process is not None:
1008
+ self.process.kill()
1009
+
1010
+
976
1011
  class MultiProcessLauncher:
977
1012
  """ 注意这个类暂时只有linux能使用 """
978
1013
 
979
1014
  def __init__(self):
980
1015
  self.workers = []
981
1016
 
982
- def add_process_cmd(self, cmd, name=None, **kwargs):
1017
+ def add_process_cmd(self,
1018
+ cmd,
1019
+ name=None,
1020
+ shell=False,
1021
+ **kwargs):
1022
+ """
1023
+
1024
+ :param shell: 默认直接跟系统交互,此时cmd应该输入数组格式
1025
+ 如果shell=True,则启用shell进行交互操作,这种情况会更适合管道等模式的处理,此时cmd应该输入字符串格式
1026
+
1027
+ """
983
1028
  if name is None:
984
- name = cmd.split()[0]
1029
+ cmd2 = cmd.split() if isinstance(cmd, str) else cmd
1030
+ name = cmd2[0]
1031
+
1032
+ proc = subprocess.Popen(cmd,
1033
+ shell=shell,
1034
+ preexec_fn=self._set_pdeathsig())
985
1035
 
986
- p = subprocess.Popen(cmd.split(), preexec_fn=self._set_pdeathsig(signal.SIGTERM))
987
- worker = {'name': name, 'process': p, 'command': cmd}
988
- worker.update(kwargs)
1036
+ worker = ProcessWorker(name, proc, raw_cmd=cmd, **kwargs)
989
1037
  self.workers.append(worker)
1038
+ return worker
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)
990
1054
 
991
- def add_process_python_module(self, module, args='', name=None):
1055
+ def add_process_python_module(self, module, args='', name=None, shell=False):
992
1056
  """ 添加并启动一个Python模块作为后台进程。
993
1057
 
994
1058
  :param module: 要执行的Python模块名(python -m 后面的部分)
995
- :param args: 模块的参数
1059
+ :param str|list args: 模块的参数
996
1060
  :param name: 进程的名称,默认为模块名
997
1061
  """
998
- cmd = f'{sys.executable} -m {module} {args}'
999
- self.add_process_cmd(cmd, name=name)
1062
+ cmd = [f'{sys.executable}', '-m', f'{module}']
1063
+ if isinstance(args, str):
1064
+ cmd.append(args)
1065
+ else:
1066
+ cmd += list(args)
1067
+
1068
+ return self.add_process_cmd(cmd, name, shell=shell)
1000
1069
 
1001
1070
  def stop_all(self):
1002
1071
  """ 停止所有后台进程 """
@@ -1004,14 +1073,84 @@ class MultiProcessLauncher:
1004
1073
  worker.process.terminate()
1005
1074
  self.workers = []
1006
1075
 
1007
- def _set_pdeathsig(self, sig=signal.SIGTERM):
1076
+ def _set_pdeathsig(self, sig=None):
1008
1077
  """ 在主服务退出时,这些进程也会全部自动关闭 """
1009
1078
 
1010
1079
  def callable():
1080
+ import signal
1081
+ sig2 = signal.SIGTERM if sig is None else sig
1011
1082
  libc = ctypes.CDLL("libc.so.6")
1012
- return libc.prctl(1, sig)
1083
+ return libc.prctl(1, sig2)
1084
+
1085
+ if sys.platform == 'win32':
1086
+ # windows系统暂设为空
1087
+ return None
1088
+ else:
1089
+ return callable
1090
+
1091
+ def run_endless(self):
1092
+ """ 一直运行,直到用户输入kill命令
1093
+
1094
+ poll:
1095
+ 如果进程仍在运行,poll()方法返回None。
1096
+ 如果进程已经结束,poll()方法返回进程的退出码(exit code)。
1097
+ 如果进程正常结束,退出码通常为0。
1098
+ 如果进程异常结束,退出码通常是一个非零值,表示异常的类型或错误码。
1099
+ """
1100
+ import pandas as pd
1101
+ from pyxllib.algo.stat import print_full_dataframe
1102
+
1103
+ while True:
1104
+ cmd = input('>>>')
1105
+ if cmd == 'kill':
1106
+ self.stop_all()
1107
+ break
1108
+ elif cmd == 'count':
1109
+ # 需要实际检查现有进程
1110
+ m = sum([1 for worker in self.workers if worker.process.poll() is None])
1111
+ print(f'有{m}个进程正在运行')
1112
+ elif cmd == 'list': # 列出所有进程(转df查看)
1113
+ ls = []
1114
+ for worker in self.workers:
1115
+ ls.append([worker.name, worker.process.pid, worker.process.poll(), worker.raw_cmd])
1116
+ df = pd.DataFrame(ls, columns=['name', 'pid', 'poll', 'args'])
1117
+ print_full_dataframe(df)
1118
+
1119
+
1120
+ def support_multi_processes(default_processes=1):
1121
+ """ 对函数进行扩展,支持并发多进程运行
1122
+
1123
+ 注意被装饰的函数,需要支持 process_count、process_id 两个参数,来获得总进程数,当前进程id的信息
1124
+ """
1013
1125
 
1014
- return callable
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
1015
1154
 
1016
1155
 
1017
1156
  def xlmd5(content):
@@ -1096,6 +1235,8 @@ def safe_div(a, b):
1096
1235
 
1097
1236
  def inplace_decorate(parent, func_name, wrapper):
1098
1237
  """ 将指定的函数替换为装饰器版本
1238
+ 允许在运行时动态地将一个函数或方法替换为其装饰版本。通常用于添加日志、性能测试、事务处理等。
1239
+ (既然可以写成装饰版本,相当于其实要完全替换成另外的函数也是可以的)
1099
1240
 
1100
1241
  当然,因为py一切皆对象,这里处理的不是函数,而是其他变量等对象也是可以的
1101
1242
 
@@ -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()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyxllib
3
- Version: 0.3.115
3
+ Version: 0.3.117
4
4
  Summary: 厦门理工模式识别团队通用python代码工具库
5
5
  Home-page: https://github.com/XLPRUtils/pyxllib
6
6
  Author: code4101
@@ -15,6 +15,7 @@ Requires-Python: >=3.6
15
15
  Description-Content-Type: text/markdown
16
16
  Provides-Extra: xlcv
17
17
  Provides-Extra: xlai
18
+ Provides-Extra: xlall
18
19
  License-File: LICENSE
19
20
 
20
21
  # 1 install
@@ -80,6 +80,7 @@ pyxllib/prog/ipyexec.py
80
80
  pyxllib/prog/multiprocs.py
81
81
  pyxllib/prog/newbie.py
82
82
  pyxllib/prog/pupil.py
83
+ pyxllib/prog/scheduler.py
83
84
  pyxllib/prog/sitepackages.py
84
85
  pyxllib/prog/xlosenv.py
85
86
  pyxllib/prog/specialist/__init__.py
@@ -21,14 +21,29 @@ Jinja2
21
21
  pandas>=0.23.4
22
22
 
23
23
  [xlai]
24
- visdom
25
- pillow
26
- opencv-python
24
+ pynvml
27
25
  opsdroid-get-image-size
26
+ opencv-python
27
+ pillow
28
28
  xlcocotools
29
- pynvml
29
+ visdom
30
30
 
31
- [xlcv]
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
40
+ opencv-python
41
+ flask-restful
33
42
  pillow
43
+ zhconv
44
+ xlrd
45
+
46
+ [xlcv]
47
+ pillow
48
+ opsdroid-get-image-size
34
49
  opencv-python
@@ -28,18 +28,23 @@ xlcocotools
28
28
 
29
29
  # 全量的依赖,自用
30
30
  xlall = """
31
+ flask
32
+ flask-cors
31
33
  xlrd
32
- flask_wtf
33
- flask_restful
34
+ flask-wtf
35
+ flask-restful
34
36
  zhconv
35
37
  sentencepiece
38
+ ujson
39
+ html2text
40
+ flask-jwt-extended
36
41
  """
37
42
 
38
43
  _dir = Path(__file__).parent
39
44
 
40
45
  setup(
41
46
  name='pyxllib', # pip 安装时用的名字
42
- version='0.3.115', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
47
+ version='0.3.117', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
43
48
  author='code4101',
44
49
  author_email='877362867@qq.com',
45
50
  url='https://github.com/XLPRUtils/pyxllib',
@@ -67,5 +72,7 @@ setup(
67
72
  # ①静态版:pip install pyxllib[xlcv]
68
73
  # ②开发版:python setup.py develop easy_install pyxllib[xlcv]
69
74
  extras_require={'xlcv': '\n'.join(set((xlcv).splitlines())),
70
- 'xlai': '\n'.join(set((xlcv + xlai).splitlines()))},
75
+ 'xlai': '\n'.join(set((xlcv + xlai).splitlines())),
76
+ 'xlall': '\n'.join(set((xlcv + xlall).splitlines())),
77
+ },
71
78
  )
File without changes
File without changes
File without changes
File without changes