-
2026.4.17
- add
uv_download_pythonmodule for downloading Python via uv- rename
uv_python.pytouv_download_python.py - add
--flattenflag to promote versioned sub-directory to target root - auto-clean uv artifacts (junctions, metadata) after installation
- skip pre-release versions in auto mode when no keyword filter is specified
- rename
- add
-
2026.4.2
- Only delete zipapps cache on the main process
- add --uv flag to test_uvx_zipapps
- improve test_chmod/multiprocessing robustness
- add --exclude-patterns alias
- include Python 3.14 in CI matrix
-
2025.09.04
download_python: removed the defaultstrippedkeywordtest_utils.py: now uses thetest_cache/folder to avoid conflicts- Fixed Linux test cases
- download_python
- removed the default
strippedkeyword - Linux is now the default platform for auto mode
- removed the default
- Added scripts entry point to zipapps's pyproject.toml
- Can also be used as
uvx zipapps ... - Or
zipapps.exe ...on Windows, orzipappson Unix
- Can also be used as
- Added
--uvoption to accept a path to uv, speeding uppip install--uv=uvor--uv=path/to/uv
- Added
--freeze-depsas an alias for--freeze-reqs - fix deprecated warning since 3.10
zipimporter.load_module - add
uvxuse case to test_utils.pyuvx zipapps sixpython -m zipapps six --uv=uv
-
2024.08.07
- [Compatible WARNING]: update
sys_pathsinsert index from-1to0 - disable
--download-python, usepython -m zipapps.download_pythoninstead- add
-a/--auto- auto download the latest version matched the current platform: x86_64+install_only
python -m zipapps.download_python -a
- add
-k/--keywords, filt with keywords split by,python -m zipapps.download_python -a -k 3.11
- add
-u/--unzip, unzip the.tar.gzpython -m zipapps.download_python -a -k 3.11 -u- download and unzip the
.tar.gz
- download and unzip the
- add
- [Compatible WARNING]: update
-
2024.06.04
- add arg
--download-python: interactive download standalone python interpreter (https://www.github.com/indygreg/python-build-standalone) - custom
--rm-patternsto remove useless files . fixed #28 #29 - add
pip_install_targetto install requirements and insert tosys.path, cache supportfrom zipapps import pip_install_targetpip_install_target(Path("./mock_dir"), ["six"], force=False, sys_path=0); import six
- add arg
-
2023.09.12
- add
--download-pip-pyzto download pip.pyz- install pip module to win32 embeded exe
- win32 embeded
./python.exe xxx/xxx/zipapps.pyzauto downloadpip.pyzand append to _pth
- win32 embeded
- install pip module to win32 embeded exe
- fix
main.pydocs
- add
-
2023.06.04
- save zipapps_config.json to pyz file
-
2022.08.28
- add
-qfor quiet mode-qqqqqto mute all the logs
-msupport source code mode while not matchedmodule.submodule:functionformat- like
python -c "python code" - demo:
python -m zipapps -m "import six; print(six.__file__)" - WARN: only when
-mnot matched regexr'^\w+(\.\w+)?(:\w+)?$'
- like
- add
-
2022.04.27
- handle PermissionError for chmod
- support
--dump-configand--load-config#24 fixed - support
--freeze-reqsclose #22- Freeze package versions of pip args with venv, output to the given file path.
-equals tostdout- logs will be redirect to
stderr
- Based on
pip+venv- the work folder is
tempfile.TemporaryDirectory, prefix='zipapps_'
- the work folder is
- Freeze package versions of pip args with venv, output to the given file path.
- support clear self pyz after running fix #21
- refactor environment variables template and interval variables(with string.Template) #23
- change TEMP/HOME/SELF prefixes with $TEMP/$HOME/$SELF
- backward compatibility is preserved
- support $PID, $CWD
- change TEMP/HOME/SELF prefixes with $TEMP/$HOME/$SELF
- normalize the map of environment variables
- use these envs to reset build args at runtime
-
'unzip': 'ZIPAPPS_UNZIP', 'unzip_exclude': 'ZIPAPPS_UNZIP_EXCLUDE', 'unzip_path': 'ZIPAPPS_CACHE', 'ignore_system_python_path': 'STRICT_PYTHON_PATH', 'python_version_slice': 'PYTHON_VERSION_SLICE', 'clear_zipapps_cache': 'CLEAR_ZIPAPPS_CACHE', 'clear_zipapps_self': 'CLEAR_ZIPAPPS_SELF', 'unzip_chmod': 'UNZIP_CHMOD',
-
2022.03.17
- fix
--chmodforget the parent folder and.pyzself
- fix
-
2022.03.13
- check is_zipfile before activate
--ensure-zipappsas the alias of--activate-zipapps- fix the conflict between
-dmode and-u - add
--chmodfor unzipped files, fix #17
-
2022.03.10
- fix bug of
sys.pathmissing the parent of__file__while runningpython venv.pyz xx.py
- fix bug of
-
2022.03.07
- fix bug of version
2022.03.06- file xxx.template not found
- fix bug of version
-
2022.03.06
- rename some template files
- remove duplicated sys.path
- only activate zipped file, ingore the folders path
-
2022.03.02
- fix #16 pip import at old version
- add environment variable
CLEAR_ZIPAPPS_CACHEfor argclear_zipapps_cache zipapps.create_appnow has the exact parameters
-
2022.02.27
- add
--unzip-exclude, -ue- The opposite of
--unzip/-uwhich will not be unzipped, should be used with--unzip/-u. - Can be overwrite with environment variable
ZIPAPPS_UNZIP_EXCLUDE
- The opposite of
- add
-
2022.01.17
- add runtime arg
--activate-zipappsto ensure cache folder and do nothing - fix pip install for
-d(lazy install mode) withpip.mainfunction instead of subprocess - tell how to use
zipappswithnuitka
- add runtime arg
-
2021.11.01
- add
--clear-zipapps-cache/-czccommand line arg- Clear the zipapps cache folder after running, but maybe failed for .pyd/.so files.
- move the
constto the top ofensure_zipappstemplate.
- add
-
2021.09.22
- fix
--layer-mode-prefixnot work for-afiles
- fix
-
2021.09.21
layer-modefor serverless layers- https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html
- this mode will not activate the sys.path of this zip file.
python3 -m zipapps --layer-mode --layer-mode-prefix=python -o layer.zip -r requirements.txt- maybe add
-ccto generate the.pycfiles
- maybe add
-
2021.05.17
lazy-installmode will re-install packages while pip args including-Uor--upgrade.
-
2021.04.29
- add arg
--ensure-pipfor embed-python(windows) or other python versions which have nopipinstalled butlazy-installmode is enabled.
- add arg
-
2021.04.24
- remove conflict command args with
pip- remove
--compilearg, it will only work forpip -cwill not be removed,pip install -ccould usepip install --constraintinstead
- remove
- Refactor for OOP(Object-oriented programming)
- Will be used as the first stable version and end experimental phase
- remove
Configclass - show version info and other logs in stderr
compiledshould not be True whileunzipis null- a successful message has been added to the tail of logs:
Successfully built
- remove conflict command args with
-
2021.04.23
- lazy install mode:
- fix bug: python version conflict
- remove repeated installation
pip installwill execute only once for samepip_args_md5pip_args_md5comes from pip_args string, including bytes of related files(likerequirements.txt)
- logs of
pip installwill be redirected, fromstdouttostderr
- lazy install mode:
-
2021.04.22
- update the lazy_install mode (
-d)- simple use case:
-
python -m zipapps -d six
-
python app.pyz -c "import six;print(six.__file__)"
-
- it will not
rmtreethe_zipapps_lazy_pipfolder for new build- if you need to upgrade those requirements, use
-Uarg of pip - lazy_install mode will install requirements with
pip installwhile first running- so you can just run like this to init its installation(
-mnot set):python3 app.pyz -V
- so you can just run like this to init its installation(
- if you need to upgrade those requirements, use
- for now,
-dis to server for the cross-platform and cross-python-version app- pip target path is separated from different python version and system platform
- python version accurity can be reset with
-pva 5, defaults to 2, means 3.8.3 and 3.8.4 are same3.8
- python version accurity can be reset with
- pip target path is separated from different python version and system platform
- simple use case:
- update the lazy_install mode (
-
2021.04.11
- add
--sys-pathsto include new paths of sys.path- support TEMP/HOME/SELF prefix, separated by commas
- sometimes be used for separating pyz code from requirements
- requirements often be installed by
pip install xxx -t $SOME_PATH
- requirements often be installed by
- add
-
2021.04.01
- use
ensurepipinstead of installpipwhile running withlazy-install unzip_pathhas been set toSELF/zipapps_cacheby default whenlazy_installisTrue
- use
-
2021.03.31
- use
sys.stderr.writeinstead ofwarnings.warn - support
-dfor lazy pip install- example:
python3 -m zipapps -d bottle -r requirements.txt - the
bottleand other packages ofrequirements.txtwill be install while first running - this is useful for cross-platform distributions, which means
pyzfile size is much smaller
- example:
- use
-
2021.03.02
- fix auto-unzip nonsense folders while
-u AUTObut no need to unzip any files
- fix auto-unzip nonsense folders while
-
2021.01.29
- fix packaging zipapps self
python3 -m zipapps -m zipapps.__main__:main -a zipapps -o zipapps.pyz
- add
zipapps.pyztoreleasepage
- fix packaging zipapps self
-
2021.01.28
- fix bug: run
.pyfile with run_path missing sys.argvpython3 app.pyz xxx.py -a -b -c
- fix bug: run
-
2021.01.11
- add
--zipappsarg while building pyz files- to activate some venv pyz with given paths while running it
- also support
TEMP/HOME/SELFprefix, these internal variables are still runtime args.
- add
-
2020.12.27
- Combile multiple
pyzfiles, do like this:- python3 -m zipapps -o six.pyz six
- python3 -m zipapps -o psutil.pyz -u AUTO psutil
- python3 six.pyz --zipapps=psutil.pyz -c "import six,psutil;print(six.file, psutil.file)"
- Combile multiple
-
2020.12.23
--unzipsupport auto-check by-u AUTO, alias for--unzip=AUTO_UNZIP- fix
run_modulebug while running./app.pyz -m module
-
2020.12.21
- now will not run a new subprocess in most cases.
- using
runpy.run_pathandrunpy.run_module - and using
subprocess.runinstead ofsubprocess.call
- using
- now will not run a new subprocess in most cases.
-
2020.12.13
--unzipsupport complete path--unzipsupport auto-check by--unzip=AUTO_UNZIP
-
2020.11.23
- add
activate_zipappsto activate zipappsPYTHONPATHeasily
- add
-
2020.11.21
- reset unzip_path as the parent folder to unzip files
- so the cache path will be like
./zipapps_cache/app/forapp.pyz, - this is different from old versions.
- so the cache path will be like
- add environment variable
ZIPAPPS_CACHEfor argunzip_path - add environment variable
ZIPAPPS_UNZIPfor argunzip
- reset unzip_path as the parent folder to unzip files