Nuitka-winsvc 1.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.
- Nuitka_winsvc-1.8.data/scripts/nuitka-run.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka-run.cmd +9 -9
- Nuitka_winsvc-1.8.data/scripts/nuitka.bat → Nuitka_winsvc-2.5.1.data/scripts/nuitka.cmd +15 -15
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/METADATA +5 -3
- Nuitka_winsvc-2.5.1.dist-info/RECORD +977 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/WHEEL +1 -1
- nuitka/Builtins.py +49 -17
- nuitka/BytecodeCaching.py +24 -20
- nuitka/Bytecodes.py +23 -19
- nuitka/CacheCleanup.py +28 -23
- nuitka/Constants.py +19 -17
- nuitka/Errors.py +23 -17
- nuitka/HardImportRegistry.py +408 -0
- nuitka/MainControl.py +209 -116
- nuitka/ModuleRegistry.py +83 -20
- nuitka/OptionParsing.py +467 -221
- nuitka/Options.py +701 -225
- nuitka/OutputDirectories.py +47 -23
- nuitka/PostProcessing.py +133 -79
- nuitka/Progress.py +73 -24
- nuitka/PythonFlavors.py +141 -32
- nuitka/PythonOperators.py +18 -17
- nuitka/PythonVersions.py +107 -19
- nuitka/Serialization.py +70 -55
- nuitka/SourceCodeReferences.py +19 -17
- nuitka/Tracing.py +176 -70
- nuitka/TreeXML.py +31 -26
- nuitka/Variables.py +39 -41
- nuitka/Version.py +22 -8
- nuitka/__init__.py +5 -4
- nuitka/__main__.py +95 -29
- nuitka/__past__.py +44 -34
- nuitka/build/Backend.scons +243 -141
- nuitka/build/CCompilerVersion.scons +45 -31
- nuitka/build/DataComposerInterface.py +20 -17
- nuitka/build/Onefile.scons +56 -54
- nuitka/build/SconsCaching.py +105 -92
- nuitka/build/SconsCompilerSettings.py +167 -68
- nuitka/build/SconsHacks.py +25 -19
- nuitka/build/SconsInterface.py +155 -54
- nuitka/build/SconsProgress.py +19 -18
- nuitka/build/SconsSpawn.py +62 -33
- nuitka/build/SconsUtils.py +152 -55
- nuitka/build/__init__.py +5 -4
- nuitka/build/include/nuitka/allocator.h +228 -22
- nuitka/build/include/nuitka/builtins.h +17 -17
- nuitka/build/include/nuitka/calling.h +24 -24
- nuitka/build/include/nuitka/checkers.h +17 -18
- nuitka/build/include/nuitka/checksum_tools.h +14 -19
- nuitka/build/include/nuitka/compiled_asyncgen.h +28 -25
- nuitka/build/include/nuitka/compiled_cell.h +33 -18
- nuitka/build/include/nuitka/compiled_coroutine.h +18 -18
- nuitka/build/include/nuitka/compiled_frame.h +93 -54
- nuitka/build/include/nuitka/compiled_function.h +42 -20
- nuitka/build/include/nuitka/compiled_generator.h +24 -18
- nuitka/build/include/nuitka/compiled_method.h +17 -18
- nuitka/build/include/nuitka/constants.h +35 -18
- nuitka/build/include/nuitka/constants_blob.h +17 -17
- nuitka/build/include/nuitka/debug_settings.h +60 -0
- nuitka/build/include/nuitka/environment_variables.h +30 -0
- nuitka/build/include/nuitka/environment_variables_system.h +45 -0
- nuitka/build/include/nuitka/exception_groups.h +23 -26
- nuitka/build/include/nuitka/exceptions.h +717 -171
- nuitka/build/include/nuitka/filesystem_paths.h +26 -20
- nuitka/build/include/nuitka/freelists.h +38 -18
- nuitka/build/include/nuitka/helper/attributes.h +24 -22
- nuitka/build/include/nuitka/helper/boolean.h +17 -17
- nuitka/build/include/nuitka/helper/bytearrays.h +17 -17
- nuitka/build/include/nuitka/helper/bytes.h +14 -15
- nuitka/build/include/nuitka/helper/calling_generated.h +69 -69
- nuitka/build/include/nuitka/helper/comparisons_dual_eq.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_ge.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_gt.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_le.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_lt.h +47 -0
- nuitka/build/include/nuitka/helper/comparisons_dual_ne.h +39 -0
- nuitka/build/include/nuitka/helper/comparisons_eq.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ge.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_gt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_le.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_lt.h +17 -17
- nuitka/build/include/nuitka/helper/comparisons_ne.h +17 -17
- nuitka/build/include/nuitka/helper/complex.h +17 -17
- nuitka/build/include/nuitka/helper/dictionaries.h +89 -51
- nuitka/build/include/nuitka/helper/floats.h +17 -18
- nuitka/build/include/nuitka/helper/import_hard.h +25 -17
- nuitka/build/include/nuitka/helper/indexes.h +17 -18
- nuitka/build/include/nuitka/helper/ints.h +115 -54
- nuitka/build/include/nuitka/helper/iterators.h +99 -51
- nuitka/build/include/nuitka/helper/lists.h +26 -24
- nuitka/build/include/nuitka/helper/lists_generated.h +22 -22
- nuitka/build/include/nuitka/helper/mappings.h +17 -18
- nuitka/build/include/nuitka/helper/operations.h +20 -17
- nuitka/build/include/nuitka/helper/operations_binary_add.h +23 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_divmod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_dual_add.h +34 -0
- nuitka/build/include/nuitka/helper/operations_binary_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_binary_sub.h +23 -17
- nuitka/build/include/nuitka/helper/operations_binary_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_builtin_types.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_add.h +20 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitand.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_bitxor.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_floordiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_lshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_matmult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mod.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_mult.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_olddiv.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_pow.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_rshift.h +17 -17
- nuitka/build/include/nuitka/helper/operations_inplace_sub.h +20 -17
- nuitka/build/include/nuitka/helper/operations_inplace_truediv.h +17 -17
- nuitka/build/include/nuitka/helper/raising.h +68 -37
- nuitka/build/include/nuitka/helper/rangeobjects.h +17 -17
- nuitka/build/include/nuitka/helper/richcomparisons.h +21 -14
- nuitka/build/include/nuitka/helper/sequences.h +19 -13
- nuitka/build/include/nuitka/helper/sets.h +11 -12
- nuitka/build/include/nuitka/helper/slices.h +31 -25
- nuitka/build/include/nuitka/helper/strings.h +16 -17
- nuitka/build/include/nuitka/helper/subscripts.h +18 -201
- nuitka/build/include/nuitka/helper/tuples.h +64 -52
- nuitka/build/include/nuitka/helpers.h +50 -22
- nuitka/build/include/nuitka/importing.h +28 -21
- nuitka/build/include/nuitka/jit_sources.h +25 -0
- nuitka/build/include/nuitka/prelude.h +163 -71
- nuitka/build/include/nuitka/printing.h +29 -22
- nuitka/build/include/nuitka/python_pgo.h +19 -18
- nuitka/build/include/nuitka/safe_string_ops.h +20 -18
- nuitka/build/include/nuitka/threading.h +45 -32
- nuitka/build/include/nuitka/tracing.h +28 -18
- nuitka/build/include/nuitka/type_aliases.h +30 -0
- nuitka/build/include/nuitka/unfreezing.h +29 -23
- nuitka/build/inline_copy/bin/scons.py +14 -0
- nuitka/build/inline_copy/lib/scons-4.3.0/SCons/Variables/ListVariable.py +6 -6
- nuitka/build/inline_copy/pkg_resources/pkg_resources/__init__.py +0 -3
- nuitka/build/inline_copy/python_hacl/LICENSE.txt +201 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.c +1430 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_MD5.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.c +463 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA1.h +66 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.c +1273 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA2.h +204 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.c +734 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Hash_SHA3.h +131 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/Hacl_Streaming_Types.h +83 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt128_Verified.h +346 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/FStar_UInt_8_16_32_64.h +107 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/fstar_uint128_struct_endianness.h +68 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/internal/target.h +293 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/lowstar_endianness.h +231 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/include/krml/types.h +14 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_MD5.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA1.h +56 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA2.h +164 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/internal/Hacl_Hash_SHA3.h +65 -0
- nuitka/build/inline_copy/python_hacl/hacl_312/python_hacl_namespaces.h +89 -0
- nuitka/build/inline_copy/stubgen/astunparse.py +938 -0
- nuitka/build/inline_copy/stubgen/six.py +998 -0
- nuitka/build/inline_copy/stubgen/stubgen.py +307 -0
- nuitka/build/inline_copy/tqdm/tqdm/__init__.py +2 -2
- nuitka/build/inline_copy/tqdm/tqdm/_monitor.py +4 -1
- nuitka/build/inline_copy/tqdm/tqdm/utils.py +14 -8
- nuitka/build/inline_copy/tqdm/tqdm/version.py +1 -8
- nuitka/build/inline_copy/zlib/LICENSE +22 -0
- nuitka/build/inline_copy/zlib/crc32.c +1049 -0
- nuitka/build/inline_copy/zlib/crc32.h +9446 -0
- nuitka/build/inline_copy/zlib/zconf.h +551 -0
- nuitka/build/inline_copy/zlib/zlib.h +1938 -0
- nuitka/build/inline_copy/zlib/zutil.h +275 -0
- nuitka/build/static_src/CompiledAsyncgenType.c +221 -221
- nuitka/build/static_src/CompiledCellType.c +69 -44
- nuitka/build/static_src/CompiledCodeHelpers.c +276 -159
- nuitka/build/static_src/CompiledCoroutineType.c +229 -226
- nuitka/build/static_src/CompiledFrameType.c +323 -138
- nuitka/build/static_src/CompiledFunctionType.c +547 -231
- nuitka/build/static_src/CompiledGeneratorType.c +416 -290
- nuitka/build/static_src/CompiledGeneratorTypeUncompiledIntegration.c +593 -228
- nuitka/build/static_src/CompiledMethodType.c +91 -82
- nuitka/build/static_src/HelpersAllocator.c +352 -45
- nuitka/build/static_src/HelpersAttributes.c +30 -72
- nuitka/build/static_src/HelpersBuiltin.c +65 -46
- nuitka/build/static_src/HelpersBuiltinTypeMethods.c +17 -17
- nuitka/build/static_src/HelpersBytes.c +19 -20
- nuitka/build/static_src/HelpersCalling.c +40 -37
- nuitka/build/static_src/HelpersCallingGenerated.c +1061 -242
- nuitka/build/static_src/HelpersChecksumTools.c +35 -21
- nuitka/build/static_src/HelpersClasses.c +17 -17
- nuitka/build/static_src/HelpersComparisonDualEq.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualGe.c +121 -0
- nuitka/build/static_src/HelpersComparisonDualGt.c +121 -0
- nuitka/build/static_src/HelpersComparisonDualLe.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualLt.c +183 -0
- nuitka/build/static_src/HelpersComparisonDualNe.c +121 -0
- nuitka/build/static_src/HelpersComparisonEq.c +536 -496
- nuitka/build/static_src/HelpersComparisonEqUtils.c +22 -19
- nuitka/build/static_src/HelpersComparisonGe.c +531 -501
- nuitka/build/static_src/HelpersComparisonGt.c +530 -500
- nuitka/build/static_src/HelpersComparisonLe.c +531 -501
- nuitka/build/static_src/HelpersComparisonLt.c +530 -500
- nuitka/build/static_src/HelpersComparisonNe.c +538 -496
- nuitka/build/static_src/HelpersConsole.c +122 -0
- nuitka/build/static_src/HelpersConstantsBlob.c +550 -521
- nuitka/build/static_src/HelpersDeepcopy.c +33 -33
- nuitka/build/static_src/HelpersDictionaries.c +232 -63
- nuitka/build/static_src/HelpersDictionariesGenerated.c +130 -127
- nuitka/build/static_src/HelpersDumpBacktraces.c +63 -0
- nuitka/build/static_src/HelpersEnvironmentVariables.c +65 -0
- nuitka/build/static_src/HelpersEnvironmentVariablesSystem.c +93 -0
- nuitka/build/static_src/HelpersExceptions.c +147 -62
- nuitka/build/static_src/HelpersFiles.c +116 -22
- nuitka/build/static_src/HelpersFilesystemPaths.c +292 -181
- nuitka/build/static_src/HelpersFloats.c +37 -31
- nuitka/build/static_src/HelpersHeapStorage.c +21 -17
- nuitka/build/static_src/HelpersImport.c +61 -29
- nuitka/build/static_src/HelpersImportHard.c +74 -61
- nuitka/build/static_src/HelpersJitSources.c +46 -0
- nuitka/build/static_src/HelpersLists.c +237 -58
- nuitka/build/static_src/HelpersListsGenerated.c +41 -41
- nuitka/build/static_src/HelpersMappings.c +17 -17
- nuitka/build/static_src/HelpersMatching.c +137 -51
- nuitka/build/static_src/HelpersOperationBinaryAdd.c +397 -152
- nuitka/build/static_src/HelpersOperationBinaryAddUtils.c +102 -52
- nuitka/build/static_src/HelpersOperationBinaryBitand.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryBitor.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryBitxor.c +55 -55
- nuitka/build/static_src/HelpersOperationBinaryDivmod.c +49 -43
- nuitka/build/static_src/HelpersOperationBinaryDivmodUtils.c +17 -17
- nuitka/build/static_src/HelpersOperationBinaryDualAdd.c +172 -0
- nuitka/build/static_src/HelpersOperationBinaryFloordiv.c +55 -49
- nuitka/build/static_src/HelpersOperationBinaryInplaceAdd.c +20 -21
- nuitka/build/static_src/HelpersOperationBinaryLshift.c +83 -83
- nuitka/build/static_src/HelpersOperationBinaryMatmult.c +25 -24
- nuitka/build/static_src/HelpersOperationBinaryMod.c +129 -117
- nuitka/build/static_src/HelpersOperationBinaryMult.c +98 -82
- nuitka/build/static_src/HelpersOperationBinaryMultUtils.c +33 -30
- nuitka/build/static_src/HelpersOperationBinaryOlddiv.c +55 -49
- nuitka/build/static_src/HelpersOperationBinaryPow.c +68 -68
- nuitka/build/static_src/HelpersOperationBinaryPowUtils.c +12 -12
- nuitka/build/static_src/HelpersOperationBinaryRshift.c +51 -51
- nuitka/build/static_src/HelpersOperationBinarySub.c +309 -88
- nuitka/build/static_src/HelpersOperationBinaryTruediv.c +49 -43
- nuitka/build/static_src/HelpersOperationInplaceAdd.c +333 -163
- nuitka/build/static_src/HelpersOperationInplaceAddUtils.c +24 -22
- nuitka/build/static_src/HelpersOperationInplaceBitand.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceBitor.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceBitxor.c +58 -58
- nuitka/build/static_src/HelpersOperationInplaceFloordiv.c +73 -68
- nuitka/build/static_src/HelpersOperationInplaceLshift.c +64 -64
- nuitka/build/static_src/HelpersOperationInplaceMatmult.c +38 -37
- nuitka/build/static_src/HelpersOperationInplaceMod.c +145 -140
- nuitka/build/static_src/HelpersOperationInplaceMult.c +89 -84
- nuitka/build/static_src/HelpersOperationInplaceOlddiv.c +73 -68
- nuitka/build/static_src/HelpersOperationInplacePow.c +82 -82
- nuitka/build/static_src/HelpersOperationInplaceRshift.c +48 -48
- nuitka/build/static_src/HelpersOperationInplaceSub.c +275 -122
- nuitka/build/static_src/HelpersOperationInplaceTruediv.c +68 -63
- nuitka/build/static_src/HelpersProfiling.c +25 -24
- nuitka/build/static_src/HelpersPythonPgo.c +22 -22
- nuitka/build/static_src/HelpersRaising.c +296 -283
- nuitka/build/static_src/HelpersSafeStrings.c +34 -22
- nuitka/build/static_src/HelpersSequences.c +18 -19
- nuitka/build/static_src/HelpersSlices.c +29 -23
- nuitka/build/static_src/HelpersStrings.c +235 -38
- nuitka/build/static_src/HelpersTuples.c +46 -34
- nuitka/build/static_src/HelpersTypes.c +166 -25
- nuitka/build/static_src/InspectPatcher.c +108 -27
- nuitka/build/static_src/MainProgram.c +464 -280
- nuitka/build/static_src/MetaPathBasedLoader.c +381 -257
- nuitka/build/static_src/MetaPathBasedLoaderImportlibMetadataDistribution.c +39 -26
- nuitka/build/static_src/MetaPathBasedLoaderResourceReader.c +17 -18
- nuitka/build/static_src/MetaPathBasedLoaderResourceReaderFiles.c +227 -29
- nuitka/build/static_src/OnefileBootstrap.c +281 -164
- nuitka/build/static_src/OnefileSplashScreen.cpp +51 -27
- nuitka/code_generation/AsyncgenCodes.py +21 -23
- nuitka/code_generation/AttributeCodes.py +31 -27
- nuitka/code_generation/BinaryOperationHelperDefinitions.py +290 -184
- nuitka/code_generation/BranchCodes.py +19 -17
- nuitka/code_generation/BuiltinCodes.py +29 -18
- nuitka/code_generation/CallCodes.py +35 -33
- nuitka/code_generation/ClassCodes.py +19 -17
- nuitka/code_generation/CodeGeneration.py +61 -28
- nuitka/code_generation/CodeHelperSelection.py +20 -18
- nuitka/code_generation/CodeHelpers.py +28 -21
- nuitka/code_generation/CodeObjectCodes.py +36 -26
- nuitka/code_generation/ComparisonCodes.py +51 -22
- nuitka/code_generation/ComparisonHelperDefinitions.py +42 -25
- nuitka/code_generation/ConditionalCodes.py +19 -17
- nuitka/code_generation/ConstantCodes.py +82 -28
- nuitka/code_generation/Contexts.py +180 -42
- nuitka/code_generation/CoroutineCodes.py +21 -23
- nuitka/code_generation/CtypesCodes.py +19 -17
- nuitka/code_generation/DictCodes.py +28 -26
- nuitka/code_generation/Emission.py +21 -18
- nuitka/code_generation/ErrorCodes.py +57 -79
- nuitka/code_generation/EvalCodes.py +24 -20
- nuitka/code_generation/ExceptionCodes.py +182 -104
- nuitka/code_generation/ExpressionCTypeSelectionHelpers.py +45 -27
- nuitka/code_generation/ExpressionCodes.py +19 -17
- nuitka/code_generation/FrameCodes.py +28 -31
- nuitka/code_generation/FunctionCodes.py +26 -27
- nuitka/code_generation/GeneratorCodes.py +25 -26
- nuitka/code_generation/GlobalConstants.py +51 -25
- nuitka/code_generation/GlobalsLocalsCodes.py +23 -21
- nuitka/code_generation/IdCodes.py +19 -17
- nuitka/code_generation/ImportCodes.py +90 -50
- nuitka/code_generation/Indentation.py +23 -22
- nuitka/code_generation/IndexCodes.py +19 -17
- nuitka/code_generation/InjectCCodes.py +14 -12
- nuitka/code_generation/IntegerCodes.py +19 -17
- nuitka/code_generation/IteratorCodes.py +86 -71
- nuitka/code_generation/JitCodes.py +44 -0
- nuitka/code_generation/LabelCodes.py +19 -17
- nuitka/code_generation/LineNumberCodes.py +20 -20
- nuitka/code_generation/ListCodes.py +32 -36
- nuitka/code_generation/LoaderCodes.py +22 -17
- nuitka/code_generation/LocalsDictCodes.py +56 -32
- nuitka/code_generation/LoopCodes.py +19 -17
- nuitka/code_generation/MatchCodes.py +42 -22
- nuitka/code_generation/ModuleCodes.py +71 -29
- nuitka/code_generation/Namify.py +27 -23
- nuitka/code_generation/NetworkxCodes.py +51 -0
- nuitka/code_generation/OperationCodes.py +80 -51
- nuitka/code_generation/PackageResourceCodes.py +96 -23
- nuitka/code_generation/PrintCodes.py +19 -17
- nuitka/code_generation/PythonAPICodes.py +19 -17
- nuitka/code_generation/RaisingCodes.py +183 -107
- nuitka/code_generation/Reports.py +32 -22
- nuitka/code_generation/ReturnCodes.py +20 -32
- nuitka/code_generation/SetCodes.py +19 -17
- nuitka/code_generation/SliceCodes.py +22 -20
- nuitka/code_generation/StringCodes.py +19 -17
- nuitka/code_generation/SubscriptCodes.py +24 -30
- nuitka/code_generation/TensorflowCodes.py +54 -0
- nuitka/code_generation/TryCodes.py +31 -41
- nuitka/code_generation/TupleCodes.py +20 -18
- nuitka/code_generation/TypeAliasCodes.py +119 -0
- nuitka/code_generation/VariableCodes.py +118 -55
- nuitka/code_generation/VariableDeclarations.py +28 -25
- nuitka/code_generation/YieldCodes.py +23 -21
- nuitka/code_generation/__init__.py +5 -4
- nuitka/code_generation/c_types/CTypeBases.py +29 -19
- nuitka/code_generation/c_types/CTypeBooleans.py +19 -17
- nuitka/code_generation/c_types/CTypeCFloats.py +19 -17
- nuitka/code_generation/c_types/CTypeCLongs.py +19 -18
- nuitka/code_generation/c_types/CTypeModuleDictVariables.py +22 -17
- nuitka/code_generation/c_types/CTypeNuitkaBooleans.py +22 -21
- nuitka/code_generation/c_types/CTypeNuitkaInts.py +89 -43
- nuitka/code_generation/c_types/CTypeNuitkaVoids.py +20 -18
- nuitka/code_generation/c_types/CTypePyObjectPointers.py +43 -31
- nuitka/code_generation/c_types/CTypeVoids.py +20 -17
- nuitka/code_generation/c_types/__init__.py +5 -4
- nuitka/code_generation/templates/CodeTemplatesAsyncgens.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesConstants.py +143 -39
- nuitka/code_generation/templates/CodeTemplatesCoroutines.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesExceptions.py +33 -33
- nuitka/code_generation/templates/CodeTemplatesFrames.py +36 -27
- nuitka/code_generation/templates/CodeTemplatesFunction.py +20 -19
- nuitka/code_generation/templates/CodeTemplatesGeneratorFunction.py +21 -19
- nuitka/code_generation/templates/CodeTemplatesIterators.py +19 -53
- nuitka/code_generation/templates/CodeTemplatesLoader.py +25 -19
- nuitka/code_generation/templates/CodeTemplatesModules.py +278 -169
- nuitka/code_generation/templates/CodeTemplatesVariables.py +115 -27
- nuitka/code_generation/templates/TemplateDebugWrapper.py +19 -18
- nuitka/code_generation/templates/__init__.py +5 -4
- nuitka/code_generation/templates_c/CodeTemplateCallsMethodPositional.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateCallsMixed.c.j2 +21 -21
- nuitka/code_generation/templates_c/CodeTemplateCallsPositional.c.j2 +79 -28
- nuitka/code_generation/templates_c/CodeTemplateCallsPositionalMethodDescr.c.j2 +22 -22
- nuitka/code_generation/templates_c/CodeTemplateMakeListHinted.c.j2 +19 -19
- nuitka/code_generation/templates_c/CodeTemplateMakeListSmall.c.j2 +19 -19
- nuitka/code_generation/templates_c/HelperBuiltinMethodOperation.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperDictionaryCopy.c.j2 +74 -106
- nuitka/code_generation/templates_c/HelperImportHard.c.j2 +19 -20
- nuitka/code_generation/templates_c/HelperLongTools.c.j2 +19 -19
- nuitka/code_generation/templates_c/HelperObjectTools.c.j2 +6 -6
- nuitka/code_generation/templates_c/HelperOperationBinary.c.j2 +23 -23
- nuitka/code_generation/templates_c/HelperOperationBinaryDual.c.j2 +115 -0
- nuitka/code_generation/templates_c/HelperOperationComparison.c.j2 +35 -35
- nuitka/code_generation/templates_c/HelperOperationComparisonBytes.c.j2 +37 -37
- nuitka/code_generation/templates_c/HelperOperationComparisonDual.c.j2 +86 -0
- nuitka/code_generation/templates_c/HelperOperationComparisonFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperOperationComparisonInt.c.j2 +18 -18
- nuitka/code_generation/templates_c/HelperOperationComparisonList.c.j2 +50 -38
- nuitka/code_generation/templates_c/HelperOperationComparisonLong.c.j2 +27 -27
- nuitka/code_generation/templates_c/HelperOperationComparisonStr.c.j2 +37 -37
- nuitka/code_generation/templates_c/HelperOperationComparisonTuple.c.j2 +31 -31
- nuitka/code_generation/templates_c/HelperOperationComparisonUnicode.c.j2 +35 -31
- nuitka/code_generation/templates_c/HelperOperationInplace.c.j2 +20 -20
- nuitka/code_generation/templates_c/HelperSlotsBinary.c.j2 +28 -28
- nuitka/code_generation/templates_c/HelperSlotsBytes.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsCommon.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsFloat.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsInt.c.j2 +48 -48
- nuitka/code_generation/templates_c/HelperSlotsList.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsLong.c.j2 +27 -25
- nuitka/code_generation/templates_c/HelperSlotsSet.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsStr.c.j2 +17 -17
- nuitka/code_generation/templates_c/HelperSlotsTuple.c.j2 +21 -18
- nuitka/code_generation/templates_c/HelperSlotsUnicode.c.j2 +17 -17
- nuitka/containers/Namedtuples.py +25 -18
- nuitka/containers/OrderedSets.py +105 -5
- nuitka/containers/OrderedSetsFallback.py +19 -17
- nuitka/containers/__init__.py +5 -4
- nuitka/distutils/Build.py +33 -18
- nuitka/distutils/DistutilCommands.py +84 -33
- nuitka/distutils/__init__.py +5 -4
- nuitka/finalizations/Finalization.py +21 -18
- nuitka/finalizations/FinalizeMarkups.py +31 -55
- nuitka/finalizations/__init__.py +5 -4
- nuitka/freezer/DependsExe.py +60 -30
- nuitka/freezer/DllDependenciesCommon.py +47 -20
- nuitka/freezer/DllDependenciesMacOS.py +165 -58
- nuitka/freezer/DllDependenciesPosix.py +29 -19
- nuitka/freezer/DllDependenciesWin32.py +55 -33
- nuitka/freezer/ImportDetection.py +23 -17
- nuitka/freezer/IncludedDataFiles.py +142 -48
- nuitka/freezer/IncludedEntryPoints.py +104 -39
- nuitka/freezer/Onefile.py +32 -22
- nuitka/freezer/Standalone.py +166 -53
- nuitka/freezer/__init__.py +5 -4
- nuitka/importing/IgnoreListing.py +19 -17
- nuitka/importing/ImportCache.py +24 -21
- nuitka/importing/ImportResolving.py +103 -95
- nuitka/importing/Importing.py +319 -98
- nuitka/importing/PreloadedPackages.py +21 -18
- nuitka/importing/Recursion.py +142 -47
- nuitka/importing/StandardLibrary.py +96 -80
- nuitka/importing/__init__.py +5 -4
- nuitka/nodes/AsyncgenNodes.py +22 -23
- nuitka/nodes/AttributeLookupNodes.py +19 -17
- nuitka/nodes/AttributeNodes.py +19 -17
- nuitka/nodes/AttributeNodesGenerated.py +49 -24
- nuitka/nodes/BuiltinAllNodes.py +19 -17
- nuitka/nodes/BuiltinAnyNodes.py +19 -17
- nuitka/nodes/BuiltinComplexNodes.py +20 -17
- nuitka/nodes/BuiltinDecodingNodes.py +19 -17
- nuitka/nodes/BuiltinDecoratorNodes.py +19 -17
- nuitka/nodes/BuiltinDictNodes.py +19 -17
- nuitka/nodes/BuiltinFormatNodes.py +20 -17
- nuitka/nodes/BuiltinHashNodes.py +19 -17
- nuitka/nodes/BuiltinInputNodes.py +19 -17
- nuitka/nodes/BuiltinIntegerNodes.py +19 -17
- nuitka/nodes/BuiltinIteratorNodes.py +25 -21
- nuitka/nodes/BuiltinLenNodes.py +19 -17
- nuitka/nodes/BuiltinNextNodes.py +19 -17
- nuitka/nodes/BuiltinOpenNodes.py +52 -18
- nuitka/nodes/BuiltinOperationNodeBasesGenerated.py +40 -23
- nuitka/nodes/BuiltinRangeNodes.py +21 -19
- nuitka/nodes/BuiltinRefNodes.py +73 -40
- nuitka/nodes/BuiltinSumNodes.py +20 -18
- nuitka/nodes/BuiltinTypeNodes.py +19 -17
- nuitka/nodes/BuiltinVarsNodes.py +19 -18
- nuitka/nodes/BytesNodes.py +19 -17
- nuitka/nodes/CallNodes.py +19 -17
- nuitka/nodes/Checkers.py +19 -17
- nuitka/nodes/ChildrenHavingMixins.py +1624 -283
- nuitka/nodes/ClassNodes.py +49 -29
- nuitka/nodes/CodeObjectSpecs.py +29 -18
- nuitka/nodes/ComparisonNodes.py +19 -17
- nuitka/nodes/ConditionalNodes.py +24 -25
- nuitka/nodes/ConstantRefNodes.py +57 -17
- nuitka/nodes/ContainerMakingNodes.py +19 -17
- nuitka/nodes/ContainerOperationNodes.py +19 -17
- nuitka/nodes/CoroutineNodes.py +22 -23
- nuitka/nodes/CtypesNodes.py +19 -18
- nuitka/nodes/DictionaryNodes.py +19 -18
- nuitka/nodes/ExceptionNodes.py +131 -43
- nuitka/nodes/ExecEvalNodes.py +19 -17
- nuitka/nodes/ExpressionBases.py +34 -26
- nuitka/nodes/ExpressionBasesGenerated.py +341 -35
- nuitka/nodes/ExpressionShapeMixins.py +19 -17
- nuitka/nodes/FrameNodes.py +41 -28
- nuitka/nodes/FunctionAttributeNodes.py +19 -17
- nuitka/nodes/FunctionNodes.py +84 -38
- nuitka/nodes/FutureSpecs.py +35 -20
- nuitka/nodes/GeneratorNodes.py +24 -25
- nuitka/nodes/GlobalsLocalsNodes.py +22 -17
- nuitka/nodes/HardImportNodesGenerated.py +746 -148
- nuitka/nodes/ImportHardNodes.py +46 -38
- nuitka/nodes/ImportNodes.py +438 -448
- nuitka/nodes/IndicatorMixins.py +19 -17
- nuitka/nodes/InjectCNodes.py +19 -18
- nuitka/nodes/IterationHandles.py +55 -34
- nuitka/nodes/KeyValuePairNodes.py +19 -17
- nuitka/nodes/ListOperationNodes.py +33 -21
- nuitka/nodes/LocalsDictNodes.py +19 -17
- nuitka/nodes/LocalsScopes.py +41 -41
- nuitka/nodes/LoopNodes.py +28 -17
- nuitka/nodes/MatchNodes.py +37 -24
- nuitka/nodes/ModuleAttributeNodes.py +18 -35
- nuitka/nodes/ModuleNodes.py +90 -31
- nuitka/nodes/NetworkxNodes.py +45 -0
- nuitka/nodes/NodeBases.py +73 -44
- nuitka/nodes/NodeMakingHelpers.py +92 -69
- nuitka/nodes/NodeMetaClasses.py +45 -28
- nuitka/nodes/OperatorNodes.py +28 -26
- nuitka/nodes/OperatorNodesUnary.py +148 -20
- nuitka/nodes/OsSysNodes.py +97 -18
- nuitka/nodes/OutlineNodes.py +24 -22
- nuitka/nodes/PackageMetadataNodes.py +37 -27
- nuitka/nodes/PackageResourceNodes.py +29 -23
- nuitka/nodes/PrintNodes.py +19 -17
- nuitka/nodes/ReturnNodes.py +20 -18
- nuitka/nodes/SideEffectNodes.py +19 -17
- nuitka/nodes/SliceNodes.py +20 -18
- nuitka/nodes/StatementBasesGenerated.py +125 -79
- nuitka/nodes/StatementNodes.py +27 -24
- nuitka/nodes/StrNodes.py +19 -17
- nuitka/nodes/StringConcatenationNodes.py +20 -17
- nuitka/nodes/SubscriptNodes.py +27 -25
- nuitka/nodes/TensorflowNodes.py +38 -0
- nuitka/nodes/TryNodes.py +19 -17
- nuitka/nodes/TypeMatchNodes.py +19 -17
- nuitka/nodes/TypeNodes.py +68 -18
- nuitka/nodes/VariableAssignNodes.py +122 -64
- nuitka/nodes/VariableDelNodes.py +19 -17
- nuitka/nodes/VariableNameNodes.py +19 -17
- nuitka/nodes/VariableRefNodes.py +63 -26
- nuitka/nodes/VariableReleaseNodes.py +19 -17
- nuitka/nodes/YieldNodes.py +21 -19
- nuitka/nodes/__init__.py +5 -4
- nuitka/nodes/shapes/BuiltinTypeShapes.py +169 -46
- nuitka/nodes/shapes/ControlFlowDescriptions.py +19 -17
- nuitka/nodes/shapes/ShapeMixins.py +57 -17
- nuitka/nodes/shapes/StandardShapes.py +80 -21
- nuitka/nodes/shapes/__init__.py +5 -4
- nuitka/optimizations/BytecodeDemotion.py +21 -18
- nuitka/optimizations/FunctionInlining.py +22 -23
- nuitka/optimizations/Graphs.py +19 -17
- nuitka/optimizations/Optimization.py +39 -35
- nuitka/optimizations/OptimizeBuiltinCalls.py +31 -27
- nuitka/optimizations/Tags.py +19 -18
- nuitka/optimizations/TraceCollections.py +67 -24
- nuitka/optimizations/ValueTraces.py +92 -25
- nuitka/optimizations/__init__.py +5 -4
- nuitka/pgo/PGO.py +33 -23
- nuitka/pgo/__init__.py +5 -4
- nuitka/plugins/PluginBase.py +655 -112
- nuitka/plugins/Plugins.py +247 -61
- nuitka/plugins/YamlPluginBase.py +121 -0
- nuitka/plugins/__init__.py +5 -4
- nuitka/plugins/standard/AntiBloatPlugin.py +374 -135
- nuitka/plugins/standard/ConsiderPyLintAnnotationsPlugin.py +20 -19
- nuitka/plugins/standard/DataFilesPlugin.py +65 -29
- nuitka/plugins/standard/DelvewheelPlugin.py +32 -24
- nuitka/plugins/standard/DillPlugin/DillPlugin.c +37 -0
- nuitka/plugins/standard/DillPlugin/dill-postLoad.py +256 -0
- nuitka/plugins/standard/DillPlugin.py +42 -134
- nuitka/plugins/standard/DllFilesPlugin.py +125 -42
- nuitka/plugins/standard/EnumPlugin.py +19 -17
- nuitka/plugins/standard/EventletPlugin.py +19 -17
- nuitka/plugins/standard/GeventPlugin.py +19 -17
- nuitka/plugins/standard/GiPlugin.py +44 -28
- nuitka/plugins/standard/GlfwPlugin.py +20 -17
- nuitka/plugins/standard/ImplicitImports.py +403 -54
- nuitka/plugins/standard/KivyPlugin.py +24 -20
- nuitka/plugins/standard/MatplotlibPlugin.py +99 -42
- nuitka/plugins/standard/MultiprocessingPlugin.py +35 -39
- nuitka/plugins/standard/NumpyPlugin.py +19 -17
- nuitka/plugins/standard/OptionsNannyPlugin.py +48 -76
- nuitka/plugins/standard/PbrPlugin.py +21 -19
- nuitka/plugins/standard/PkgResourcesPlugin.py +34 -23
- nuitka/plugins/standard/PlaywrightPlugin.py +184 -0
- nuitka/plugins/standard/PmwPlugin.py +30 -27
- nuitka/plugins/standard/PySidePyQtPlugin.py +82 -80
- nuitka/plugins/standard/PywebViewPlugin.py +19 -17
- nuitka/plugins/standard/SpacyPlugin.py +136 -0
- nuitka/plugins/standard/TensorflowPlugin.py +20 -17
- nuitka/plugins/standard/TkinterPlugin.py +102 -108
- nuitka/plugins/standard/TorchPlugin.py +20 -17
- nuitka/plugins/standard/TransformersPlugin.py +90 -231
- nuitka/plugins/standard/TrioPlugin.py +18 -15
- nuitka/plugins/standard/UpxPlugin.py +21 -19
- nuitka/plugins/standard/__init__.py +5 -4
- nuitka/plugins/standard/standard.nuitka-package.config.yml +3925 -1293
- nuitka/plugins/standard/stdlib2.nuitka-package.config.yml +14 -14
- nuitka/plugins/standard/stdlib3.nuitka-package.config.yml +154 -66
- nuitka/reports/CompilationReportReader.py +79 -0
- nuitka/reports/LicenseReport.rst.j2 +21 -21
- nuitka/reports/Reports.py +363 -76
- nuitka/reports/__init__.py +5 -4
- nuitka/specs/BuiltinBytesOperationSpecs.py +18 -17
- nuitka/specs/BuiltinDictOperationSpecs.py +18 -17
- nuitka/specs/BuiltinListOperationSpecs.py +18 -17
- nuitka/specs/BuiltinParameterSpecs.py +35 -21
- nuitka/specs/BuiltinStrOperationSpecs.py +19 -18
- nuitka/specs/BuiltinTypeOperationSpecs.py +18 -18
- nuitka/specs/BuiltinUnicodeOperationSpecs.py +18 -17
- nuitka/specs/HardImportSpecs.py +74 -22
- nuitka/specs/ParameterSpecs.py +60 -45
- nuitka/specs/__init__.py +5 -4
- nuitka/tools/Basics.py +20 -18
- nuitka/tools/__init__.py +5 -4
- nuitka/tools/commercial/__init__.py +7 -6
- nuitka/tools/data_composer/DataComposer.py +78 -62
- nuitka/tools/data_composer/__init__.py +5 -4
- nuitka/tools/data_composer/__main__.py +18 -17
- nuitka/tools/environments/CreateEnvironment.py +20 -17
- nuitka/tools/environments/Virtualenv.py +60 -32
- nuitka/tools/environments/__init__.py +5 -4
- nuitka/tools/general/__init__.py +5 -4
- nuitka/tools/general/dll_report/__init__.py +5 -4
- nuitka/tools/general/dll_report/__main__.py +29 -22
- nuitka/tools/general/find_module/FindModuleCode.py +35 -22
- nuitka/tools/general/find_module/__init__.py +5 -4
- nuitka/tools/onefile_compressor/OnefileCompressor.py +213 -131
- nuitka/tools/onefile_compressor/__init__.py +5 -4
- nuitka/tools/onefile_compressor/__main__.py +18 -17
- nuitka/tools/podman/Podman.py +19 -17
- nuitka/tools/podman/__init__.py +5 -4
- nuitka/tools/podman/__main__.py +35 -19
- nuitka/tools/profiler/__init__.py +5 -4
- nuitka/tools/profiler/__main__.py +18 -17
- nuitka/tools/scanning/DisplayPackageDLLs.py +47 -22
- nuitka/tools/scanning/DisplayPackageData.py +31 -19
- nuitka/tools/scanning/__init__.py +5 -4
- nuitka/tools/specialize/CTypeDescriptions.py +251 -80
- nuitka/tools/specialize/Common.py +18 -17
- nuitka/tools/specialize/SpecializeC.py +248 -82
- nuitka/tools/specialize/SpecializePython.py +108 -45
- nuitka/tools/specialize/__init__.py +5 -4
- nuitka/tools/testing/Common.py +175 -114
- nuitka/tools/testing/Constructs.py +19 -17
- nuitka/tools/testing/OutputComparison.py +54 -18
- nuitka/tools/testing/Pythons.py +19 -18
- nuitka/tools/testing/RuntimeTracing.py +20 -19
- nuitka/tools/testing/SearchModes.py +26 -20
- nuitka/tools/testing/Valgrind.py +19 -17
- nuitka/tools/testing/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__init__.py +5 -4
- nuitka/tools/testing/check_reference_counts/__main__.py +18 -18
- nuitka/tools/testing/compare_with_cpython/__init__.py +5 -4
- nuitka/tools/testing/compare_with_cpython/__main__.py +39 -30
- nuitka/tools/testing/find_sxs_modules/__init__.py +5 -4
- nuitka/tools/testing/find_sxs_modules/__main__.py +17 -17
- nuitka/tools/testing/measure_construct_performance/__init__.py +5 -4
- nuitka/tools/testing/measure_construct_performance/__main__.py +23 -33
- nuitka/tools/testing/run_nuitka_tests/__init__.py +5 -4
- nuitka/tools/testing/run_nuitka_tests/__main__.py +134 -51
- nuitka/tools/watch/AutoStage.py +145 -0
- nuitka/tools/watch/GitHub.py +113 -0
- nuitka/tools/watch/__init__.py +5 -4
- nuitka/tools/watch/__main__.py +322 -91
- nuitka/tree/Building.py +184 -182
- nuitka/tree/ComplexCallHelperFunctions.py +84 -58
- nuitka/tree/Extractions.py +19 -17
- nuitka/tree/InternalModule.py +29 -20
- nuitka/tree/Operations.py +19 -17
- nuitka/tree/ReformulationAssertStatements.py +51 -31
- nuitka/tree/ReformulationAssignmentStatements.py +96 -91
- nuitka/tree/ReformulationBooleanExpressions.py +19 -17
- nuitka/tree/ReformulationCallExpressions.py +20 -18
- nuitka/tree/ReformulationClasses.py +45 -39
- nuitka/tree/ReformulationClasses3.py +239 -116
- nuitka/tree/ReformulationComparisonExpressions.py +29 -35
- nuitka/tree/ReformulationContractionExpressions.py +58 -55
- nuitka/tree/ReformulationDictionaryCreation.py +41 -35
- nuitka/tree/ReformulationExecStatements.py +42 -39
- nuitka/tree/ReformulationForLoopStatements.py +30 -34
- nuitka/tree/ReformulationFunctionStatements.py +59 -55
- nuitka/tree/ReformulationImportStatements.py +34 -29
- nuitka/tree/ReformulationLambdaExpressions.py +23 -24
- nuitka/tree/ReformulationMatchStatements.py +246 -92
- nuitka/tree/ReformulationMultidist.py +22 -18
- nuitka/tree/ReformulationNamespacePackages.py +55 -46
- nuitka/tree/ReformulationPrintStatements.py +23 -24
- nuitka/tree/ReformulationSequenceCreation.py +50 -49
- nuitka/tree/ReformulationSubscriptExpressions.py +19 -17
- nuitka/tree/ReformulationTryExceptStatements.py +19 -17
- nuitka/tree/ReformulationTryFinallyStatements.py +34 -17
- nuitka/tree/ReformulationWhileLoopStatements.py +19 -17
- nuitka/tree/ReformulationWithStatements.py +39 -41
- nuitka/tree/ReformulationYieldExpressions.py +44 -24
- nuitka/tree/SourceHandling.py +76 -31
- nuitka/tree/SyntaxErrors.py +19 -17
- nuitka/tree/TreeHelpers.py +33 -20
- nuitka/tree/VariableClosure.py +35 -39
- nuitka/tree/__init__.py +5 -4
- nuitka/utils/AppDirs.py +41 -20
- nuitka/utils/CStrings.py +66 -21
- nuitka/utils/CommandLineOptions.py +111 -22
- nuitka/utils/Distributions.py +445 -54
- nuitka/utils/Download.py +89 -57
- nuitka/utils/Execution.py +102 -58
- nuitka/utils/FileOperations.py +357 -128
- nuitka/utils/Hashing.py +55 -33
- nuitka/utils/Images.py +26 -19
- nuitka/utils/Importing.py +119 -37
- nuitka/utils/InlineCopies.py +52 -0
- nuitka/utils/InstalledPythons.py +85 -75
- nuitka/utils/InstanceCounters.py +20 -17
- nuitka/utils/Jinja2.py +30 -22
- nuitka/utils/Json.py +21 -19
- nuitka/utils/MacOSApp.py +26 -18
- nuitka/utils/MemoryUsage.py +20 -18
- nuitka/utils/ModuleNames.py +42 -26
- nuitka/utils/PackageResources.py +44 -0
- nuitka/utils/ReExecute.py +50 -28
- nuitka/utils/Rest.py +20 -17
- nuitka/utils/SharedLibraries.py +161 -75
- nuitka/utils/Shebang.py +20 -17
- nuitka/utils/Signing.py +63 -18
- nuitka/utils/SlotMetaClasses.py +57 -0
- nuitka/utils/StaticLibraries.py +83 -56
- nuitka/utils/ThreadedExecutor.py +18 -17
- nuitka/utils/Timing.py +22 -20
- nuitka/utils/Utils.py +132 -25
- nuitka/utils/WindowsFileUsage.py +22 -20
- nuitka/utils/WindowsResources.py +25 -18
- nuitka/utils/Yaml.py +62 -24
- nuitka/utils/__init__.py +5 -4
- Nuitka_winsvc-1.8.dist-info/RECORD +0 -905
- nuitka/build/inline_copy/tqdm/tqdm/_tqdm_gui.py +0 -9
- nuitka/build/inline_copy/tqdm/tqdm/gui.py +0 -191
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/LICENSE.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/entry_points.txt +0 -0
- {Nuitka_winsvc-1.8.dist-info → Nuitka_winsvc-2.5.1.dist-info}/top_level.txt +0 -0
nuitka/utils/Distributions.py
CHANGED
|
@@ -1,74 +1,203 @@
|
|
|
1
|
-
# Copyright
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
# integrates with CPython, but also works on its own.
|
|
5
|
-
#
|
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
-
# you may not use this file except in compliance with the License.
|
|
8
|
-
# You may obtain a copy of the License at
|
|
9
|
-
#
|
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
-
#
|
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
1
|
+
# Copyright 2024, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
|
|
2
|
+
|
|
3
|
+
|
|
18
4
|
""" Tools for accessing distributions and resolving package names for them. """
|
|
19
5
|
|
|
6
|
+
import os
|
|
7
|
+
|
|
8
|
+
from nuitka.__past__ import ( # pylint: disable=redefined-builtin
|
|
9
|
+
FileNotFoundError,
|
|
10
|
+
unicode,
|
|
11
|
+
)
|
|
12
|
+
from nuitka.containers.Namedtuples import makeNamedtupleClass
|
|
20
13
|
from nuitka.containers.OrderedSets import OrderedSet
|
|
21
|
-
from nuitka.
|
|
14
|
+
from nuitka.Options import isExperimental
|
|
15
|
+
from nuitka.PythonFlavors import (
|
|
16
|
+
isAnacondaPython,
|
|
17
|
+
isMSYS2MingwPython,
|
|
18
|
+
isPosixWindows,
|
|
19
|
+
)
|
|
22
20
|
from nuitka.PythonVersions import python_version
|
|
21
|
+
from nuitka.Tracing import metadata_logger
|
|
23
22
|
|
|
23
|
+
from .FileOperations import searchPrefixPath
|
|
24
|
+
from .Importing import getModuleNameAndKindFromFilenameSuffix
|
|
24
25
|
from .ModuleNames import ModuleName, checkModuleName
|
|
26
|
+
from .Utils import isMacOS, isWin32Windows
|
|
25
27
|
|
|
26
28
|
_package_to_distribution = None
|
|
27
29
|
|
|
28
30
|
|
|
31
|
+
def getDistributionFiles(distribution):
|
|
32
|
+
try:
|
|
33
|
+
hasattr_files = hasattr(distribution, "files")
|
|
34
|
+
except OSError:
|
|
35
|
+
metadata_logger.warning(
|
|
36
|
+
"""\
|
|
37
|
+
Error, failure to access '.files()' of distribution '%s', path '%s', this \
|
|
38
|
+
is typically caused by corruption of its installation."""
|
|
39
|
+
% (distribution, _getDistributionPath(distribution))
|
|
40
|
+
)
|
|
41
|
+
hasattr_files = False
|
|
42
|
+
|
|
43
|
+
if hasattr_files:
|
|
44
|
+
for filename in distribution.files or ():
|
|
45
|
+
filename = filename.as_posix()
|
|
46
|
+
|
|
47
|
+
yield filename
|
|
48
|
+
else:
|
|
49
|
+
record_data = _getDistributionMetadataFileContents(distribution, "RECORD")
|
|
50
|
+
|
|
51
|
+
if record_data is not None:
|
|
52
|
+
for line in record_data.splitlines():
|
|
53
|
+
filename = line.split(",", 1)[0]
|
|
54
|
+
|
|
55
|
+
yield filename
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _getDistributionMetadataFileContents(distribution, filename):
|
|
59
|
+
try:
|
|
60
|
+
if hasattr(distribution, "read_text"):
|
|
61
|
+
result = distribution.read_text(filename)
|
|
62
|
+
else:
|
|
63
|
+
result = "\n".join(distribution.get_metadata_lines(filename))
|
|
64
|
+
|
|
65
|
+
return result
|
|
66
|
+
except (FileNotFoundError, KeyError):
|
|
67
|
+
return None
|
|
68
|
+
except OSError:
|
|
69
|
+
metadata_logger.warning(
|
|
70
|
+
"""\
|
|
71
|
+
Error, failure to access '%s' of distribution '%s', path '%s', this \
|
|
72
|
+
is typically caused by corruption of its installation."""
|
|
73
|
+
% (filename, distribution, _getDistributionPath(distribution))
|
|
74
|
+
)
|
|
75
|
+
return None
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _getDistributionInstallerFileContents(distribution):
|
|
79
|
+
installer_name = _getDistributionMetadataFileContents(distribution, "INSTALLER")
|
|
80
|
+
|
|
81
|
+
if installer_name:
|
|
82
|
+
installer_name = installer_name.strip().lower()
|
|
83
|
+
|
|
84
|
+
return installer_name
|
|
85
|
+
|
|
86
|
+
|
|
29
87
|
def getDistributionTopLevelPackageNames(distribution):
|
|
30
88
|
"""Returns the top level package names for a distribution."""
|
|
31
|
-
top_level_txt = distribution
|
|
89
|
+
top_level_txt = _getDistributionMetadataFileContents(distribution, "top_level.txt")
|
|
32
90
|
|
|
33
|
-
if top_level_txt:
|
|
34
|
-
result = top_level_txt.
|
|
35
|
-
result = [dirname.replace("/", ".") for dirname in result]
|
|
91
|
+
if top_level_txt is not None:
|
|
92
|
+
result = [dirname.replace("/", ".") for dirname in top_level_txt.splitlines()]
|
|
36
93
|
else:
|
|
94
|
+
# If the file is not present, fall back to scanning all files in the
|
|
95
|
+
# distribution.
|
|
37
96
|
result = OrderedSet()
|
|
38
97
|
|
|
39
|
-
for filename in distribution
|
|
40
|
-
filename = filename.as_posix()
|
|
41
|
-
|
|
42
|
-
if not filename.endswith(".py"):
|
|
43
|
-
continue
|
|
44
|
-
|
|
98
|
+
for filename in getDistributionFiles(distribution):
|
|
45
99
|
if filename.startswith("."):
|
|
46
100
|
continue
|
|
47
101
|
|
|
48
|
-
|
|
102
|
+
first_path_element, _, remainder = filename.partition("/")
|
|
49
103
|
|
|
50
|
-
|
|
104
|
+
if first_path_element.endswith("dist-info"):
|
|
105
|
+
continue
|
|
106
|
+
if first_path_element == "__pycache__":
|
|
107
|
+
continue
|
|
108
|
+
if not checkModuleName(first_path_element) or first_path_element == ".":
|
|
109
|
+
continue
|
|
110
|
+
|
|
111
|
+
if remainder:
|
|
112
|
+
module_name = ModuleName(first_path_element)
|
|
113
|
+
else:
|
|
114
|
+
module_name, _kind = getModuleNameAndKindFromFilenameSuffix(
|
|
115
|
+
first_path_element
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
# Ignore top level files that are not modules.
|
|
119
|
+
if module_name is None:
|
|
120
|
+
continue
|
|
121
|
+
|
|
122
|
+
result.add(module_name)
|
|
123
|
+
|
|
124
|
+
result = OrderedSet(
|
|
125
|
+
package_name.asString()
|
|
126
|
+
for package_name in result
|
|
127
|
+
if not any(
|
|
128
|
+
package_name.isBelowNamespace(other_package_name)
|
|
129
|
+
for other_package_name in result
|
|
130
|
+
)
|
|
131
|
+
)
|
|
51
132
|
|
|
52
133
|
if not result:
|
|
53
|
-
result = (distribution
|
|
134
|
+
result = (getDistributionName(distribution),)
|
|
54
135
|
|
|
55
136
|
return tuple(result)
|
|
56
137
|
|
|
57
138
|
|
|
139
|
+
def _get_pkg_resources_module():
|
|
140
|
+
# pip and vendored pkg_resources are optional of course, but of course very
|
|
141
|
+
# omnipresent generally, so we don't handle failure here.
|
|
142
|
+
|
|
143
|
+
# pylint: disable=I0021,no-name-in-module
|
|
144
|
+
from pip._vendor import pkg_resources
|
|
145
|
+
|
|
146
|
+
return pkg_resources
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def _get_pkg_resource_distributions():
|
|
150
|
+
"""Small replacement of distributions() of importlib.metadata that uses pkg_resources"""
|
|
151
|
+
|
|
152
|
+
# Prepare "site" for the "pip" module to find what it wants.
|
|
153
|
+
import site
|
|
154
|
+
|
|
155
|
+
if _user_site_directory is not None:
|
|
156
|
+
site.USER_SITE = _user_site_directory
|
|
157
|
+
|
|
158
|
+
pkg_resources = _get_pkg_resources_module()
|
|
159
|
+
|
|
160
|
+
return lambda: pkg_resources.working_set
|
|
161
|
+
|
|
162
|
+
|
|
58
163
|
def _initPackageToDistributionName():
|
|
59
164
|
try:
|
|
165
|
+
if isExperimental("force-pkg-resources-metadata"):
|
|
166
|
+
raise ImportError
|
|
167
|
+
|
|
60
168
|
try:
|
|
61
169
|
from importlib.metadata import distributions
|
|
62
170
|
except ImportError:
|
|
63
171
|
from importlib_metadata import distributions
|
|
64
|
-
except ImportError:
|
|
65
|
-
return {}
|
|
66
172
|
|
|
67
|
-
|
|
173
|
+
except (ImportError, SyntaxError, RuntimeError):
|
|
174
|
+
try:
|
|
175
|
+
distributions = _get_pkg_resource_distributions()
|
|
176
|
+
except ImportError:
|
|
177
|
+
# No pip installed, not very many distributions in that case.
|
|
178
|
+
distributions = lambda: ()
|
|
68
179
|
|
|
180
|
+
# Cyclic dependency
|
|
69
181
|
result = {}
|
|
70
182
|
|
|
71
183
|
for distribution in distributions():
|
|
184
|
+
distribution_name = getDistributionName(distribution)
|
|
185
|
+
|
|
186
|
+
if distribution_name is None:
|
|
187
|
+
metadata_logger.warning(
|
|
188
|
+
"""\
|
|
189
|
+
Error, failure to detect name of distribution '%s', path '%s', this \
|
|
190
|
+
is typically caused by corruption of its installation."""
|
|
191
|
+
% (distribution, _getDistributionPath(distribution))
|
|
192
|
+
)
|
|
193
|
+
continue
|
|
194
|
+
|
|
195
|
+
assert isValidDistributionName(distribution_name), (
|
|
196
|
+
distribution,
|
|
197
|
+
distribution_name,
|
|
198
|
+
_getDistributionPath(distribution),
|
|
199
|
+
)
|
|
200
|
+
|
|
72
201
|
for package_name in getDistributionTopLevelPackageNames(distribution):
|
|
73
202
|
# Protect against buggy packages.
|
|
74
203
|
if not checkModuleName(package_name):
|
|
@@ -79,13 +208,23 @@ def _initPackageToDistributionName():
|
|
|
79
208
|
if package_name not in result:
|
|
80
209
|
result[package_name] = set()
|
|
81
210
|
|
|
211
|
+
# Skip duplicates, e.g. user package vs. site package installation.
|
|
212
|
+
if any(
|
|
213
|
+
distribution_name == getDistributionName(dist)
|
|
214
|
+
for dist in result[package_name]
|
|
215
|
+
):
|
|
216
|
+
continue
|
|
217
|
+
|
|
82
218
|
result[package_name].add(distribution)
|
|
83
219
|
|
|
84
220
|
return result
|
|
85
221
|
|
|
86
222
|
|
|
87
223
|
def getDistributionsFromModuleName(module_name):
|
|
88
|
-
"""Get the distribution
|
|
224
|
+
"""Get the distribution names associated with a module name.
|
|
225
|
+
|
|
226
|
+
This can be more than one in case of namespace modules.
|
|
227
|
+
"""
|
|
89
228
|
|
|
90
229
|
# Cached result, pylint: disable=global-statement
|
|
91
230
|
|
|
@@ -93,54 +232,306 @@ def getDistributionsFromModuleName(module_name):
|
|
|
93
232
|
if _package_to_distribution is None:
|
|
94
233
|
_package_to_distribution = _initPackageToDistributionName()
|
|
95
234
|
|
|
235
|
+
module_name = ModuleName(module_name)
|
|
236
|
+
# Go upwards until we find something, such that contained module names are
|
|
237
|
+
# usable too.
|
|
238
|
+
while (
|
|
239
|
+
module_name not in _package_to_distribution
|
|
240
|
+
and module_name.getPackageName() is not None
|
|
241
|
+
):
|
|
242
|
+
module_name = module_name.getPackageName()
|
|
243
|
+
|
|
96
244
|
return tuple(
|
|
97
245
|
sorted(
|
|
98
246
|
_package_to_distribution.get(module_name, ()),
|
|
99
|
-
key=
|
|
247
|
+
key=getDistributionName,
|
|
100
248
|
)
|
|
101
249
|
)
|
|
102
250
|
|
|
103
251
|
|
|
252
|
+
def getDistributionFromModuleName(module_name):
|
|
253
|
+
"""Get the distribution name associated with a module name."""
|
|
254
|
+
distributions = getDistributionsFromModuleName(module_name)
|
|
255
|
+
|
|
256
|
+
if not distributions:
|
|
257
|
+
return None
|
|
258
|
+
elif len(distributions) == 1:
|
|
259
|
+
return distributions[0]
|
|
260
|
+
else:
|
|
261
|
+
return min(distributions, key=lambda dist: len(getDistributionName(dist)))
|
|
262
|
+
|
|
263
|
+
|
|
104
264
|
def getDistribution(distribution_name):
|
|
105
265
|
"""Get a distribution by name."""
|
|
266
|
+
assert isValidDistributionName(distribution_name), distribution_name
|
|
267
|
+
|
|
106
268
|
try:
|
|
269
|
+
if isExperimental("force-pkg-resources-metadata"):
|
|
270
|
+
raise ImportError
|
|
271
|
+
|
|
107
272
|
if python_version >= 0x380:
|
|
108
273
|
from importlib import metadata
|
|
109
274
|
else:
|
|
110
275
|
import importlib_metadata as metadata
|
|
111
276
|
except ImportError:
|
|
112
|
-
|
|
277
|
+
from pip._vendor.pkg_resources import (
|
|
278
|
+
DistributionNotFound,
|
|
279
|
+
get_distribution,
|
|
280
|
+
)
|
|
113
281
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
282
|
+
try:
|
|
283
|
+
return get_distribution(distribution_name)
|
|
284
|
+
except DistributionNotFound:
|
|
285
|
+
return None
|
|
286
|
+
else:
|
|
287
|
+
try:
|
|
288
|
+
return metadata.distribution(distribution_name)
|
|
289
|
+
except metadata.PackageNotFoundError:
|
|
290
|
+
return None
|
|
120
291
|
|
|
121
|
-
if len(dists) == 1:
|
|
122
|
-
return dists[0]
|
|
123
292
|
|
|
124
|
-
|
|
293
|
+
_distribution_to_installer = {}
|
|
125
294
|
|
|
126
295
|
|
|
127
|
-
|
|
296
|
+
def isDistributionCondaPackage(distribution_name):
|
|
297
|
+
if not isAnacondaPython():
|
|
298
|
+
return False
|
|
128
299
|
|
|
300
|
+
return getDistributionInstallerName(distribution_name) == "conda"
|
|
129
301
|
|
|
130
|
-
|
|
302
|
+
|
|
303
|
+
def isDistributionMsys2Package(distribution_name):
|
|
131
304
|
if not isAnacondaPython():
|
|
132
305
|
return False
|
|
133
306
|
|
|
134
|
-
|
|
307
|
+
return getDistributionInstallerName(distribution_name).startswith("MSYS2")
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
def isDistributionPipPackage(distribution_name):
|
|
311
|
+
return getDistributionInstallerName(distribution_name) == "pip"
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def isDistributionPoetryPackage(distribution_name):
|
|
315
|
+
return getDistributionInstallerName(distribution_name).startswith("poetry")
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
def isDistributionSystemPackage(distribution_name):
|
|
319
|
+
return (
|
|
320
|
+
not isMacOS()
|
|
321
|
+
and not isWin32Windows()
|
|
322
|
+
and not isDistributionPipPackage(distribution_name)
|
|
323
|
+
and not isDistributionPoetryPackage(distribution_name)
|
|
324
|
+
and not isDistributionCondaPackage(distribution_name)
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
_pdm_dir_cache = {}
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
def _getDistributionPath(distribution):
|
|
332
|
+
return getattr(distribution, "_path", None)
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
def isPdmPackageInstallation(distribution):
|
|
336
|
+
distribution_path = _getDistributionPath(distribution)
|
|
337
|
+
if distribution_path is None:
|
|
338
|
+
return False
|
|
339
|
+
|
|
340
|
+
site_packages_path = searchPrefixPath(str(distribution_path), "site-packages")
|
|
341
|
+
if site_packages_path is None:
|
|
342
|
+
return False
|
|
343
|
+
|
|
344
|
+
# spell-checker: ignore pyvenv
|
|
345
|
+
candidate = os.path.join(site_packages_path, "..", "..", "pyvenv.cfg")
|
|
346
|
+
|
|
347
|
+
result = _pdm_dir_cache.get(candidate)
|
|
348
|
+
if result is None:
|
|
349
|
+
_pdm_dir_cache[candidate] = os.path.exists(candidate)
|
|
350
|
+
|
|
351
|
+
return _pdm_dir_cache[candidate]
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
def getDistributionInstallerName(distribution_name):
|
|
355
|
+
"""Get the installer name from a distribution object.
|
|
356
|
+
|
|
357
|
+
We might care of pip, anaconda, Debian, or whatever installed a
|
|
358
|
+
package.
|
|
359
|
+
"""
|
|
360
|
+
|
|
361
|
+
# many cases due to fallback variants, pylint: disable=too-many-branches
|
|
362
|
+
|
|
363
|
+
if distribution_name not in _distribution_to_installer:
|
|
135
364
|
distribution = getDistribution(distribution_name)
|
|
136
365
|
|
|
137
366
|
if distribution is None:
|
|
138
|
-
|
|
367
|
+
if distribution_name == "Pip":
|
|
368
|
+
_distribution_to_installer[distribution_name] = "default"
|
|
369
|
+
else:
|
|
370
|
+
_distribution_to_installer[distribution_name] = "not_found"
|
|
139
371
|
else:
|
|
140
|
-
|
|
372
|
+
installer_name = _getDistributionInstallerFileContents(distribution)
|
|
373
|
+
|
|
374
|
+
if installer_name:
|
|
375
|
+
_distribution_to_installer[distribution_name] = installer_name
|
|
376
|
+
elif isAnacondaPython():
|
|
377
|
+
_distribution_to_installer[distribution_name] = "conda"
|
|
378
|
+
elif isPdmPackageInstallation(distribution):
|
|
379
|
+
_distribution_to_installer[distribution_name] = "pip"
|
|
380
|
+
elif isMSYS2MingwPython():
|
|
381
|
+
_distribution_to_installer[distribution_name] = "MSYS2 MinGW"
|
|
382
|
+
elif isPosixWindows():
|
|
383
|
+
_distribution_to_installer[distribution_name] = "MSYS2 Posix"
|
|
384
|
+
else:
|
|
385
|
+
distribution_path = _getDistributionPath(distribution)
|
|
386
|
+
if distribution_path is not None:
|
|
387
|
+
distribution_path_parts = str(distribution_path).split("/")
|
|
388
|
+
|
|
389
|
+
if (
|
|
390
|
+
"dist-packages" in distribution_path_parts
|
|
391
|
+
and "local" not in distribution_path_parts
|
|
392
|
+
):
|
|
393
|
+
_distribution_to_installer[distribution_name] = "Debian"
|
|
394
|
+
else:
|
|
395
|
+
_distribution_to_installer[distribution_name] = "Unknown"
|
|
396
|
+
else:
|
|
397
|
+
_distribution_to_installer[distribution_name] = "Unknown"
|
|
398
|
+
|
|
399
|
+
return _distribution_to_installer[distribution_name]
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
def isValidDistributionName(distribution_name):
|
|
403
|
+
return type(distribution_name) in (str, unicode)
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
def getDistributionName(distribution):
|
|
407
|
+
"""Get the distribution name from a distribution object.
|
|
408
|
+
|
|
409
|
+
We use importlib.metadata and pkg_resources version tuples interchangeable
|
|
410
|
+
and this is to abstract the difference is how to look up the name from
|
|
411
|
+
one.
|
|
412
|
+
"""
|
|
413
|
+
|
|
414
|
+
if hasattr(distribution, "metadata"):
|
|
415
|
+
result = distribution.metadata["Name"]
|
|
416
|
+
|
|
417
|
+
if result is None:
|
|
418
|
+
installer_name = _getDistributionInstallerFileContents(distribution)
|
|
419
|
+
|
|
420
|
+
if installer_name == "debian":
|
|
421
|
+
distribution_path = _getDistributionPath(distribution)
|
|
422
|
+
|
|
423
|
+
if distribution_path is not None:
|
|
424
|
+
dir_name = os.path.basename(distribution_path)
|
|
425
|
+
|
|
426
|
+
if dir_name.endswith(".dist-info"):
|
|
427
|
+
dir_name = dir_name[:-10]
|
|
428
|
+
|
|
429
|
+
result = dir_name.rsplit("-", 1)[0]
|
|
430
|
+
else:
|
|
431
|
+
result = distribution.project_name
|
|
432
|
+
|
|
433
|
+
return result
|
|
141
434
|
|
|
142
|
-
|
|
143
|
-
|
|
435
|
+
|
|
436
|
+
def getDistributionVersion(distribution):
|
|
437
|
+
"""Get the distribution version string from a distribution object.
|
|
438
|
+
|
|
439
|
+
We use importlib.metadata and pkg_resources version tuples interchangeable
|
|
440
|
+
and this is to abstract the difference is how to look up the version from
|
|
441
|
+
one.
|
|
442
|
+
"""
|
|
443
|
+
# Avoiding use of public interface for pkg_resources, pylint: disable=protected-access
|
|
444
|
+
if hasattr(distribution, "metadata"):
|
|
445
|
+
return distribution.metadata["Version"]
|
|
446
|
+
else:
|
|
447
|
+
return distribution._version
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
def getDistributionLicense(distribution):
|
|
451
|
+
"""Get the distribution license from a distribution object."""
|
|
452
|
+
|
|
453
|
+
license_name = distribution.metadata["License"]
|
|
454
|
+
|
|
455
|
+
if not license_name or license_name == "UNKNOWN":
|
|
456
|
+
for classifier in (
|
|
457
|
+
value
|
|
458
|
+
for (key, value) in distribution.metadata.items()
|
|
459
|
+
if "Classifier" in key
|
|
460
|
+
):
|
|
461
|
+
parts = [part.strip() for part in classifier.split("::")]
|
|
462
|
+
if not parts:
|
|
463
|
+
continue
|
|
464
|
+
|
|
465
|
+
if parts[0] == "License":
|
|
466
|
+
license_name = parts[-1]
|
|
467
|
+
break
|
|
468
|
+
|
|
469
|
+
return license_name
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
def _getEntryPointGroup(group_name):
|
|
473
|
+
try:
|
|
474
|
+
if isExperimental("force-pkg-resources-metadata"):
|
|
475
|
+
raise ImportError
|
|
476
|
+
|
|
477
|
+
try:
|
|
478
|
+
from importlib.metadata import entry_points
|
|
479
|
+
except ImportError:
|
|
480
|
+
from importlib_metadata import entry_points
|
|
481
|
+
|
|
482
|
+
except (ImportError, SyntaxError, RuntimeError):
|
|
483
|
+
pkg_resources = _get_pkg_resources_module()
|
|
484
|
+
|
|
485
|
+
entry_points = pkg_resources.entry_points
|
|
486
|
+
|
|
487
|
+
return entry_points(group=group_name)
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
EntryPointDescription = makeNamedtupleClass(
|
|
491
|
+
"EntryPointDescription",
|
|
492
|
+
(
|
|
493
|
+
"distribution_name",
|
|
494
|
+
"distribution",
|
|
495
|
+
"module_name",
|
|
496
|
+
),
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
def getEntryPointGroup(group_name):
|
|
501
|
+
result = OrderedSet()
|
|
502
|
+
|
|
503
|
+
for entry_point in _getEntryPointGroup(group_name):
|
|
504
|
+
result.add(
|
|
505
|
+
EntryPointDescription(
|
|
506
|
+
distribution_name=getDistributionName(entry_point.dist),
|
|
507
|
+
distribution=entry_point.dist,
|
|
508
|
+
module_name=ModuleName(entry_point.module),
|
|
144
509
|
)
|
|
510
|
+
)
|
|
511
|
+
|
|
512
|
+
return result
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
# User site directory if any
|
|
516
|
+
_user_site_directory = None
|
|
145
517
|
|
|
146
|
-
|
|
518
|
+
|
|
519
|
+
def setUserSiteDirectory(user_site_directory):
|
|
520
|
+
global _user_site_directory # singleton, pylint: disable=global-statement
|
|
521
|
+
_user_site_directory = user_site_directory
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
# Part of "Nuitka", an optimizing Python compiler that is compatible and
|
|
525
|
+
# integrates with CPython, but also works on its own.
|
|
526
|
+
#
|
|
527
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
528
|
+
# you may not use this file except in compliance with the License.
|
|
529
|
+
# You may obtain a copy of the License at
|
|
530
|
+
#
|
|
531
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
532
|
+
#
|
|
533
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
534
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
535
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
536
|
+
# See the License for the specific language governing permissions and
|
|
537
|
+
# limitations under the License.
|