Nuitka-winsvc 2.4.8__cp311-cp311-win_amd64.whl → 2.5.1__cp311-cp311-win_amd64.whl

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.

Potentially problematic release.


This version of Nuitka-winsvc might be problematic. Click here for more details.

Files changed (294) hide show
  1. {Nuitka_winsvc-2.4.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +2 -1
  2. {Nuitka_winsvc-2.4.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/RECORD +294 -271
  3. {Nuitka_winsvc-2.4.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
  4. nuitka/Builtins.py +31 -0
  5. nuitka/HardImportRegistry.py +8 -0
  6. nuitka/MainControl.py +9 -4
  7. nuitka/OptionParsing.py +105 -52
  8. nuitka/Options.py +73 -16
  9. nuitka/OutputDirectories.py +7 -2
  10. nuitka/PostProcessing.py +69 -38
  11. nuitka/Progress.py +16 -1
  12. nuitka/PythonVersions.py +2 -1
  13. nuitka/Serialization.py +4 -2
  14. nuitka/Tracing.py +69 -1
  15. nuitka/Version.py +2 -2
  16. nuitka/build/Backend.scons +45 -5
  17. nuitka/build/CCompilerVersion.scons +6 -0
  18. nuitka/build/Onefile.scons +6 -0
  19. nuitka/build/SconsCaching.py +12 -2
  20. nuitka/build/SconsCompilerSettings.py +17 -6
  21. nuitka/build/SconsInterface.py +1 -0
  22. nuitka/build/SconsUtils.py +5 -0
  23. nuitka/build/include/nuitka/allocator.h +124 -1
  24. nuitka/build/include/nuitka/calling.h +6 -6
  25. nuitka/build/include/nuitka/compiled_asyncgen.h +10 -7
  26. nuitka/build/include/nuitka/compiled_frame.h +2 -1
  27. nuitka/build/include/nuitka/constants.h +6 -0
  28. nuitka/build/include/nuitka/debug_settings.h +60 -0
  29. nuitka/build/include/nuitka/exceptions.h +264 -121
  30. nuitka/build/include/nuitka/helper/attributes.h +0 -4
  31. nuitka/build/include/nuitka/helper/calling_generated.h +52 -52
  32. nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
  33. nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
  34. nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
  35. nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
  36. nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
  37. nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
  38. nuitka/build/include/nuitka/helper/dictionaries.h +65 -29
  39. nuitka/build/include/nuitka/helper/ints.h +86 -37
  40. nuitka/build/include/nuitka/helper/iterators.h +82 -34
  41. nuitka/build/include/nuitka/helper/operations.h +3 -0
  42. nuitka/build/include/nuitka/helper/operations_binary_add.h +6 -0
  43. nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
  44. nuitka/build/include/nuitka/helper/operations_binary_sub.h +6 -0
  45. nuitka/build/include/nuitka/helper/operations_inplace_add.h +3 -0
  46. nuitka/build/include/nuitka/helper/operations_inplace_sub.h +3 -0
  47. nuitka/build/include/nuitka/helper/raising.h +47 -28
  48. nuitka/build/include/nuitka/helper/richcomparisons.h +7 -0
  49. nuitka/build/include/nuitka/helpers.h +12 -2
  50. nuitka/build/include/nuitka/prelude.h +35 -25
  51. nuitka/build/include/nuitka/printing.h +9 -7
  52. nuitka/build/include/nuitka/threading.h +15 -1
  53. nuitka/build/include/nuitka/type_aliases.h +3 -0
  54. nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
  55. nuitka/build/inline_copy/stubgen/six.py +998 -0
  56. nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
  57. nuitka/build/static_src/CompiledAsyncgenType.c +45 -39
  58. nuitka/build/static_src/CompiledCellType.c +6 -4
  59. nuitka/build/static_src/CompiledCodeHelpers.c +104 -40
  60. nuitka/build/static_src/CompiledCoroutineType.c +40 -30
  61. nuitka/build/static_src/CompiledFrameType.c +110 -79
  62. nuitka/build/static_src/CompiledFunctionType.c +173 -151
  63. nuitka/build/static_src/CompiledGeneratorType.c +51 -49
  64. nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +424 -46
  65. nuitka/build/static_src/CompiledMethodType.c +10 -13
  66. nuitka/build/static_src/HelpersAllocator.c +270 -32
  67. nuitka/build/static_src/HelpersAttributes.c +0 -21
  68. nuitka/build/static_src/HelpersBuiltin.c +22 -13
  69. nuitka/build/static_src/HelpersCalling.c +7 -7
  70. nuitka/build/static_src/HelpersCallingGenerated.c +70 -70
  71. nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
  72. nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
  73. nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
  74. nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
  75. nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
  76. nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
  77. nuitka/build/static_src/HelpersComparisonEq.c +18 -4
  78. nuitka/build/static_src/HelpersComparisonEqUtils.c +1 -0
  79. nuitka/build/static_src/HelpersComparisonGe.c +18 -4
  80. nuitka/build/static_src/HelpersComparisonGt.c +18 -4
  81. nuitka/build/static_src/HelpersComparisonLe.c +18 -4
  82. nuitka/build/static_src/HelpersComparisonLt.c +18 -4
  83. nuitka/build/static_src/HelpersComparisonNe.c +18 -4
  84. nuitka/build/static_src/HelpersConsole.c +34 -8
  85. nuitka/build/static_src/HelpersConstantsBlob.c +10 -4
  86. nuitka/build/static_src/HelpersDictionaries.c +181 -34
  87. nuitka/build/static_src/HelpersDictionariesGenerated.c +0 -106
  88. nuitka/build/static_src/HelpersExceptions.c +24 -50
  89. nuitka/build/static_src/HelpersFiles.c +79 -5
  90. nuitka/build/static_src/HelpersImport.c +13 -9
  91. nuitka/build/static_src/HelpersImportHard.c +23 -46
  92. nuitka/build/static_src/HelpersLists.c +98 -9
  93. nuitka/build/static_src/HelpersMatching.c +1 -1
  94. nuitka/build/static_src/HelpersOperationBinaryAdd.c +224 -6
  95. nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +3 -0
  96. nuitka/build/static_src/HelpersOperationBinaryBitand.c +5 -5
  97. nuitka/build/static_src/HelpersOperationBinaryBitor.c +5 -5
  98. nuitka/build/static_src/HelpersOperationBinaryBitxor.c +5 -5
  99. nuitka/build/static_src/HelpersOperationBinaryDivmod.c +8 -2
  100. nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
  101. nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +14 -8
  102. nuitka/build/static_src/HelpersOperationBinaryLshift.c +36 -36
  103. nuitka/build/static_src/HelpersOperationBinaryMatmult.c +1 -0
  104. nuitka/build/static_src/HelpersOperationBinaryMod.c +22 -10
  105. nuitka/build/static_src/HelpersOperationBinaryMult.c +17 -7
  106. nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +14 -8
  107. nuitka/build/static_src/HelpersOperationBinaryPow.c +24 -24
  108. nuitka/build/static_src/HelpersOperationBinaryRshift.c +4 -4
  109. nuitka/build/static_src/HelpersOperationBinarySub.c +229 -8
  110. nuitka/build/static_src/HelpersOperationBinaryTruediv.c +8 -2
  111. nuitka/build/static_src/HelpersOperationInplaceAdd.c +162 -10
  112. nuitka/build/static_src/HelpersOperationInplaceBitand.c +5 -5
  113. nuitka/build/static_src/HelpersOperationInplaceBitor.c +5 -5
  114. nuitka/build/static_src/HelpersOperationInplaceBitxor.c +5 -5
  115. nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +11 -6
  116. nuitka/build/static_src/HelpersOperationInplaceLshift.c +20 -20
  117. nuitka/build/static_src/HelpersOperationInplaceMatmult.c +1 -0
  118. nuitka/build/static_src/HelpersOperationInplaceMod.c +11 -6
  119. nuitka/build/static_src/HelpersOperationInplaceMult.c +11 -6
  120. nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +11 -6
  121. nuitka/build/static_src/HelpersOperationInplacePow.c +20 -20
  122. nuitka/build/static_src/HelpersOperationInplaceRshift.c +4 -4
  123. nuitka/build/static_src/HelpersOperationInplaceSub.c +163 -10
  124. nuitka/build/static_src/HelpersOperationInplaceTruediv.c +6 -1
  125. nuitka/build/static_src/HelpersProfiling.c +1 -1
  126. nuitka/build/static_src/HelpersRaising.c +255 -310
  127. nuitka/build/static_src/HelpersStrings.c +1 -1
  128. nuitka/build/static_src/HelpersTuples.c +1 -1
  129. nuitka/build/static_src/HelpersTypes.c +98 -2
  130. nuitka/build/static_src/MainProgram.c +117 -29
  131. nuitka/build/static_src/MetaPathBasedLoader.c +18 -19
  132. nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +134 -11
  133. nuitka/build/static_src/OnefileBootstrap.c +6 -1
  134. nuitka/code_generation/AsyncgenCodes.py +2 -6
  135. nuitka/code_generation/BinaryOperationHelperDefinitions.py +269 -167
  136. nuitka/code_generation/BuiltinCodes.py +9 -1
  137. nuitka/code_generation/CallCodes.py +16 -16
  138. nuitka/code_generation/CodeGeneration.py +14 -2
  139. nuitka/code_generation/CodeHelperSelection.py +1 -1
  140. nuitka/code_generation/CodeHelpers.py +4 -1
  141. nuitka/code_generation/CodeObjectCodes.py +2 -2
  142. nuitka/code_generation/ComparisonCodes.py +13 -2
  143. nuitka/code_generation/ComparisonHelperDefinitions.py +23 -8
  144. nuitka/code_generation/Contexts.py +28 -16
  145. nuitka/code_generation/CoroutineCodes.py +2 -6
  146. nuitka/code_generation/DictCodes.py +3 -3
  147. nuitka/code_generation/ErrorCodes.py +34 -50
  148. nuitka/code_generation/ExceptionCodes.py +165 -96
  149. nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +25 -10
  150. nuitka/code_generation/FrameCodes.py +4 -11
  151. nuitka/code_generation/FunctionCodes.py +2 -6
  152. nuitka/code_generation/GeneratorCodes.py +2 -6
  153. nuitka/code_generation/GlobalConstants.py +8 -2
  154. nuitka/code_generation/GlobalsLocalsCodes.py +2 -2
  155. nuitka/code_generation/IteratorCodes.py +67 -54
  156. nuitka/code_generation/LineNumberCodes.py +1 -3
  157. nuitka/code_generation/ModuleCodes.py +28 -4
  158. nuitka/code_generation/OperationCodes.py +51 -20
  159. nuitka/code_generation/PackageResourceCodes.py +37 -0
  160. nuitka/code_generation/RaisingCodes.py +164 -90
  161. nuitka/code_generation/Reports.py +13 -5
  162. nuitka/code_generation/ReturnCodes.py +2 -16
  163. nuitka/code_generation/TryCodes.py +12 -24
  164. nuitka/code_generation/TypeAliasCodes.py +48 -0
  165. nuitka/code_generation/VariableCodes.py +99 -40
  166. nuitka/code_generation/VariableDeclarations.py +8 -8
  167. nuitka/code_generation/YieldCodes.py +1 -1
  168. nuitka/code_generation/c_types/CTypeBases.py +10 -2
  169. nuitka/code_generation/c_types/CTypeModuleDictVariables.py +3 -0
  170. nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +3 -4
  171. nuitka/code_generation/c_types/CTypeNuitkaInts.py +70 -25
  172. nuitka/code_generation/c_types/CTypeNuitkaVoids.py +1 -1
  173. nuitka/code_generation/c_types/CTypePyObjectPointers.py +16 -6
  174. nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +2 -2
  175. nuitka/code_generation/templates/CodeTemplatesConstants.py +11 -3
  176. nuitka/code_generation/templates/CodeTemplatesCoroutines.py +2 -2
  177. nuitka/code_generation/templates/CodeTemplatesExceptions.py +15 -16
  178. nuitka/code_generation/templates/CodeTemplatesFrames.py +18 -10
  179. nuitka/code_generation/templates/CodeTemplatesFunction.py +2 -2
  180. nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +2 -2
  181. nuitka/code_generation/templates/CodeTemplatesIterators.py +1 -35
  182. nuitka/code_generation/templates/CodeTemplatesModules.py +34 -4
  183. nuitka/code_generation/templates/CodeTemplatesVariables.py +73 -0
  184. nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +3 -3
  185. nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +3 -3
  186. nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +0 -105
  187. nuitka/code_generation/templates_c/HelperImportHard.c.j2 +1 -2
  188. nuitka/code_generation/templates_c/HelperLongTools.c.j2 +1 -1
  189. nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
  190. nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +9 -9
  191. nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
  192. nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +1 -1
  193. nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +1 -1
  194. nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +9 -9
  195. nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +7 -7
  196. nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +9 -9
  197. nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +7 -7
  198. nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +4 -4
  199. nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +1 -1
  200. nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +31 -31
  201. nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +1 -1
  202. nuitka/containers/Namedtuples.py +6 -0
  203. nuitka/containers/OrderedSets.py +105 -5
  204. nuitka/distutils/Build.py +14 -0
  205. nuitka/distutils/DistutilCommands.py +50 -10
  206. nuitka/finalizations/Finalization.py +3 -3
  207. nuitka/finalizations/FinalizeMarkups.py +10 -14
  208. nuitka/freezer/DependsExe.py +13 -3
  209. nuitka/freezer/DllDependenciesMacOS.py +18 -1
  210. nuitka/freezer/DllDependenciesWin32.py +26 -12
  211. nuitka/freezer/ImportDetection.py +3 -0
  212. nuitka/freezer/IncludedDataFiles.py +31 -8
  213. nuitka/freezer/IncludedEntryPoints.py +3 -2
  214. nuitka/freezer/Standalone.py +76 -18
  215. nuitka/importing/Importing.py +33 -6
  216. nuitka/importing/Recursion.py +12 -1
  217. nuitka/importing/StandardLibrary.py +57 -59
  218. nuitka/nodes/AsyncgenNodes.py +3 -6
  219. nuitka/nodes/BuiltinIteratorNodes.py +1 -1
  220. nuitka/nodes/BuiltinRefNodes.py +14 -30
  221. nuitka/nodes/ChildrenHavingMixins.py +439 -46
  222. nuitka/nodes/ConditionalNodes.py +3 -2
  223. nuitka/nodes/CoroutineNodes.py +3 -6
  224. nuitka/nodes/ExceptionNodes.py +102 -26
  225. nuitka/nodes/ExpressionBasesGenerated.py +288 -4
  226. nuitka/nodes/FrameNodes.py +22 -11
  227. nuitka/nodes/FunctionNodes.py +3 -3
  228. nuitka/nodes/GeneratorNodes.py +3 -6
  229. nuitka/nodes/HardImportNodesGenerated.py +182 -0
  230. nuitka/nodes/ImportNodes.py +2 -2
  231. nuitka/nodes/NodeBases.py +28 -1
  232. nuitka/nodes/NodeMakingHelpers.py +71 -50
  233. nuitka/nodes/OperatorNodesUnary.py +128 -3
  234. nuitka/nodes/OsSysNodes.py +37 -6
  235. nuitka/nodes/OutlineNodes.py +2 -2
  236. nuitka/nodes/StatementBasesGenerated.py +0 -2
  237. nuitka/nodes/StatementNodes.py +8 -7
  238. nuitka/nodes/SubscriptNodes.py +1 -1
  239. nuitka/nodes/TypeNodes.py +28 -1
  240. nuitka/nodes/shapes/BuiltinTypeShapes.py +24 -7
  241. nuitka/nodes/shapes/ShapeMixins.py +17 -0
  242. nuitka/nodes/shapes/StandardShapes.py +53 -1
  243. nuitka/optimizations/BytecodeDemotion.py +2 -1
  244. nuitka/plugins/PluginBase.py +64 -22
  245. nuitka/plugins/Plugins.py +6 -3
  246. nuitka/plugins/standard/AntiBloatPlugin.py +23 -12
  247. nuitka/plugins/standard/ImplicitImports.py +1 -13
  248. nuitka/plugins/standard/KivyPlugin.py +3 -12
  249. nuitka/plugins/standard/MatplotlibPlugin.py +12 -1
  250. nuitka/plugins/standard/MultiprocessingPlugin.py +11 -20
  251. nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
  252. nuitka/plugins/standard/PySidePyQtPlugin.py +8 -0
  253. nuitka/plugins/standard/TkinterPlugin.py +0 -56
  254. nuitka/plugins/standard/TransformersPlugin.py +70 -275
  255. nuitka/plugins/standard/standard.nuitka-package.config.yml +510 -28
  256. nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +35 -2
  257. nuitka/reports/CompilationReportReader.py +12 -0
  258. nuitka/reports/Reports.py +11 -0
  259. nuitka/specs/BuiltinParameterSpecs.py +5 -1
  260. nuitka/specs/HardImportSpecs.py +7 -0
  261. nuitka/specs/ParameterSpecs.py +4 -4
  262. nuitka/tools/general/dll_report/__main__.py +10 -1
  263. nuitka/tools/onefile_compressor/OnefileCompressor.py +1 -1
  264. nuitka/tools/specialize/CTypeDescriptions.py +158 -9
  265. nuitka/tools/specialize/SpecializeC.py +218 -56
  266. nuitka/tools/testing/Common.py +70 -63
  267. nuitka/tools/testing/compare_with_cpython/__main__.py +3 -1
  268. nuitka/tools/testing/measure_construct_performance/__main__.py +1 -8
  269. nuitka/tools/testing/run_nuitka_tests/__main__.py +77 -11
  270. nuitka/tools/watch/AutoStage.py +1 -0
  271. nuitka/tree/Building.py +10 -37
  272. nuitka/tree/ComplexCallHelperFunctions.py +4 -0
  273. nuitka/tree/ReformulationAssertStatements.py +31 -14
  274. nuitka/tree/ReformulationAssignmentStatements.py +5 -1
  275. nuitka/tree/ReformulationClasses3.py +94 -19
  276. nuitka/tree/ReformulationDictionaryCreation.py +1 -0
  277. nuitka/tree/ReformulationFunctionStatements.py +1 -1
  278. nuitka/tree/ReformulationMatchStatements.py +3 -1
  279. nuitka/tree/ReformulationYieldExpressions.py +23 -5
  280. nuitka/utils/CommandLineOptions.py +27 -3
  281. nuitka/utils/Download.py +2 -2
  282. nuitka/utils/Execution.py +36 -31
  283. nuitka/utils/FileOperations.py +39 -54
  284. nuitka/utils/Importing.py +2 -14
  285. nuitka/utils/InlineCopies.py +52 -0
  286. nuitka/utils/InstalledPythons.py +9 -4
  287. nuitka/utils/Json.py +2 -2
  288. nuitka/utils/PackageResources.py +44 -0
  289. nuitka/utils/Utils.py +17 -0
  290. {Nuitka_winsvc-2.4.8.data → Nuitka_winsvc-2.5.1.data}/scripts/nuitka-run.cmd +0 -0
  291. {Nuitka_winsvc-2.4.8.data → Nuitka_winsvc-2.5.1.data}/scripts/nuitka.cmd +0 -0
  292. {Nuitka_winsvc-2.4.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
  293. {Nuitka_winsvc-2.4.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
  294. {Nuitka_winsvc-2.4.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
@@ -18,7 +18,7 @@ from nuitka.Options import isExperimental
18
18
  from nuitka.plugins.YamlPluginBase import NuitkaYamlPluginBase
19
19
  from nuitka.utils.ModuleNames import ModuleName
20
20
 
21
- # spell-checker: ignore dask,numba,statsmodels,matplotlib,sqlalchemy,ipykernel
21
+ # spell-checker: ignore dask,numba,statsmodels,matplotlib,sqlalchemy,ipykernel,pyximport
22
22
 
23
23
  _mode_choices = ("error", "warning", "nofollow", "allow")
24
24
 
@@ -111,6 +111,10 @@ class NuitkaPluginAntiBloat(NuitkaYamlPluginBase):
111
111
  noinclude_setuptools_mode,
112
112
  "setuptools",
113
113
  )
114
+ self.handled_modules["wheel.util"] = (
115
+ noinclude_setuptools_mode,
116
+ "setuptools",
117
+ )
114
118
  else:
115
119
  self.control_tags["use_setuptools"] = True
116
120
 
@@ -267,7 +271,7 @@ form 'module_name:[%s]'."""
267
271
  dest="show_changes",
268
272
  default=False,
269
273
  help="""\
270
- Annotate what changes are by the plugin done.""",
274
+ Annotate what changes are done by the plugin.""",
271
275
  )
272
276
 
273
277
  group.add_option(
@@ -411,7 +415,7 @@ Error, cannot exec module '%s', context code '%s' due to: %s"""
411
415
  replace_dst = self.evaluateExpression(
412
416
  full_name=module_name,
413
417
  expression=replace_code,
414
- config_name="module '%s' config 'replacements' " % module_name,
418
+ config_name="module '%s' config 'replacements'" % module_name,
415
419
  extra_context=self._getContextCode(
416
420
  module_name=module_name, anti_bloat_config=anti_bloat_config
417
421
  ),
@@ -556,10 +560,10 @@ Error, cannot exec module '%s', context code '%s' due to: %s"""
556
560
  def onFunctionBodyParsing(self, module_name, function_name, body):
557
561
  result = False
558
562
 
559
- config = self.config.get(module_name, section="anti-bloat")
560
-
561
- if config:
562
- for anti_bloat_config in config:
563
+ for anti_bloat_config in self.config.get(module_name, section="anti-bloat"):
564
+ if self.evaluateCondition(
565
+ full_name=module_name, condition=anti_bloat_config.get("when", "True")
566
+ ):
563
567
  if self._onFunctionBodyParsing(
564
568
  module_name=module_name,
565
569
  anti_bloat_config=anti_bloat_config,
@@ -604,7 +608,7 @@ class %(class_name)s:
604
608
  replacement = ast.parse(replacement).body[0]
605
609
 
606
610
  node.body[:] = replacement.body
607
- node.bases = replacement.bases
611
+ node.bases[:] = replacement.bases
608
612
 
609
613
  if self.show_changes:
610
614
  self.info(
@@ -616,10 +620,10 @@ class %(class_name)s:
616
620
  def onClassBodyParsing(self, module_name, class_name, node):
617
621
  result = False
618
622
 
619
- config = self.config.get(module_name, section="anti-bloat")
620
-
621
- if config:
622
- for anti_bloat_config in config:
623
+ for anti_bloat_config in self.config.get(module_name, section="anti-bloat"):
624
+ if self.evaluateCondition(
625
+ full_name=module_name, condition=anti_bloat_config.get("when", "True")
626
+ ):
623
627
  if self._onClassBodyParsing(
624
628
  module_name=module_name,
625
629
  anti_bloat_config=anti_bloat_config,
@@ -869,6 +873,13 @@ slow down compilation."""
869
873
  if module_name.hasNamespace(handled_module_name):
870
874
  return "bytecode"
871
875
 
876
+ # TODO: Detect effective "change_class" and "change_function"
877
+ # configuration for standard library modules, but often enough we are
878
+ # happy to let the bytecode not have the effect, but for these ones it's
879
+ # required. TODO: Make the compilation mode part of the config.
880
+ if module_name == "xmlrpc.server":
881
+ return "compiled"
882
+
872
883
  def onModuleCompleteSet(self, module_set):
873
884
  # TODO: Maybe have an entry point that works on the set of names
874
885
  # instead, we are not looking at the modules, and most plugins probably
@@ -102,7 +102,7 @@ class NuitkaPluginImplicitImports(NuitkaYamlPluginBase):
102
102
  for resolved in self._resolveModulePattern(v):
103
103
  yield resolved
104
104
  else:
105
- yield v
105
+ yield ModuleName(v)
106
106
  elif "*" in dependency or "?" in dependency:
107
107
  for resolved in self._resolveModulePattern(dependency):
108
108
  yield resolved
@@ -361,19 +361,7 @@ class NuitkaPluginImplicitImports(NuitkaYamlPluginBase):
361
361
  yield item
362
362
 
363
363
  def onModuleSourceCode(self, module_name, source_filename, source_code):
364
- # Too much code here, pylint: disable=too-many-branches
365
364
  # TODO: Move the ones that would be possible to yaml config,
366
- # e.g. the numexpr hack.
367
-
368
- if module_name == "numexpr.cpuinfo":
369
- # We cannot intercept "is" tests, but need it to be "isinstance",
370
- # so we patch it on the file. TODO: This is only temporary, in
371
- # the future, we may use optimization that understands the right
372
- # hand size of the "is" argument well enough to allow for our
373
- # type too.
374
- source_code = source_code.replace(
375
- "type(attr) is types.MethodType", "isinstance(attr, types.MethodType)"
376
- )
377
365
 
378
366
  if module_name == "site":
379
367
  if source_code.startswith("def ") or source_code.startswith("class "):
@@ -6,7 +6,6 @@
6
6
 
7
7
  from nuitka.Options import isStandaloneMode
8
8
  from nuitka.plugins.PluginBase import NuitkaPluginBase
9
- from nuitka.utils.Utils import isMacOS, isWin32Windows
10
9
 
11
10
 
12
11
  class NuitkaPluginKivy(NuitkaPluginBase):
@@ -64,7 +63,9 @@ except ImportError:
64
63
  return info
65
64
 
66
65
  def getImplicitImports(self, module):
67
- # Using branches to dispatch, pylint: disable=too-many-branches
66
+ # TODO: Move this all to yaml configuration, we now can
67
+ # query Kivy installation and use variables to solve some
68
+ # of the more difficult ones.
68
69
 
69
70
  full_name = module.getFullName()
70
71
 
@@ -92,16 +93,6 @@ except ImportError:
92
93
  yield "kivy.graphics.cgl_backend.cgl_sdl2"
93
94
  elif full_name == "kivy.graphics.cgl_backend.cgl_glew":
94
95
  yield "kivy.graphics.cgl_backend.cgl_gl"
95
- elif full_name == "kivymd.app":
96
- yield self.locateModules("kivymd.uix")
97
- elif full_name == "kivy.core.clipboard":
98
- if isWin32Windows():
99
- yield "kivy.core.clipboard.clipboard_winctypes"
100
- if isMacOS():
101
- if self.locateModule("pyobjus"):
102
- yield "kivy.core.clipboard.clipboard_nspaste"
103
- else:
104
- yield "kivy.core.clipboard.clipboard_sdl2"
105
96
 
106
97
  def getExtraDlls(self, module):
107
98
  """Copy extra shared libraries or data for this installation.
@@ -8,6 +8,7 @@ import os
8
8
  from nuitka.Options import isStandaloneMode
9
9
  from nuitka.plugins.PluginBase import NuitkaPluginBase
10
10
  from nuitka.plugins.Plugins import (
11
+ getActiveQtPlugin,
11
12
  getActiveQtPluginBindingName,
12
13
  hasActivePlugin,
13
14
  )
@@ -76,7 +77,7 @@ from inspect import getsource
76
77
  ),
77
78
  )
78
79
  except NuitkaCalledProcessError as e:
79
- self.debug("Exception during detection: %r" % e)
80
+ self.debug("Exception during detection: %s" % str(e))
80
81
 
81
82
  if "MPLBACKEND" not in os.environ:
82
83
  self.sysexit(
@@ -92,6 +93,15 @@ https://matplotlib.org/stable/users/installing/environment_variables_faq.html#en
92
93
  if info is None:
93
94
  self.sysexit("Error, it seems 'matplotlib' is not installed or broken.")
94
95
 
96
+ # Auto correct for using tk-inter the system setting.
97
+ if "tk" not in info.backend.lower() and hasActivePlugin("tk-inter"):
98
+ info = info.replace(backend="TkAgg")
99
+
100
+ if info.backend == "QtAgg" and getActiveQtPlugin() is None:
101
+ self.sysexit(
102
+ "Error, cannot use 'QtAgg' with not plugin for Qt binding active."
103
+ )
104
+
95
105
  return info
96
106
 
97
107
  def getImplicitImports(self, module):
@@ -183,6 +193,7 @@ https://matplotlib.org/stable/users/installing/environment_variables_faq.html#en
183
193
  if hasActivePlugin("tk-inter"):
184
194
  return True, "Needed for tkinter matplotlib backend"
185
195
 
196
+ # For Qt binding, include matplotlib backend, spell-checker: ignore qtagg
186
197
  if module_name == "matplotlib.backends.backend_qtagg":
187
198
  if getActiveQtPluginBindingName() is not None:
188
199
  return True, "Needed for qt matplotlib backend"
@@ -9,7 +9,7 @@ point to a "Python.exe" and won't use compiled code by default.
9
9
 
10
10
  The issue applies to accelerated and standalone mode alike.
11
11
 
12
- spell-checker: ignore joblib
12
+ spell-checker: ignore joblib,anyio
13
13
  """
14
14
 
15
15
  from nuitka import Options
@@ -51,28 +51,21 @@ class NuitkaPluginMultiprocessingWorkarounds(NuitkaPluginBase):
51
51
  def createPreModuleLoadCode(module):
52
52
  full_name = module.getFullName()
53
53
 
54
- # TODO: Replace the setting of "sys.frozen" with a change to the source code of the
55
- # modules we want to affect from this plugin, it's a huge impact on compatibility
56
- # with other things potentially. We should do it, once the anti-bloat engine is
57
- # reusable or supports conditional replacements based on plugin activity and is
58
- # always on.
59
- if full_name == "multiprocessing":
60
- code = """\
54
+ if full_name in ("multiprocessing", "anyio"):
55
+ yield (
56
+ """\
61
57
  import sys, os
62
- sys.frozen = 1
63
58
  argv0 = sys.argv[0]
64
59
  if sys.platform == "win32" and not os.path.exists(argv0) and not argv0.endswith(".exe"):
65
60
  argv0 += ".exe"
66
61
 
67
62
  sys.executable = %s
68
63
  sys._base_executable = sys.executable
69
- """ % (
70
- "__nuitka_binary_exe" if Options.isStandaloneMode() else "argv0"
71
- )
72
- return (
73
- code,
64
+ """
65
+ % ("__nuitka_binary_exe" if Options.isStandaloneMode() else "argv0"),
74
66
  """\
75
- Monkey patching "multiprocessing" load environment.""",
67
+ Monkey patching "%s" load environment."""
68
+ % full_name,
76
69
  )
77
70
 
78
71
  @staticmethod
@@ -80,7 +73,8 @@ Monkey patching "multiprocessing" load environment.""",
80
73
  full_name = module.getFullName()
81
74
 
82
75
  if full_name == "multiprocessing":
83
- code = """\
76
+ yield (
77
+ """\
84
78
  try:
85
79
  from multiprocessing.forking import ForkingPickler
86
80
  except ImportError:
@@ -99,10 +93,7 @@ def _reduce_compiled_method(m):
99
93
  ForkingPickler.register(type(C().f), _reduce_compiled_method)
100
94
  if str is bytes:
101
95
  ForkingPickler.register(type(C.f), _reduce_compiled_method)
102
- """
103
-
104
- return (
105
- code,
96
+ """,
106
97
  """\
107
98
  Monkey patching "multiprocessing" for compiled methods.""",
108
99
  )
@@ -0,0 +1,184 @@
1
+ # Copyright 2024, Kevin Rodriguez <mailto:turcioskevinr@gmail.com> find license text at end of file
2
+
3
+
4
+ """ Plugin for Playwright.
5
+
6
+ spell-checker: ignore Playwright
7
+ """
8
+
9
+ import os
10
+
11
+ from nuitka.Options import isStandaloneMode
12
+ from nuitka.plugins.PluginBase import NuitkaPluginBase
13
+
14
+
15
+ class NuitkaPluginPlaywright(NuitkaPluginBase):
16
+ """This class represents the main logic of the plugin."""
17
+
18
+ plugin_name = "playwright"
19
+ plugin_desc = "Required by 'playwright' package."
20
+
21
+ def __init__(self, include_browsers):
22
+ self.include_browsers = list(include_browsers)
23
+ self.installed_browsers = None
24
+
25
+ @staticmethod
26
+ def isAlwaysEnabled():
27
+ return True
28
+
29
+ @staticmethod
30
+ def isRelevant():
31
+ return isStandaloneMode()
32
+
33
+ @classmethod
34
+ def addPluginCommandLineOptions(cls, group):
35
+ group.add_option(
36
+ "--playwright-include-browser",
37
+ action="append",
38
+ dest="include_browsers",
39
+ default=[],
40
+ help="""\
41
+ Playwright browser to include. Can be specified multiple times. use "all" to include all installed browsers.
42
+ """,
43
+ )
44
+
45
+ def _getPlaywrightPath(self):
46
+ """Determine the path of the playwright module."""
47
+ info = self.locateModule("playwright")
48
+
49
+ if info is None:
50
+ self.sysexit("Error, it seems 'playwright' is not installed or broken.")
51
+
52
+ return info
53
+
54
+ def _getPlaywrightRegistryDirectory(self):
55
+ # this is a port of playwright's JS script which determines where the browsers are installed
56
+
57
+ env_defined = os.environ.get("PLAYWRIGHT_BROWSERS_PATH")
58
+ path_home = os.path.expanduser("~")
59
+ playwright_module_path = self._getPlaywrightPath()
60
+
61
+ result = os.path.join(
62
+ playwright_module_path, "driver", "package", ".local-browsers"
63
+ )
64
+
65
+ # TODO: This is seemingly a test for non-empty directory, which we should
66
+ # then add to FileOperations.
67
+
68
+ if os.path.exists(result) and next(os.scandir(result), False):
69
+ return result
70
+ elif env_defined == "0":
71
+ return result
72
+ elif env_defined:
73
+ result = os.path.normpath(env_defined)
74
+ else:
75
+ cache_directory = ""
76
+ if os.name == "posix":
77
+ cache_directory = os.environ.get(
78
+ "XDG_CACHE_HOME", os.path.join(path_home, ".cache")
79
+ )
80
+ elif os.name == "darwin":
81
+ cache_directory = os.path.join(path_home, "Library", "Caches")
82
+ elif os.name == "nt":
83
+ cache_directory = os.environ.get(
84
+ "LOCALAPPDATA", os.path.join(path_home, "AppData", "Local")
85
+ )
86
+
87
+ result = os.path.join(cache_directory, "ms-playwright")
88
+
89
+ if not os.path.isabs(result):
90
+ init_cwd = os.environ.get("INIT_CWD") or os.getcwd()
91
+ result = os.path.join(os.path.abspath(init_cwd), result)
92
+
93
+ return result
94
+
95
+ def getInstalledPlaywrightBrowsers(self):
96
+ registry_directory = self._getPlaywrightRegistryDirectory()
97
+ if not os.path.exists(registry_directory):
98
+ return
99
+
100
+ # TODO: Seems useless use of os.scandir, our helper for listing a directory
101
+ # would be better to use.
102
+ browsers_installed = [
103
+ browser
104
+ for browser in os.scandir(registry_directory)
105
+ if browser.name != ".links"
106
+ ]
107
+ self.installed_browsers = {}
108
+ for browser in browsers_installed:
109
+ self.installed_browsers[browser.name] = browser
110
+
111
+ def considerDataFiles(self, module):
112
+
113
+ if module.getFullName() != "playwright":
114
+ return
115
+
116
+ if not self.include_browsers:
117
+
118
+ self.sysexit(
119
+ "No browsers included. Use the option '--playwright-include-browser=browser_name' to include one. Use 'all' to include all installed ones." # pylint: disable=C0301
120
+ )
121
+
122
+ self.getInstalledPlaywrightBrowsers()
123
+
124
+ if not self.installed_browsers:
125
+ self.sysexit(
126
+ "Error, no browsers found in the registry, if you're using playwright, make sure to install a browser."
127
+ )
128
+
129
+ self.info("Including browsers: %s" % ", ".join(self.include_browsers))
130
+ if "all" in self.include_browsers:
131
+ self.include_browsers = self.installed_browsers
132
+ elif "ffmpeg" not in self.include_browsers and any(
133
+ browser.startswith("chrom") for browser in self.include_browsers
134
+ ):
135
+ for browser in self.installed_browsers:
136
+ if "ffmpeg" in self.installed_browsers[browser].name:
137
+ self.include_browsers.append(browser)
138
+ self.info(
139
+ "Including 'ffmpeg' for chromium-based browser. It is required by playwright."
140
+ )
141
+ break
142
+
143
+ for browser in self.include_browsers:
144
+ if browser not in self.installed_browsers:
145
+ msg = (
146
+ "Error, requested to include browser '%s' that was not found, the list of installed ones is '%s'."
147
+ % (
148
+ browser,
149
+ ", ".join(self.installed_browsers),
150
+ )
151
+ )
152
+ self.sysexit(msg)
153
+
154
+ msg = "Including '%s' from '%s'." % (
155
+ browser,
156
+ self.installed_browsers[browser].path,
157
+ )
158
+ self.info(msg)
159
+
160
+ yield self.makeIncludedDataDirectory(
161
+ source_path=self.installed_browsers[browser],
162
+ dest_path=os.path.join(
163
+ "playwright", "driver", "package", ".local-browsers", browser
164
+ ),
165
+ reason="Playwright browser '%s'" % browser,
166
+ tags="playwright",
167
+ raw=True,
168
+ )
169
+
170
+
171
+ # Part of "Nuitka", an optimizing Python compiler that is compatible and
172
+ # integrates with CPython, but also works on its own.
173
+ #
174
+ # Licensed under the Apache License, Version 2.0 (the "License");
175
+ # you may not use this file except in compliance with the License.
176
+ # You may obtain a copy of the License at
177
+ #
178
+ # http://www.apache.org/licenses/LICENSE-2.0
179
+ #
180
+ # Unless required by applicable law or agreed to in writing, software
181
+ # distributed under the License is distributed on an "AS IS" BASIS,
182
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
183
+ # See the License for the specific language governing permissions and
184
+ # limitations under the License.
@@ -72,6 +72,14 @@ class NuitkaPluginQtBindingsPluginBase(NuitkaPluginBase):
72
72
  if "sensible" in include_qt_plugins:
73
73
  include_qt_plugins.remove("sensible")
74
74
 
75
+ for include_qt_plugin in include_qt_plugins:
76
+ if include_qt_plugin not in ("qml", "all") and not self.hasPluginFamily(
77
+ include_qt_plugin
78
+ ):
79
+ self.sysexit(
80
+ "Error, there is no Qt plugin family '%s'." % include_qt_plugin
81
+ )
82
+
75
83
  self.qt_plugins = sensible_qt_plugins
76
84
  self.qt_plugins.update(include_qt_plugins)
77
85
 
@@ -11,7 +11,6 @@ from nuitka.Options import isStandaloneMode, shallCreateAppBundle
11
11
  from nuitka.plugins.PluginBase import NuitkaPluginBase
12
12
  from nuitka.PythonFlavors import isHomebrewPython
13
13
  from nuitka.PythonVersions import getSystemPrefixPath, getTkInterVersion
14
- from nuitka.utils.FileOperations import listDllFilesFromDirectory, relpath
15
14
  from nuitka.utils.Utils import isMacOS, isWin32Windows
16
15
 
17
16
  # spell-checker: ignore tkinterdnd,tkdnd,tcltk
@@ -135,34 +134,6 @@ override it here. Default is automatic detection.""",
135
134
  The Tcl library dir. See comments for Tk library dir.""",
136
135
  )
137
136
 
138
- @staticmethod
139
- def _getTkinterDnDPlatformDirectory():
140
- # From their code:
141
- import platform
142
-
143
- if platform.system() == "Darwin":
144
- return "osx64"
145
- elif platform.system() == "Linux":
146
- return "linux64"
147
- elif platform.system() == "Windows":
148
- return "win64"
149
- else:
150
- return None
151
-
152
- def _considerDataFilesTkinterDnD(self, module):
153
- platform_rep = self._getTkinterDnDPlatformDirectory()
154
-
155
- if platform_rep is None:
156
- return
157
-
158
- yield self.makeIncludedPackageDataFiles(
159
- package_name="tkinterdnd2",
160
- package_directory=module.getCompileTimeDirectory(),
161
- pattern=os.path.join("tkdnd", platform_rep, "**"),
162
- reason="Tcl needed for 'tkinterdnd2' usage",
163
- tags="tcl",
164
- )
165
-
166
137
  def _getTclCandidatePaths(self):
167
138
  # Check typical locations of the dirs
168
139
  yield os.getenv("TCL_LIBRARY")
@@ -234,12 +205,6 @@ The Tcl library dir. See comments for Tk library dir.""",
234
205
  IncludedDataFile objects.
235
206
  """
236
207
 
237
- # Extra TCL providing module go here:
238
- if module.getFullName() == "tkinterdnd2.TkinterDnD":
239
- yield self._considerDataFilesTkinterDnD(module)
240
-
241
- return
242
-
243
208
  if not _isTkInterModule(module) or self.files_copied:
244
209
  return
245
210
 
@@ -301,27 +266,6 @@ that works, report a bug."""
301
266
 
302
267
  self.files_copied = True
303
268
 
304
- def getExtraDlls(self, module):
305
- if module.getFullName() == "tkinterdnd2.TkinterDnD":
306
- platform_rep = self._getTkinterDnDPlatformDirectory()
307
-
308
- if platform_rep is None:
309
- return
310
-
311
- module_directory = module.getCompileTimeDirectory()
312
-
313
- for filename, _dll_filename in listDllFilesFromDirectory(
314
- os.path.join(module_directory, "tkdnd", platform_rep)
315
- ):
316
- dest_path = relpath(filename, module_directory)
317
- yield self.makeDllEntryPoint(
318
- source_path=filename,
319
- dest_path=os.path.join("tkinterdnd2", dest_path),
320
- module_name="tkinterdnd2",
321
- package_name="tkinterdnd2",
322
- reason="tkinterdnd2 package DLL",
323
- )
324
-
325
269
  def onModuleCompleteSet(self, module_set):
326
270
  if str is bytes:
327
271
  plugin_binding_name = "Tkinter"