VersionInfo helper script for PyInstaller
This repository contains helper scripts to dynamically create VersionInfo objects that can be embedded in .exe files created by PyInstaller.
Project Status
| Category | Workflow information |
|---|---|
| Published on PyPI | |
| Documentation | |
| Tests | |
| Type annotations: inline | |
| Additional CI/CD workflows |
Motivation
This project was created because existing solutions to embed version information inside executables relied on creating artifact files that get read (and eval-ed) by PyInstaller during the build process.
Dynamically creating such files essentially boiled down to inserting data in a string template, with no guides to the user if their entered data is valid or not.
A bit of exploration of PyInstaller's source code and official Microsoft documentation revealed that it should be possible to provide PyInstaller with necessary data straight from .spec files without file-read-and-eval step.
This approach has the added bonus of being type hint compatible, offering rich auto-complete in supported IDEs.
Installation
Wheels are available on PyPI, install with:
pip install versioninfo_helper
Usage
See example_simple.onefile.spec and example_dynamic.onefile.spec for examples on how to integrate VersionInfo creation directly into PyInstaller .spec files.
Snippet of .spec file with embedded VersionInfo generation:
... # Skipped other parts of .spec file
def gen_version_info(): # -> VSVersionInfo
'''
Helper function, which can be embedded in .spec file,
generates VSVersionInfo instance for executable.
'''
from versioninfo_helper import CharsetCode
from versioninfo_helper import LanguageID
from versioninfo_helper import create_VersionInfo
# version must be a tuple of 4 (16-bit) integers
# hardcoded in this example, but can be generated dynamically as needed
version = (1, 2, 3, 4)
version_str = '.'.join(str(v) for v in version)
return create_VersionInfo(
version,
strings=[
{
# all fields are described in included TypedDicts,
# so IDEs should offer auto-complete and type checks
"lang_id": LanguageID.US_English,
"charset_id": CharsetCode.Unicode,
"fields": {
"CompanyName": 'Your Company Name LLC',
'FileDescription': f'AppName ({version_str})',
'FileVersion': f'{version_str}',
'InternalName': 'AppName.exe',
'LegalCopyright': '© 2026 Your Company Name LLC',
'OriginalFilename': 'AppName.exe',
'ProductName': 'AppName - Part of Product',
'ProductVersion': f'{version_str}',
}
}
]
)
... # Skipped other parts of .spec file
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='AppName',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
icon='icon.ico',
version=gen_version_info() # call your helper function here
)
Metadata
Release files for versioninfo-helper 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| versioninfo_helper-1.0.1.tar.gz | 109.2 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| versioninfo_helper-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 123.5 kB
Release files / versioninfo_helper-1.0.1.tar.gz
| Download URL | versioninfo_helper-1.0.1.tar.gz |
|---|---|
| Size | 109.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
16c6c24410edf422b4a178c9080cdd9821ad38085895a9d4f528da44b0eb3641
|
|
BLAKE2b-256 checksum How to use checksums |
1dcd9ef790ae56043d7c098d1401a2ae217a2bd9206996c726f7ea449e57511a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 15, 2026.
Transparency logRelease files / versioninfo_helper-1.0.1-py3-none-any.whl
| Download URL | versioninfo_helper-1.0.1-py3-none-any.whl |
|---|---|
| Size | 14.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8e10ac5aa8228b86c8ede344e414d5d44152fff7d621ff2375fb87909096cd98
|
|
BLAKE2b-256 checksum How to use checksums |
a4ef4f04631ebaadeae0b6d3406a0f124d1911a41bf6142ce73c1b3427c4a474
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 15, 2026.
Transparency logSecurity for versioninfo-helper 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for versioninfo_helper-1.0.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 15, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.