TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #207 2.52K
Вы уже знаете, что можно добавить ZIP архив в PYTHONPATH и использовать его как библиотеку.
У Python есть еще одна интересная стандартная библиотека zipapp. Она поможет создать стендалон (или почти стендалон) приложение с помощью ZIP архива.
На самом деле мы получим всё тот же архив но с некоторыми дополнениями

🔸 У него будет точка входа, то есть функция, которая запускается при старте приложения
🔸 У архива будет расширение PYZ, хотя, это тот же ZIP
🔸 Архив можно сделать исполняемым как простое приложение (только для Linux)

Давайте создадим простое приложение. Можно указать директорию или файл. Удобней всего делать приложение из директории. При этом все файлы внутри указанного пути попадут в архив.
Вот такая структура приложения у нас есть:

myapp/
app.py

А это код приложения

# app.py
def main():
print('START APP')

Создаём ZIP-приложение:

python3 -m zipapp myapp

Скорее всего вы получите ошибку, так как не указана точка входа.

ZipAppError: Archive has no entry point

Чтобы это исправить следует в директории рядом с app.py создать файл __main__.py. Именно он будет выполняться при старте приложения. Либо просто указать флагом --main функцию внутри архива которую надо выполнить, и zipapp сам создаст этот файл с нужными импортами.

python3 -m zipapp myapp --main=app:main

Мы получим файл myapp.pyz который можно запустить с помощью Python

$ python3 ./myapp.pyz
START APP

Чтобы запускать это приложение просто по даблклику без дописывания python, следует сделать файл исполняемым и в начало дописать так называемый shebang line (только для Linux).
Вы скорее всего видели их в Bash-скриптах. Там написано с помощью какого интерпретатора запускать данный скрипт. В нашем случае надо дописать в начало ZIP-файла такую строку:

#!/usr/bin/env python3

Это можно сделать с помощью флага --python

python3 -m zipapp myapp --main=app:main --python '/usr/bin/env python3'

Теперь в начало архива добавится нужная строка а сам файл станет исполняемым.

А вот так можно добавить эту строку ручками после создания архива

echo '#!/usr/bin/env python3' > myapp2.pyz
cat ./myapp.pyz >> myapp2.pyz
chmod +x myapp2.pyz

Остаётся добавить флаг --compress чтобы сжать архив.

python3 -m zipapp myapp --main=app:main --python '/usr/
bin/env python3' --compress

Можно сказать, что наше элементарное приложение готово😎

Что ещë можно сделать?

▫️Как видите, это не полноценный стендалон. Для запуска приложения всё ещë требуется Python в системе. Чтобы ваше приложение завелось на чистой системе можно добавить в директорию myapp все зависимости приложения, то есть любые нестандартные внешние библиотеки. Для работы приложения потребуется только сам Python.

▫️Можно добавлять любые файлы ресурсов. Для их использования потребуется извлечение этих файлов из архива. Например, если закинуть картинку в корень myapp

myapp/
app.py
image.jpg

то достать её можно так:

import pkgutil
# достаём данные
img_data = pkgutil.get_data('__main__', 'image.jpg')
# сохраняем в файл
open(filename, 'wb').write(img_data)

▫️На самом деле исполняемый файл можно сделать и для Windows, но там всё несколько сложней 😖

#tricks
Telegram Python Заметки В PYTHONPATH или в sys.path можно указать путь к ZIP архиву с Python-модулями и пакетами. export PYTHONPATH=~/my_py_archive.zip Всё будет выглядеть так, как если бы архив был директорией. Можно также указать вложенную директорию внутри архива. export…
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →