NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #575 most downloaded on PyPI
A purl aka. Package URL parser and builder
Last release 10 months ago
24 Nov 2025
Release timing varies
gaps range from 8 days to 8 months
Most releases are documented
notes for 42 of 55 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
57 releases · first in 2017
Add tests for latest purl-spec by @TG1999 in #202
Full Changelog: v0.17.5...v0.17.6
One column per quarter.
Enhance url2purl to support commit hashes parsing (GitHub, GitLab, and Bitbucket) https://github.com/package-url/packageurl-python/pull/211
Adjust validation function https://github.com/package-url/packageurl-python/pull/206
Add validation function https://github.com/package-url/packageurl-python/pull/205
Remove qpkg download URL purl2url support by @TG1999 in #203
Full Changelog: v0.17.4...v0.17.5
Remove support for getting download URL for qpkg in purl2url. https://github.com/package-url/packageurl-python/pull/203
Add tests for latest purl-spec https://github.com/package-url/packageurl-python/pull/202
Collect more download URLs in purl2url by @TG1999 in #201
Full Changelog: v0.17.3...v0.17.4
Add support for getting download URL for debian, apk, qpkg in purl2url. https://github.com/package-url/packageurl-python/pull/201
Collect more download URLs in purl2url by @TG1999 in #199
Full Changelog: v0.17.2...v0.17.3
Add support for getting download URL for Luarocks, Conda, Alpm in purl2url. https://github.com/package-url/packageurl-python/pull/199
Fix Incorrect download url from build_golang_download_url() https://github.com/package-url/packageurl-python/issues/198
Add encode kwarg to .to_string() by @jaimergp in #191
encode kwarg to .to_string() by @jaimergp in #191Full Changelog: v0.17.1...v0.17.2
Add support for getting download URL for Golang, Hex, Pub and Swift in purl2url. https://github.com/package-url/packageurl-python/pull/195
Add Maven support for purl2url by @fafanoulele in #177
pkg as a PackageURL class attribute by @jaimergp in #184Full Changelog: v0.17.0...v0.17.1
Define "pkg" as a PackageURL SCHEME class attribute. https://github.com/package-url/packageurl-python/issues/184
Add support for Maven in purl2url. https://github.com/package-url/packageurl-python/issues/177
fix: qualifiers type annotation by @jhoward-lm in #172
Full Changelog: v0.16.0...v0.17.0
Fix qualifiers type annotations. https://github.com/package-url/packageurl-python/issues/169
Fix parsing of names and namespaces with colons. https://github.com/package-url/packageurl-python/issues/152
Drop support for Python 3.7 #160 by @tdruez in #163
Full Changelog: v0.15.6...v0.16.0
Add support for Python 3.13.
Drop support for Python 3.7. https://github.com/package-url/packageurl-python/issues/160
Improve support for 3 path segments NPM URLs in url2purl. https://github.com/package-url/packageurl-python/issues/167
Refine support for GitHub /archive/refs/tags/ URLs in url2purl by @tdruez in #161
Refine support for GitHub /archive/refs/tags/ URLs in url2purl. The whole tag is now captured as the version. This allows to properly reconstruct valid URLs in purl2url.
Capture the whole git tag as the version for GutHub URL in url2purl by @tdruez in #159
Full Changelog: v0.15.4...v0.15.5
Capture the whole git tag as the version for GutHub URL in url2purl instead of adding a version_prefix qualifier. Note that the version_prefix qualifier is still supported in purl2url for backward compatibility. https://github.com/package-url/packageurl-python/pull/159
Add with_package_url, without_package_url, and order_by_package_url to the PackageURLQuerySetMixin contrib class.
Add with_package_url, without_package_url, and order_by_package_url to the PackageURLQuerySetMixin contrib class.
Add support for namespace in build_npm_download_url.
Add support for namespace in build_npm_download_url.
Update GitHub generated Download URL for maximum compatibility. https://github.com/package-url/packageurl-python/issues/157
Update GitHub generated Download URL for maximum compatibility. https://github.com/package-url/packageurl-python/issues/157
Add support for Composer in purl2url and url2purl. https://github.com/package-url/packageurl-python/pull/144
Add support for Composer in purl2url and url2purl. https://github.com/package-url/packageurl-python/pull/144
Add an option for exact_match purl QuerySet lookups in the ``PackageURLQuerySetMixin.for_package_url``method. https://github.com/package-url/packageurl-python/issues/118
Add support to get PackageURL from go_package or go module name version string as seen in a go.mod file. https://github.com/package-url/packageurl-pyt
Add support to get PackageURL from go_package or go module name version string as seen in a go.mod file. https://github.com/package-url/packageurl-python/pull/148
Add cran ecosystem support for url2purl https://github.com/package-url/packageurl-python/pull/149
Add support for getting golang purl from go import. https://github.com/nexB/purldb/issues/259
Add support for getting golang purl from go import. https://github.com/nexB/purldb/issues/259
Fix the "gem" type in the README docs. https://github.com/package-url/packageurl-python/pull/114
Improve support for SourceForge URLs in url2purl. https://github.com/package-url/packageurl-python/issues/139
Improve support for SourceForge URLs in url2purl. https://github.com/package-url/packageurl-python/issues/139
Improve support for SourceForge URLs in url2purl. https://github.com/package-url/packageurl-python/issues/139
Improve support for SourceForge URLs in url2purl. https://github.com/package-url/packageurl-python/issues/139
Improve support for SourceForge URLs in url2purl. https://github.com/package-url/packageurl-python/issues/139
Improve support for SourceForge URLs in url2purl. https://github.com/package-url/packageurl-python/issues/139
Add support for Python 3.12 https://github.com/package-url/packageurl-python/pull/135
Add support for Python 3.12 https://github.com/package-url/packageurl-python/pull/135
Revert changes from https://github.com/package-url/packageurl-python/pull/115/ In above PR we dropped namespaces for a golang purl and stored whole na
Revert changes from https://github.com/package-url/packageurl-python/pull/115/ In above PR we dropped namespaces for a golang purl and stored whole namespace and name in name itself, which was further discussed again and decided we will like to keep namespace back.
Modified PackageURL.from_string to properly handle golang purls. https://github.com/package-url/packageurl-python/pull/115/
Modified PackageURL.from_string to properly handle golang purls. https://github.com/package-url/packageurl-python/pull/115/
Improve support for PyPI URLs in url2purl. https://github.com/package-url/packageurl-python/pull/128
Return the "gem" type instead of "rubygems" for "https://rubygems.org/" URLs in url2purl. The pkg:rubygems/ purls are backward-compatible in purl2url. https://github.com/package-url/packageurl-python/pull/114/
Add support for GitLab "/archive/" URLs in url2purl. https://github.com/package-url/packageurl-python/issues/133
Add support for GitLab "/archive/" URLs in url2purl. https://github.com/package-url/packageurl-python/issues/133
Remove deprecated purl_to_lookups and without_empty_values import compatibility from packageurl.contrib.django.models. Replace those functions import…
Remove deprecated purl_to_lookups and without_empty_values import compatibility from packageurl.contrib.django.models. Replace those functions import using packageurl.contrib.django.utils.
Add download purl2url support for bitbucket and gitlab.
Add support for the golang type in purl2url.get_repo_url() #107
Add support for the golang type in purl2url.get_repo_url() #107
- Apply typing - Add support for Python 3.11 - Fix minor typos - Drop Python 3.6
Apply typing
Add support for Python 3.11
Fix minor typos
Drop Python 3.6
Fixed PackageURL.from_string to properly handle npm purls with namespace.
Fixed PackageURL.from_string to properly handle npm purls with namespace.
Refactor the purl2url functions and utilities #42
Refactor the purl2url functions and utilities #42
Split purl2url into get_repo_url() and get_download_url() returning accordingly a "Repository URL" and a "Download URL".
A new get_inferred_urls function is available to get return all inferred URLs (repository and download) values.
Add support in purl2url for npm, pypi, hackage, and nuget.
Package URL qualifiers can now be provided to purl_from_pattern().
The download_url qualifier is returned in get_download_url() when available.
Usage of purl2url.purl2url and purl2url.get_url is still available for backward compatibility but should be migrated to purl2url.get_repo_url.
Include the version_prefix ("v" or "V") as a qualifier in build_github_purl #42 This allow to infer valid URLs in the context of purl2url.
Fix named arguments in purl_to_lookups.
Fix named arguments in purl_to_lookups.
Add encode option in purl_lookups #94 (purl_to_lookups, without_empty_values is moved from packageurl.contrib.django.models to packageurl.contrib.djan
Add encode option in purl_lookups #94 (purl_to_lookups, without_empty_values is moved from packageurl.contrib.django.models to packageurl.contrib.django.utils)
Add ability to filter objects with EMPTY purls in PackageURLFilter #92
Add ability to filter objects with EMPTY purls in PackageURLFilter #92
Upgrade virtualenv.pyz to latest version #85
Upgrade virtualenv.pyz to latest version #85
Replace Travis CI by GitHub Actions #84
Add black to the CI and apply formatting on whole codebase #91
Improve url2purl support for nom URLs
Improve url2purl support for rubygems.org URLs #89
Update version to be semver compliant. No changes to the code have been made.
Update version to be semver compliant. No changes to the code have been made.
Fix generic sourceforge PackageURL generation #79
Fix generic sourceforge PackageURL generation #79
Do not create a generic PackageURL for URLs without a path in url2purl #72
Do not create a generic PackageURL for URLs without a path in url2purl #72
Use project name as the Package name when creating generic sourceforge PackageURLs #74
Update PyPI route pattern in url2purl to handle different file name formats #76
Create generic PackageURL for code.google.com archive URLs #78
Capture more download types for bitbucket URLs
Create a generic PackageURL for URLs that do not fit existing routes in url2purl #68
Create a generic PackageURL for URLs that do not fit existing routes in url2purl #68
Add support for new github URLs in url2purl #47
Drop support for Python 2 #61
Add support for new github URLs in url2purl #47
Add support for "archive/refs/tags/" github URLs in url2purl #47
Add support for "archive/refs/tags/" github URLs in url2purl #47
Fix Python 2 compatibility issue #57
Fix Python 2 compatibility issue #57
Add QuerySet utils to lookup and filter along the PackageURLMixin Django class #48
Add QuerySet utils to lookup and filter along the PackageURLMixin Django class #48
Add a PackageURLFilter class for Django FilterSet implementations #48
Move the django_models module to django.models #48 Replace packageurl.contrib.django_models imports with packageurl.contrib.django.models.
Add support for GitHub "raw" URLs in url2purl #43
Document usage in README
Adopt SPDX license identifier
Add support for GitHub "raw" URLs in url2purl #43
Improve GitHub support for "v" prefixed version in url2purl #43
Add and improve URL <-> Package URL conversion for gitlab, github, cargo, bitbucket and hackage URL conversions
Add and improve URL <-> Package URL conversion for gitlab, github, cargo, bitbucket and hackage URL conversions
Add new purl2url conversion utility
Remove the null=True on Django CharField fields of the PackageURLMixin
PackageURL.to_dict() now takes an optional "empty" argument with the value that empty values to have. It defaults to None which was the current behaviour. For some use cases, having an empty string may be a better option and this enables this.
Increase the size of the Django model contrib version to 100 chars.
Make PackageURL hashable.
Add cargo type or url2purl
Increase the size of the Django model contrib version to 100 chars.
Remove Python 3 idioms (f strings)
Add max length validation to the Django model contrib.
Add max length validation to the Django model contrib.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →