- Ignore
PermissionErrorwhen searchingPATHfor DLLs if the user has insufficient permissions to view a path entry. - Introduce
replace-neededsubcommand.
- Support the
abi3ttag defined in PEP 803. - Improve the Limitations section of the README.
- Improve support for
abi3wheels targeting the very old Python 3.3 and 3.4. - Add
combase.dllto DLL exclusion list. - Update GitHub Actions.
- Exclude DLLs needed for GraalPy runtime when repairing GraalPy wheels.
- Warn if requested verbosity level exceeds the maximum supported level.
- Warn if wheel signature is removed.
- Remove DLLs with no exports from the list of Windows system DLLs.
- Make
delvewheellowercase in output. - Support
*wildcard with--no-mangleand--exclude. - Update GitHub Actions.
- Update GitHub Actions dependencies.
- Add note to README about licensing implications for vendored DLLs.
- Add Python 3.14 trove classifier.
- Improve the MSVC++ redistributable version compatibility check.
- Modernize the
pyproject.tomlspecifications for building the project. - Improve file hashing performance when
delvewheelis run using Python 3.11+. This speeds up DLL name-mangling and writing theRECORDmetadata file. - Create
requirements.txtandrequirements-dev.txtto facilitate the development process.
- Miscellaneous README improvements.
- Fix
UnicodeDecodeErrorwhen patching.pyfiles containing Unicode characters. - Don't strip off ending newline when inserting
.pypatch after docstring.
- Introduce the
--analyze-existing-exesoption. - Revise the hashing algorithm for name mangling to permit limited DLL sharing between wheels. DLLs should be safe to share between projects if they are bitwise identical prior to name-mangling and all their direct dependencies that will be name-mangled are also bitwise identical. Change the hashing algorithm to derive the hash from the DLL contents and the hashes of all its direct dependencies which will be name-mangled. This reduces memory usage by allowing only one copy of a DLL to be loaded into a
python.exeprocess when it is safe to do so.
- Update GitHub Actions CI pipeline dependencies.
- Improve documentation.
- Fix a log message that incorrectly labeled existing DLLs as extension modules when
--analyze-existing -vwas used. - Bump the minimum supported Python version to 3.9 for running
delvewheelitself. Wheels with a target Python version under 3.9 can still be repaired. - Clip
SOURCE_DATE_EPOCHwhen it is out of the ZIP timestamp range instead of raising an exception.
- Introduce the
--with-mangleoption.
- Use https://github.com/pypa/gh-action-pypi-publish to deploy to PyPI.
- If the wheel is signed, then unsign it when repairing instead of leaving it with an invalid signature.
- Place
.dist-infoat the end of the archive as recommended by PEP 427. - Support the
*wildcard in the wheel filename.
- Introduce the
--custom-patchoption.
- Detect the correct ABI tag (
cp313td) for the debug free-threaded build of Python. - Bump the minimum supported Python version to 3.8 for running
delvewheelitself. Wheels with a target Python version under 3.8 can still be repaired. - Improve documentation for the
-Loption.
- Define the types for all
ctypesfunction calls. This ensures that no information is lost from implicit downcasts. - Fix overzealous warnings if the vendored Microsoft Visual C++ runtime is too old. Now, the warning is issued only if the vendored Microsoft Visual C++ runtime comes from an older platform toolset than that which the application was built against.
- To improve performance during name mangling, fix the PE checksum only if the checksum existed previously.
- Require
pefile>= 2024.8.26 and make the changes necessary to work with this version ofpefile.
- Improve performance when the
.load-orderfile is used for Python <= 3.7 or Conda Python <= 3.9. - Warn if the vendored Microsoft Visual C++ runtime DLLs are too old. These DLLs do not provide forward compatibility, and compatibility issues may result if the vendored Microsoft Visual C++ runtime DLLs are older than those that the application was built against.
- Rename
--add-dllto--include.--add-dllwill continue to be supported as an alias. - Rename
--no-dllto--exclude.--no-dllwill continue to be supported as an alias. - Allow
--add-path,--include,--exclude, and--no-mangleto be specified multiple times. When specified multiple times, values are combined.
- Fix
OSError: Error loading *.dll; The operation completed successfully.Previously, this error occurred intermittently when importing packages for Python <= 3.7 or Conda Python <= 3.9.
- Don't vendor the free-threaded Python DLL, e.g.
python313t.dll. - Restore mangling of Visual C++ runtime redistributable DLLs. The problem this was meant to solve has been found to have a different cause. Plus, it has been discovered that mangling these DLLs does have a benefit. These DLLs do not provide forward compatibility, and lack of name mangling can cause compatibility issues if a Python module ends up using an older version of a Visual C++ runtime redistributable DLL than the version it was built against.
- Clear the
/DEPENDENTLOADFLAGvalue for any.pydor vendored DLLs (except those added with--add-dll). This ensures that the default DLL search path for Python extension modules is not overridden.
- Improve analysis of wheel tags. This improves support for future versions of Python through 3.99. It is expected that for most future Python releases, no explicit support will need to be implemented.
- Add Documentation and Changelog links to PyPI.
- Don't mangle Visual C++ runtime redistributable DLLs. Mangling of these DLLs was added in version 1.3.3. More recent considerations have indicated that mangling these DLLs offers questionable benefit. Also, it is believed that at least one of these DLLs uses process-global state, and having 2 versions in the same process can cause DLL load errors.
- Support for Python 3.13, including experimental free-threaded wheels.
- Update tests to use Python 3.12.
- Describe name-mangling in more detail in the README.
- Rename
--ignore-in-wheelto--ignore-existing.--ignore-in-wheelwill continue to be supported as an alias. - Introduce the
--analyze-existingoption to vendor dependencies of DLLs that already exist in the wheel.
- Introduce the
--include-importsflag to vendor.libimport library files along with DLLs.
- Support abi3 wheels for Python 3.9 and 3.10 for Windows ARM64.
- Fix regression where wheel contents were not compressed.
- Support
SOURCE_DATE_EPOCHenvironment variable for reproducible builds. - Support docstrings delimited using 1 double-quote or 1 single-quote when inserting the
.pypatch.
- Improve internal and external documentation.
- Fix
OSError: [Errno 22] Invalid argumentwhen using Windows Store version of Python. - Fix error handling when calling kernel32 functions.
- Copy wheel as-is to destination if no external dependencies are needed.
- Don't vendor DLLs required by
python_d.exefor debug wheels. - Place
.pypatch after header comment and shebang if either exists. - Display warning if wheel seems to have a namespace package that's not specified in
--namespace-pkg. - Fix handling of special characters in filenames in
RECORDfile.
- Make whitespace around the
.pypatch prettier. - Use the term "overlay" in code and documentation to describe PE file trailing data.
- Ignore
.pydfiles in.datadirectory outside of.data/pureliband.data/platlib. - Don't vendor debug versions of CPython DLLs (e.g.
python3_d.dll). - Introduce the
--include-symbolsoption to vendor debug symbol files along with DLLs.
- Introduce support for namespace packages with the
--namespace-pkgoption. - Move "updating RECORD" message to verbose mode.
- Remove unnecessary import from
__init__.pypatch. - Update tests to account for removal of attribute certificate table when name-mangling, a change that first appeared in release 1.3.3.
- Ignore dependency from
msvcp140.dlltoconcrt140.dllbecause this dependency appears to be unnecessary after Windows XP.
- Provide the C source code for a delay-load import hook.
- Remove load order calculation. The
.load-orderfile still exists to aid in loading DLLs for Python 3.7 or lower, but it no longer contains the DLLs in any particular order. This change was made previously in 1.3.3, was reverted in 1.3.4, and is now restored. - Check for directory and file existence in the
__init__.pypatch. This improves compatibility with repackaging tools that relocate the vendored DLLs. - Don't vendor
vcruntime140.dllfor PyPy3.10.
- Use Unix-style line endings for
.load-orderfile. - Add
--no-diagnosticflag to avoid writing diagnostic information toDELVEWHEELmetadata file.
- Revert the improved support for delay-load DLLs. This change caused other problems, and delay-load DLLs don't seem to be used too widely anyway.
- Document that support for delay-load DLLs is limited.
- Restore the load order calculation because it turns out to be necessary for improving support for delay-load DLLs.
- Improve support for delay-load DLLs.
- Clarify the supported platforms in the README.
- Improve comments and docstrings.
- Remove load order calculation. The
.load-orderfile still exists to aid in loading DLLs for Python 3.7 or lower, but it no longer contains the DLLs in any particular order. - Preserve line endings when patching
__init__.py. - Remove attribute certificate table when name-mangling. This also removes the Visual C++ redistributable DLLs from the no-mangle list. They will now be name-mangled by default.
- Fix the calculation for the
SizeOfImageandSizeOfInitializedDataPE headers during name-mangling. - During name-mangling, if enough internal padding space exists within a DLL, use this space to write the new dependency names instead of creating a new PE section. This allows us to name-mangle the dependencies of a DLL containing trailing data as long as enough padding space exists.
- Remove
libwinpthreadfrom the default no-mangle list.
- Improve error message if
--stripfails to remove all trailing data. - Correct the calculation that determines whether a DLL contains trailing data if the last entry in the PE section header does not correspond to the last section of the PE file.
- Remove the
machomachomanglerdependency.delvewheelnow takes full responsibility for DLL name-mangling.
- Use Unix line endings for the
RECORDandDELVEWHEELmetadata files. - Improve error message in name-mangling step when a DLL has trailing data.
- Preserve the order of paths specified with
--add-path. - Introduce the
--stripflag to automatically strip DLLs with trailing data during the name-mangling step.
- Drop support for Python 3.6. Python 3.7+ will be required to run
delvewheelitself. Wheels with a target Python version of 3.6 can still be repaired. - Don't vendor DLLs included with CPython 3.9 or 3.10 arm64 for wheels targeting those versions.
- Make the
DELVEWHEELmetadata file more structured. - Add tests for wheels that have no external DLL dependencies.
- Include
delvewheelversion in help menu.
- Add Python 3.12 to trove classifiers.
- Don't vendor DLLs required by CPython 2.6, 3.2, and 3.3 for wheels targeting those versions.
- Validate DLL names provided as arguments.
- Improve Anaconda Python detection.
- Use wheel distribution name in hash for name-mangling.
- Withdrawn due to a mistake in the release process.
- For
abi3wheels, don't include DLLs included with Python. - Don't assume
vcruntime140_1.dllis present for Python 3.8 x64. - Don't vendor DLLs included with CPython 3.12.
- Improve compatibility with PyInstaller. Repaired wheels no longer raise an error immediately if they can't find the vendored DLLs when in a PyInstaller environment.
- Remove the Visual C++ runtime redistributable directory from the default search path.
- Revise lists of system DLLs.
- Introduce experimental support for repair of
win_arm64wheels. - Improve documentation and code style.
- Optimize the
__init__.pypatch for Python >= 3.10. - Ensure that
delvewheel showalways shows the dependent DLLs that are not found.
- Add unit tests for more Python versions and platforms.
- Avoid including
libpypy3.9-c.dllwhen repairing a PyPy3.9 wheel. - Avoid
OSError: [Errno 22] Invalid argumentduring name-mangling step when runningdelvewheelin PyPy.
- Label project as production/stable.
- Fix "relative import outside package" warning.
- Add unit tests.
- Make
delvewheel neededoutput prettier.
- Undo deprecation of
--no-mangle-all. It will stay.
- Don't mangle
ucrtbased.dll. - Fix DLL load error for Anaconda Python 3.8 and 3.9.
- Increase hash length when name-mangling DLLs.
- Remove extra newline from output end.
- Document CPU architecture limitations.
- Document warning regarding
--add-dll. - Deprecate
--no-mangle-all.
- Improve performance of reading PE files.
- Print warnings from
pefileat verbosity level 2. - Disable the Anaconda workaround for Python 3.8.13.
- Record command-line arguments in
DELVEWHEELfile to aid in diagnosing issues. - Don't vendor DLLs that are included with PyPy3.7 64-bit or PyPy2.7.
- Remove the limitation where the bitness of Python interpreter must match the bitness of the wheel.
- Ensure that the search for
.pydfiles is case-insensitive. Previously, extension modules would be missed if the.pydextension was not all lowercase.
- Fix a bug where using
--add-dllcan cause failures during the name-mangling step. - Fix a bug where
--ignore-in-wheeldoes not take effect during a wheel repair. - Allow
delvewheelto run on non-Windows systems. - Disable the Anaconda workaround on versions where Anaconda has fixed its bug.
- Do not start the
__init__.pypatch with"""""""if unnecessary. - Document the limitations of
--ignore-in-wheel. - Don't vendor DLLs included with CPython 3.11 or PyPy3.8 for wheels targeting those versions.
- Fix a parse error if
__init__.pycontains a docstring that uses triple single-quotes. - Fix a parse error if
__init__.pycontains a docstring whose contents start with a double-quote.
- Don't mangle
libwinpthread*.dll.
- Avoid adding
__init__.pyto a folder with the same name as a top-level module. This ensures that the module search order is unaffected by the wheel repair process.
- Fix an issue with the Anaconda workaround where
CONDA_DLL_SEARCH_MODIFICATION_ENABLEwas not restored.
- Work around a bug in Anaconda distribution of Python where
os.add_dll_directory()has no effect. - Don't vendor DLLs included with Python 3.10 for wheels targeting this version.
- Continue searching when a DLL dependency of the wrong bitness is found.
- Parse
__init__.pycorrectly when comments precede the docstring. - Fix
__init__.pyfor Python < 3.8.
- Introduce the
--ignore-in-wheelflag. - Avoid repairing wheels that were already repaired.
- Don't vendor DLLs that are already included with a Python installation.
- Add the Microsoft Visual C++ runtime redistributable directory to the DLL search path.
- Ensure that vendored DLLs can be loaded when the wheel has a top-level module.
- Patch
__init__.pycorrectly in a platlib wheel. - Clarify the documentation for the
--no-dllflag.
- Use the
delvewheelversion number instead of random string when patching__init__.py. - Correct the patching of
__init__.pywhen it contains a__future__import.
- Correct the parsing of
__init__.pywith docstring that starts or ends with whitespace.
- Patch
__init__.pycorrectly in a purelib wheel. - Enforce incompatibility with non-Windows platforms.
- Fix error running on Python 3.8 or earlier.
- Improve error message if a DLL cannot be name-mangled.
- Don't mangle
msvcr*.dll. - Change
--add-pathto prepend toPATHinstead of appending.
- Correct case where
PATHdoes not end with;.
- Introduce
--no-mangle-alloption. - Improve error message if DLL name mangling fails.
- Place vendored DLLs in a folder at the top level of the wheel.
- Patch
__init__.pycorrectly when it is nonempty initially and has no docstring. - Clarify documentation for
--add-dll.
- First release.