Skip to main content

Liberator - static code extractor for Python

GitlabCIPipeline GitlabCICoverage ReadTheDocs Pypi Downloads

Github

https://gitlab.kitware.com/python/liberator

Pypi

https://pypi.org/project/liberator

ReadTheDocs

https://liberator.readthedocs.io/en/latest/

Liberator is a Python library that “liberates” (i.e. statically extracts) class / function source code from an existing python library into a single standalone module.

It works by statically parsing the code for the class / function definition and then recursively parsing and extracting all missing dependencies.

Here is an example. Say that you want to use the find_exe function from ubelt, but you don’t want to depend on ubelt itself, you can extract the minimal code necessary to define the find_exe function in a new standalone module via:

# Create a Liberator instance to manage construction of
# the new standalone code.
from liberator.core import Liberator
lib = Liberator()

# Pass the liberator object the function you want to expose
# You can add more than one function this way.
import ubelt as ub
lib.add_dynamic(ub.find_exe)

# Tell liberator about the library that you dont want to depend on,
# any (statically findable) external references to that library will be
# vendored into the new liberated code.
lib.expand(['ubelt'])

# Finally access the "current source code" which will
# have the self-contained version of the "liberated" utility.
print(lib.current_sourcecode())

Limitations

Liberator has several limitations. It only works if the code is expressed statically (i.e. no decorators that register methods in a list to be injected into something later). It does not do any work to evaluate anything, it just looks at function definitions and pulls them in verbatim. It also does no work to mangle to deconflict different functions with the same names (although it could and that is an extension I’d lke add). Lastly, it can only “expand” packages imported at the top level of the code. Nested imports are not “liberated”. This is another extension that could be implemented, but it currently isn’t.

Metadata

Release files for liberator 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for liberator 0.1.1
File Interpreter ABI Platform Actions
liberator-0.1.1-py3-none-any.whl Python 3 none any Details for liberator-0.1.1-py3-none-any.whl

Release files / liberator-0.1.1-py3-none-any.whl

Download URL liberator-0.1.1-py3-none-any.whl
Size 26.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
75d9faf87b6e5e8a0285853097fd5643823d59c84ed143b9be96d948bbe12b9a
BLAKE2b-256 checksum
How to use checksums
fcc1eae54ed45772538913ac182095044f4564b6ce0d70ed2b6eb462fae19d29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.11.9

Security for liberator 0.1.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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page