Changelog¶
Unreleased changes¶
Please see the fragment files in the changelog.d directory.
0.14.0 - 2025-09-25¶
Python support¶
Drop Python 3.9 support.
Added¶
Add an
injectcommand.This allows a database of dependencies to be injected into a target file. This can be used to make a Python file a standalone executable.
This feature requires Python 3.11 and higher at execution time due to sqlite3 API usage.
Documentation¶
Use
pngcrushto make image file sizes smaller.Link to the source code repository without using an
iframe.Document how to import sqliteimport and load a database of packages.
This now includes runnable scripts showing fully-automated loading using
sitecustomize.pyand thePYTHONPATHenvironment variable. In addition, more information is provided for manually importing sqliteimport and loading a database.
Development¶
Migrate the flake8 configuration to
pyproject.tomlusing the flake8-toml-config plugin.Test type annotations against all supported Python versions.
Lock the GitHub CI runners to known, predictable versions.
Lock the coverage dependencies used for generating HTML reports to match the same version used to gather coverage statistics.
0.13.0 - 2025-07-24¶
Python support¶
Drop support for PyPy 3.10.
Fixed¶
Fall back to importing from source code if importing from byte code fails.
This resolves a problem importing Flask when byte-compiled, due to its
sansiosubdirectory, which has no__init__.pyfile and whose submodules currently fail to import from the byte code table.
Documentation¶
Document compatible ruff configurations.
Add a logo and description to the sidebar on subpages.
Update the homepage sidebar layout and design.
Development¶
Fix performance testing issues.
Zip-based bytecode import times were skewed during testing because
zipimportdoesn’t use PEP 3147__pycache__/subdirectories. This is now accounted for by the performance testing script’s setup steps, and zip-based import times are now accurate for comparison.Also, the total size of the source code and byte code trees is captured.
Begin to expand and better automate performance testing.
This includes the ability to install from a
requirements.txtfile, to execute an arbitrary Python file, and to plot comparison bar charts of import times and package content sizes.Use chipshot to standardize headers.
Prefer the new Python 3.14
compression.lzmanamespace.
0.12.0 - 2025-05-15¶
Fixed¶
Find all available distributions when no name is given.
This allows tools like flake8 to auto-detect installed plugins.
0.11.0 - 2025-05-14¶
Fixed¶
Fix a crash that occurs when CLI extras are not installed.
This restores the user-friendly warning message behavior when
[cli]extras are not installed.
Changed¶
A
FileNotFoundErrorsubclass is now raised when a file isn’t found.Previously, a
TypeErrorwas implicitly raised due to the structure of the code.
Documentation¶
Add a
CITATION.cfffile.
0.10.0 - 2025-03-25¶
Added¶
Add preliminary support for displaying files and source lines in tracebacks.
0.9.0 - 2025-03-19¶
Fixed¶
Ensure that modules have a
__file__attribute, and possibly a__cached__attribute.The Python data model docs make it clear that these attributes aren’t guaranteed, but it is nevertheless common for authors to assume that
__file__exists.The string value may not be usable for a specific purpose, but the attributes now exist with the correct type for increased compatibility.
0.8.0 - 2025-03-18¶
Added¶
Support namespace packages.
Fixed¶
Fix a bug, and inconsistencies, in the
describecommand output.Verify a distribution package exists in the database before claiming it does.
0.7.0 - 2025-03-10¶
Added¶
Add a subcommand,
describe, to print info about a database.Add an alias for the CLI
sqliteimportcommand:si.
Development¶
Improve the isolation of compatibility code.
0.6.0 - 2025-02-18¶
Added¶
Compress all database content using the LZMA algorithm.
sqliteimport now produces databases that are smaller than importable zip files.
Support compiling to, and loading from, pre-compiled bytecode in the database.
Performance testing shows that sqliteimport now imports large dependency trees faster than standard filesystem-based imports.
Add a
sqliteimport compilecommand to compile all Python source to bytecode.The command should be run for each Python interpreter that will be used by the application.
Development¶
Add a Powershell script to test performance on Windows.
0.5.0 - 2025-02-15¶
Python support¶
Support PyPy 3.11.
Added¶
Add initial support for bundling and loading Python bytecode (
.pycfiles).Performance testing on Linux shows that loading from sqlite is now twice as fast.
The implementation is currently inflexible: it binds the sqlite database to the Python version used to bundle it.
Documentation¶
Add the changelog and a colophon to the documentation.
Configure ReadtheDocs to use the
dirhtmlbuilder.Update the links shown on PyPI.
Development¶
Fix test project regeneration, which broke when Poetry 2 was released.
Migrate from Poetry to
buildto build the test project wheels.Pin the regeneration tool dependencies.
Update the test projects’
pyproject.tomlfiles to use PEP 621 metadata keys.
Add a script to log performance comparisons across multiple importers, including source and bytecode files when imported from the filesystem, from sqlite, and from zip files with varying compression levels.
0.4.0 - 2025-02-06¶
Added¶
Auto-load files on the Python path that end with
.sqlite3.
Fixed¶
Pin the build system requirement to
poetry-corev2.
Documentation¶
Document compatible flake8 and isort configurations.
0.3.0 - 2025-01-29¶
Python support¶
Test against Python 3.14 pre-releases.
Drop Python 3.8 support.
Drop PyPy 3.9 support.
Added¶
Add a database index to improve import performance.
Support calls to
importlib.metadata.version().Partially support accessing resources in packages.
Support binary files (like non-UTF-8 Python modules) and resources.
Fixed¶
Fix a bug in the bundling code that allowed non-Python files to be importable.
Previously, a package containing a PEP 561
py.typedfile would have an importable submodule named{package}.py.Fix a bug that prevented databases bundled on Windows from finding package metadata.
Changed¶
Introduce a data access object to manage database interactions.
Create a
sqliteimporttable to store metadata about the database.Bundle
.dist-info/metadata directories into databases.
Documentation¶
Use an absolute URL to the banner in the README.
This helps ensure that PyPI releases will render the README consistently.
Development¶
Test that Unicode filenames can be imported.
Add a script to generate a large Python package for performance testing.
Resolve a
ResourceWarningin the test suite on Python 3.13.Add CI testing.
Create a framework for testing bundling and importing.
Migrate to PEP 621 metadata in
pyproject.toml.Create release PRs via a reusable workflow.
0.2.0 - 2024-05-23¶
Added¶
Add a
cliextra.Add a CLI command,
sqliteimport bundle, to assist with database generation.
0.1.0 - 2024-05-22¶
Initial release¶
Support loading Python source code from a sqlite database.