What are .pex files?¶
tl;dr¶
PEX files are self-contained executable Python virtual environments. More
specifically, they are carefully constructed zip files with a
#!/usr/bin/env python
and special __main__.py
that allows you to interact
with the PEX runtime. For more information about zip applications,
see PEP 441.
To get started building your first pex files, go straight to Building .pex files.
Why .pex files?¶
Files with the .pex extension – “PEX files” or “.pex files” – are
self-contained executable Python virtual environments. PEX files make it
easy to deploy Python applications: the deployment process becomes simply
scp
.
Single PEX files can support multiple platforms and python interpreters, making them an attractive option to distribute applications such as command line tools. For example, this feature allows the convenient use of the same PEX file on both OS X laptops and production Linux AMIs.
How do .pex files work?¶
PEX files rely on a feature in the Python importer that considers the presence
of a __main__.py
within the module as a signal to treat that module as
an executable. For example, python -m my_module
or python my_module
will execute my_module/__main__.py
if it exists.
Because of the flexibility of the Python import subsystem, python -m
my_module
works regardless if my_module
is on disk or within a zip
file. Adding #!/usr/bin/env python
to the top of a .zip file containing
a __main__.py
and marking it executable will turn it into an
executable Python program. pex takes advantage of this feature in order to
build executable .pex files. This is described more thoroughly in
PEP 441.