nodejs/node · error · InvalidSdistFilename
Invalid sdist filename: {filename}
Error message
Invalid sdist filename: {filename} What it means
InvalidSdistFilename raised when, after stripping the extension, rpartition('-') finds no dash at all - meaning the stem cannot be split into name and version. PEP 440 versions cannot contain dashes, so a single dash is expected to separate name from version.
Source
Thrown at tools/gyp/pylib/packaging/utils.py:161
return (name, version, build, tags)
def parse_sdist_filename(filename: str) -> Tuple[NormalizedName, Version]:
if filename.endswith(".tar.gz"):
file_stem = filename[: -len(".tar.gz")]
elif filename.endswith(".zip"):
file_stem = filename[: -len(".zip")]
else:
raise InvalidSdistFilename(
f"Invalid sdist filename (extension must be '.tar.gz' or '.zip'):"
f" {filename}"
)
# We are requiring a PEP 440 version, which cannot contain dashes,
# so we split on the last dash.
name_part, sep, version_part = file_stem.rpartition("-")
if not sep:
raise InvalidSdistFilename(f"Invalid sdist filename: {filename}")
name = canonicalize_name(name_part)
try:
version = Version(version_part)
except InvalidVersion as e:
raise InvalidSdistFilename(
f"Invalid sdist filename (invalid version): {filename}"
) from e
return (name, version)
View on GitHub (pinned to 1b2de5e052)
Solutions
- Ensure sdist filenames follow the 'name-version.tar.gz' convention.
- Regenerate the sdist with a PEP 517 backend that names files correctly.
- Validate the presence of a dash-separated version before parsing.
Example fix
# before # 'mypkg.tar.gz' # after # 'mypkg-1.0.0.tar.gz'
Defensive patterns
Strategy: validation
Validate before calling
def sdist_has_version(filename: str) -> bool:
if filename.endswith('.tar.gz'):
stem = filename[:-len('.tar.gz')]
elif filename.endswith('.zip'):
stem = filename[:-len('.zip')]
else:
return False
return '-' in stem Try / catch
try:
name, ver = parse_sdist_filename(fn)
except InvalidSdistFilename as e:
if 'Invalid sdist filename:' in str(e):
pass # filename lacks name-version structure; skip or rename Prevention
- Keep sdist filenames in name-version.tar.gz form.
- Regenerate sdists with a PEP 517 backend.
- Do not strip version components when renaming.
When it happens
Trigger: An sdist filename like 'mypkg.tar.gz' (no version), or a stem with no dash separator between name and version.
Common situations: Malformed sdist names from non-standard build tools, or files renamed to drop the version component.
Related errors
- Invalid sdist filename (extension must be '.tar.gz' or '.zip
- Invalid wheel filename (extension must be '.whl'): {filename
- Invalid wheel filename (wrong number of parts): {filename}
- Invalid project name: {filename}
- Invalid sdist filename (invalid version): {filename}
AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13).
Data as JSON: /api/errors/85c7b7bc292d87e0.
Report an issue: GitHub.