Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Subpar alternative/comparison documentation #10

@Code0x58

Description

@Code0x58

The PEX Design page doesn't list subpar as an alternative, although it seems to be.

At a glance (using a sample pex from heron) both produce python zip files:

  • the par shebang uses python whereas pex uses something like python2.7
  • the par zip has 0 compression which makes the file human readable/search
  • the pex has a .bootstrap/ (including bytecode cache) and PEX-INFO

I don't know how much is configurable between the two, or how different situations are handled (such as C extensions). It looks like pex isn't very portable, but handles dependencies at least a bit differently.

Does anyone know the two well enough to be able to give a fairly detailed comparison on the practical differences?

trees of examples

par-example
├── __main__.py
├── org_apache_heron
│   └── heron
│       ├── common
│       │   ├── __init__.py
│       │   └── tests
│       │       ├── __init__.py
│       │       └── python
│       │           ├── __init__.py
│       │           └── pex_loader
│       │               ├── __init__.py
│       │               └── testdata
│       │                   ├── __init__.py
│       │                   └── src
│       │                       ├── __init__.py
│       │                       ├── sample
│       │                       └── sample.py
│       └── __init__.py
└── subpar
    ├── __init__.py
    └── runtime
        ├── __init__.py
        └── support.py

10 directories, 13 files
pex-example
├── .bootstrap
│   ├── __init__.py
│   ├── _markerlib
│   │   ├── __init__.py
│   │   ├── __init__.pyc
│   │   ├── markers.py
│   │   └── markers.pyc
│   ├── _pex
│   │   ├── archiver.py
│   │   ├── archiver.pyc
│   │   ├── base.py
│   │   ├── base.pyc
│   │   ├── common.py
│   │   ├── common.pyc
│   │   ├── compatibility.py
│   │   ├── compatibility.pyc
│   │   ├── compiler.py
│   │   ├── compiler.pyc
│   │   ├── crawler.py
│   │   ├── crawler.pyc
│   │   ├── environment.py
│   │   ├── environment.pyc
│   │   ├── fetcher.py
│   │   ├── fetcher.pyc
│   │   ├── finders.py
│   │   ├── finders.pyc
│   │   ├── http.py
│   │   ├── http.pyc
│   │   ├── __init__.py
│   │   ├── __init__.pyc
│   │   ├── installer.py
│   │   ├── installer.pyc
│   │   ├── interpreter.py
│   │   ├── interpreter.pyc
│   │   ├── iterator.py
│   │   ├── iterator.pyc
│   │   ├── link.py
│   │   ├── link.pyc
│   │   ├── orderedset.py
│   │   ├── orderedset.pyc
│   │   ├── package.py
│   │   ├── package.pyc
│   │   ├── pep425.py
│   │   ├── pep425.pyc
│   │   ├── pex_bootstrapper.py
│   │   ├── pex_bootstrapper.pyc
│   │   ├── pex_builder.py
│   │   ├── pex_builder.pyc
│   │   ├── pex_info.py
│   │   ├── pex_info.pyc
│   │   ├── pex.py
│   │   ├── pex.pyc
│   │   ├── platforms.py
│   │   ├── platforms.pyc
│   │   ├── requirements.py
│   │   ├── requirements.pyc
│   │   ├── resolvable.py
│   │   ├── resolvable.pyc
│   │   ├── resolver_options.py
│   │   ├── resolver_options.pyc
│   │   ├── resolver.py
│   │   ├── resolver.pyc
│   │   ├── sorter.py
│   │   ├── sorter.pyc
│   │   ├── testing.py
│   │   ├── testing.pyc
│   │   ├── tracer.py
│   │   ├── tracer.pyc
│   │   ├── translator.py
│   │   ├── translator.pyc
│   │   ├── util.py
│   │   ├── util.pyc
│   │   ├── variables.py
│   │   ├── variables.pyc
│   │   ├── version.py
│   │   └── version.pyc
│   ├── pkg_resources
│   │   ├── __init__.py
│   │   ├── __init__.pyc
│   │   └── _vendor
│   │       ├── __init__.py
│   │       ├── __init__.pyc
│   │       └── packaging
│   │           ├── __about__.py
│   │           ├── __about__.pyc
│   │           ├── _compat.py
│   │           ├── _compat.pyc
│   │           ├── __init__.py
│   │           ├── __init__.pyc
│   │           ├── specifiers.py
│   │           ├── specifiers.pyc
│   │           ├── _structures.py
│   │           ├── _structures.pyc
│   │           ├── version.py
│   │           └── version.pyc
│   ├── pkg_resources.py
│   └── pkg_resources.pyc
├── heron
│   ├── common
│   │   ├── __init__.py
│   │   └── tests
│   │       ├── __init__.py
│   │       └── python
│   │           ├── __init__.py
│   │           └── pex_loader
│   │               ├── __init__.py
│   │               └── testdata
│   │                   ├── __init__.py
│   │                   └── src
│   │                       ├── __init__.py
│   │                       ├── sample.py
│   │                       └── sample.pyc
│   └── __init__.py
├── __main__.py
├── __main__.pyc
└── PEX-INFO

13 directories, 103 files

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions