A PDM plugin that packs your packages into a zipapp
pdm-packer requires Python >=3.7
If you have installed PDM with the recommended tool
pipx, add this plugin by:
$ pipx inject pdm pdm-packer
Or if you have installed PDM with
pip install --user pdm, install with
pip to the user site:
$ python -m pip install --user pdm-packer
pdm-packer to the same place where PDM is located.
$ pdm pack [common-options] [pack-options]
show this help message and exit
-v for detailed output and -vv for more detailed
Use the global project, supply the project root with
-p PROJECT_PATH, --project PROJECT_PATH
Specify another path as the project root, which changes the base of pyproject.toml and
-m MAIN, --main MAIN
Specify the console script entry point for the zipapp
-o OUTPUT, --output OUTPUT
Specify the output filename. By default the file name will be inferred from the project name.
Compress files with the deflate method, no compress by default
-i INTERPRETER, --interpreter INTERPRETER
The Python interpreter path, default: the project interpreter
Create an executable file. If the output file isn't given, the file name will end with .exe(Windows) or no suffix(Posix)
# Create with default name(<project_name>.pyz) and console_script as the __main__.py pdm pack # Create an executable file pdm pack --exe # Create with custom __main__.py and filename pdm pack -o app.pyz -m app:main
- If the result zipapp contains binaries, it can only be deployed to the platforms with the same abi, any cross-abi usage of that app might expect a failure.
- Any console scripts except for what is given to
--mainwill be lost.
- The .exe file is different from what is produced by
pyinstallerin the way that it doesn't embed a Python interpreter. This means you have to install a Python with exactly the same version on the deployment platform.
- If you have code to run in your project, the project itself should be installed into
__pypackages__as well. Make sure you have set a project name in
About executable zipapp
By default, zipapp is created with
.pyz suffix. On Windows, if you have associted
.pyz files with Python program, you can run the app by double-clicking the file in the explorer. But if you create the app with
--exe turn on, you can have a .exe file on Windows and an executable file on Unix-like systems, so that the app can be executed without a
python command prefixing it and no matter you assoicated the file exensition properly or not.