PyOxidizer Project¶
Welcome to the unified documentation of the PyOxidizer Project, a collection of libraries and tools attempting to improve ergonomics around packaging and distributing [Python] applications.
The official home of the project is https://github.com/indygreg/PyOxidizer. Official documentation lives on Read the Docs (unreleased/latest commit, last release).
The pyoxidizer-users mailing list is a forum for users to discuss all things PyOxidizer.
The creator and maintainer of PyOxidizer
is
Gregory Szorc.
Multiple Tools Under One Roof¶
The PyOxidizer Project is comprised of discrete pieces of software developed in the same repository. Major pieces of user-facing software have their own documentation, each described in the following sections.
Apple Code Signing¶
The apple-codesign
Rust crate and rcodesign
CLI tool implement
Apple code signing to enable developers to sign, notarize, and staple software
without having to use Apple hardware or macOS.
- Apple Code Signing
- Getting Started
- Using
rcodesign
- Managing Code Signing Certificates
- Smart Card Support
- Concepts
- Known Issues and Limitations
- How to Debug and Report Problems
- Remote Code Signing
- Remote Code Signing Protocol
- Remote Code Signing Design and Security Considerations
- A Primer on Gatekeeper
- Selectively Bypassing Gatekeeper with Custom Assessment Policies
oxidized_importer¶
A Python extension module [implemented in Rust] providing a highly performant
alternate module and resource importing mechanism. oxidzed_importer
can
be used to import Python modules and resources from memory, enabling Python
applications to be single file executables.
oxidized_importer
is usable as a standalone Python package and can
be installed from PyPI.
oxidized_importer
Python Extension- Getting Started
- Python Meta Path Finders
OxidizedFinder
Meta Path FinderOxidizedFinder
Behavior and Complianceoxidized_importer
Python Resource Types- Resource Scanning APIs
- Loading Resource Files
- Freezing Applications with
oxidized_importer
OxidizedZipFinder
Meta Path Finder- Common Issues
- Security Implications of Loading Resources
- API Reference
- Python Packed Resources
- Project History
pyembed¶
A Rust library crate to control embedded Python interpreters in Rust
applications. The pyembed
crate enhances the functionality of embedded
Python interpreters by implementing additional features such as integration
with oxidized_importer, easy configuration of
alternate memory allocators, automatic terminfo database resolution, and
more.
pyembed
is usable as a standalone Rust crate and can be used by any
Rust project embedding Python to abstract over some of the complexities
with embedding a Python interpreter.
PyOxidizer¶
PyOxidizer is a [Rust] application for streamlining the creation of distributable Python applications.
PyOxidizer is often used to generate binaries embedding a Python interpreter and a custom Python application. However, its configuration files support additional functionality, such as the ability to produce Windows MSI installers, macOS application bundles, and more.
PyOxidizer is primarily made available as the pyoxidizer
command line
tool. However, it is also usable as a Rust library crate.
PyOxy¶
PyOxy is an application providing an alternative Python runner. Think of
it as an alternative implementation and re-imagination of the ubiquitous
python
command.
PyOxy enables access to some of the technology built for pyoxidizer
(notably oxidized_importer and
pyembed) without having to use pyoxidizer
.
PyOxy is distributed as a standalone application.
Tugger¶
Tugger is an umbrella project for implementing generic application packaging and distribution functionality. It is comprised as several Rust crates, each providing domain-specific functionality including:
Debian packaging formats
Software licensing
Snapcraft packaging
Apple code signing
Rust toolchain installation
Windows installer generation
And much more
Tugger defines Starlark primitives for scripting common application packaging and distribution actions.
Tugger is used by PyOxidizer for performing functionality that isn’t specific to Python.
There are aspirations to make Tugger a standalone tool someday. But for now, it is only available as a series of Rust crates.