ℹ️ Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | PASS | download_stamp > now() - 6 MONTH | 2.3 months ago |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | PASS | meta_canonical IS NULL OR = '' OR = src_unparsed | Not set |
| Property | Value |
|---|---|
| URL | https://docs-python.ru/standart-library/modul-zipapp-python/sozdanie-ispolnjaemogo-fajla-windows/ |
| Last Crawled | 2026-02-05 22:24:48 (2 months ago) |
| First Indexed | 2023-06-08 06:31:15 (2 years ago) |
| HTTP Status Code | 200 |
| Meta Title | Создание исполняемого Python файла для Windows |
| Meta Description | В Windows регистрация расширения .pyz не является обязательной и кроме того, есть определенные моменты, при которых зарегистрированные расширения не распознаются "прозрачно". |
| Meta Canonical | null |
| Boilerpipe Text | В Windows регистрация
расширения
.pyz
не является обязательной и кроме того, есть определенные моменты, при которых зарегистрированные расширения не распознаются "прозрачно". Самый простой пример команда
subprocess.run(['myapp'])
не найдет приложение и нужно явно указать расширение
.pyz
. Поэтому
в Windows часто предпочтительнее из
zipapp
создать исполняемый файл
. Это относительно просто, хотя для этого нужен компилятор языка Си.
Основной подход основан на том факте, что к zip-файлам могут добавляться произвольные данные и к файлам
exe
в Windows так же могут добавляться произвольные данные. Поэтому, создав подходящий модуль запуска и прикрепив файл
приложения
.pyz
к его концу, можно получить исполняемый файл, который будет нормально работать в Windows.
Подходящий модуль запуска может быть таким
:
#define Py_LIMITED_API 1
#include
"Python.h"
#define WIN32_LEAN_AND_MEAN
#include
<windows.h>
#ifdef WINDOWS
int
WINAPI
wWinMain
(
HINSTANCE
hInstance
,
/* Обращение к текущему экземпляру */
HINSTANCE
hPrevInstance
,
/* Обращение к предыдущему экземпляру */
LPWSTR
lpCmdLine
,
/* Указатель на командную строку */
int
nCmdShow
/* Показать состояние окна */
)
#else
int
wmain
()
#endif
{
wchar_t
**
myargv
=
_alloca
((
__argc
+
1
)
*
sizeof
(
wchar_t
*
));
myargv
[
0
]
=
__wargv
[
0
];
memcpy
(
myargv
+
1
,
__wargv
,
__argc
*
sizeof
(
wchar_t
*
));
return
Py_Main
(
__argc
+
1
,
myargv
);
}
Если определить препроцессор обработки окон WINDOWS, это сгенерирует исполняемый файл GUI, а без него - исполняемый консольный файл.
Чтобы скомпилировать исполняемый файл, можно либо просто использовать стандартные инструменты командной строки
MSVC
, либо воспользоваться тем, что
distutils
знает, как скомпилировать исходный код Python:
from
distutils.ccompiler
import
new_compiler
import
distutils.sysconfig
import
sys
import
os
from
pathlib
import
Path
def
compile
(
src
):
src
=
Path
(
src
)
cc
=
new_compiler
()
exe
=
src
.
stem
cc
.
add_include_dir
(
distutils
.
sysconfig
.
get_python_inc
())
cc
.
add_library_dir
(
os
.
path
.
join
(
sys
.
base_exec_prefix
,
'libs'
))
# First the CLI executable
objs
=
cc
.
compile
([
str
(
src
)])
cc
.
link_executable
(
objs
,
exe
)
# Now the GUI executable
cc
.
define_macro
(
'WINDOWS'
)
objs
=
cc
.
compile
([
str
(
src
)])
cc
.
link_executable
(
objs
,
exe
+
'w'
)
if
__name__
==
"__main__"
:
compile
(
"zastub.c"
)
В результате запускается «Limited ABI», поэтому он будет работать без изменений с любой версией Python 3.x. Все, что ему нужно, это чтобы Python
python3.dll
был в
PATH
пользователя.
Для полностью автономного дистрибутива вы можете собрать файл инсталятора
install.exe
, в котором будут находится дистрибутив Python вместе с приложением, что будет работать на любом ПК с соответствующей архитектурой. |
| Markdown | [**Python3**](https://docs-python.ru/ "Python3, наиболее полный справочник/самоучитель.")
- [Справочник](https://docs-python.ru/tutorial/ "Справочник по языку Python3 на русском языке")
- [Библиотека](https://docs-python.ru/standart-library/ "Документация по стандартной библиотеки языка Python3")
- [Пакеты](https://docs-python.ru/packages/ "Сторонние популярные пакеты и модули")
- [Технологии](https://docs-python.ru/other/ "Cмежные технологии")
- 🌙
- [Telegram](https://t.me/docs_python_ru "Telegram-канал сайта docs-python.ru")
- [Поиск](https://docs-python.ru/search/ "Поиск по сайту docs-python.ru")
- Контакты
Сообщить об ошибке.
# Создание исполняемого Python файла для Windows
1. [Стандартная библиотека Python](https://docs-python.ru/standart-library/ "Стандартная библиотека Python")
2. [Модуль zipapp в Python, исполняемые zip-архивы](https://docs-python.ru/standart-library/modul-zipapp-python/ "Исполняемые zip-архивы Python")
3. Создание исполняемого Python файла для Windows
В Windows регистрация [расширения `.pyz`](https://docs-python.ru/standart-library/modul-zipapp-python/ "Модуль zipapp в Python, исполняемые zip-архивы.") не является обязательной и кроме того, есть определенные моменты, при которых зарегистрированные расширения не распознаются "прозрачно". Самый простой пример команда `subprocess.run(['myapp'])` не найдет приложение и нужно явно указать расширение `.pyz`. Поэтому [в Windows часто предпочтительнее из `zipapp` создать исполняемый файл](https://docs-python.ru/standart-library/modul-zipapp-python/sozdanie-ispolnjaemogo-fajla-windows/ "Создание исполняемого Python файла для Windows."). Это относительно просто, хотя для этого нужен компилятор языка Си.
Основной подход основан на том факте, что к zip-файлам могут добавляться произвольные данные и к файлам `exe` в Windows так же могут добавляться произвольные данные. Поэтому, создав подходящий модуль запуска и прикрепив файл [приложения `.pyz`](https://docs-python.ru/standart-library/modul-zipapp-python/ "Модуль zipapp в Python, исполняемые zip-архивы.") к его концу, можно получить исполняемый файл, который будет нормально работать в Windows.
*Подходящий модуль запуска может быть таким*:
```
#define Py_LIMITED_API 1
#include "Python.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#ifdef WINDOWS
int WINAPI wWinMain(
HINSTANCE hInstance, /* Обращение к текущему экземпляру */
HINSTANCE hPrevInstance, /* Обращение к предыдущему экземпляру */
LPWSTR lpCmdLine, /* Указатель на командную строку */
int nCmdShow /* Показать состояние окна */
)
#else
int wmain()
#endif
{
wchar_t **myargv = _alloca((__argc + 1) * sizeof(wchar_t*));
myargv[0] = __wargv[0];
memcpy(myargv + 1, __wargv, __argc * sizeof(wchar_t *));
return Py_Main(__argc+1, myargv);
}
```
Если определить препроцессор обработки окон WINDOWS, это сгенерирует исполняемый файл GUI, а без него - исполняемый консольный файл.
Чтобы скомпилировать исполняемый файл, можно либо просто использовать стандартные инструменты командной строки `MSVC`, либо воспользоваться тем, что `distutils` знает, как скомпилировать исходный код Python:
```
from distutils.ccompiler import new_compiler
import distutils.sysconfig
import sys
import os
from pathlib import Path
def compile(src):
src = Path(src)
cc = new_compiler()
exe = src.stem
cc.add_include_dir(distutils.sysconfig.get_python_inc())
cc.add_library_dir(os.path.join(sys.base_exec_prefix, 'libs'))
# First the CLI executable
objs = cc.compile([str(src)])
cc.link_executable(objs, exe)
# Now the GUI executable
cc.define_macro('WINDOWS')
objs = cc.compile([str(src)])
cc.link_executable(objs, exe + 'w')
if __name__ == "__main__":
compile("zastub.c")
```
В результате запускается «Limited ABI», поэтому он будет работать без изменений с любой версией Python 3.x. Все, что ему нужно, это чтобы Python `python3.dll` был в `PATH` пользователя.
Для полностью автономного дистрибутива вы можете собрать файл инсталятора `install.exe`, в котором будут находится дистрибутив Python вместе с приложением, что будет работать на любом ПК с соответствующей архитектурой.
#### Содержание раздела:
- [КРАТКИЙ ОБЗОР МАТЕРИАЛА.](https://docs-python.ru/standart-library/modul-zipapp-python/brief-description/ "Краткий обзор раздела: Модуль zipapp в Python, исполняемые zip-архивы")
- [Интерфейс командной строки модуля zipapp](https://docs-python.ru/standart-library/modul-zipapp-python/interfejs-komandnoj-stroki-modulja-zipapp/ "Создание исполняемого архива Python с использованием командной строки")
- [Функции create\_archive() модуля zipapp](https://docs-python.ru/standart-library/modul-zipapp-python/funktsii-create-archive-modulja-zipapp/ "Программное создание архива приложения Python")
- [Функция get\_interpreter() модуля zipapp](https://docs-python.ru/standart-library/modul-zipapp-python/funktsija-get-interpreter-modulja-zipapp/ "Узнать интерпретатор, используемый архивом приложения")
- [Тонкости распространения исполняемых приложений Python](https://docs-python.ru/standart-library/modul-zipapp-python/tonkosti-rasprostranenija-ispolnjaemyh-prilozhenij/ "Выбор интерпретатора для автономных приложений Python")
- [Автономное приложение на Python с помощью zipapp](https://docs-python.ru/standart-library/modul-zipapp-python/avtonomnoe-prilozhenie-pomoschju-zipapp/ "Создание автономных приложений с помощью zipapp")
- [Создание исполняемого Python файла для Windows](https://docs-python.ru/standart-library/modul-zipapp-python/sozdanie-ispolnjaemogo-fajla-windows/ "Создание исполняемого Python файла для Windows")
Вверх
[DOCS-Python.ru](https://docs-python.ru/ "Справочная документация по языку Python3.")™, 2026 г.
(Внимание\! При копировании материала ссылка на источник обязательна)
[@docs\_python\_ru](https://t.me/docs_python_ru "Telegram-канал сайта docs-python.ru")
 |
| Readable Markdown | В Windows регистрация [расширения `.pyz`](https://docs-python.ru/standart-library/modul-zipapp-python/ "Модуль zipapp в Python, исполняемые zip-архивы.") не является обязательной и кроме того, есть определенные моменты, при которых зарегистрированные расширения не распознаются "прозрачно". Самый простой пример команда `subprocess.run(['myapp'])` не найдет приложение и нужно явно указать расширение `.pyz`. Поэтому [в Windows часто предпочтительнее из `zipapp` создать исполняемый файл](https://docs-python.ru/standart-library/modul-zipapp-python/sozdanie-ispolnjaemogo-fajla-windows/ "Создание исполняемого Python файла для Windows."). Это относительно просто, хотя для этого нужен компилятор языка Си.
Основной подход основан на том факте, что к zip-файлам могут добавляться произвольные данные и к файлам `exe` в Windows так же могут добавляться произвольные данные. Поэтому, создав подходящий модуль запуска и прикрепив файл [приложения `.pyz`](https://docs-python.ru/standart-library/modul-zipapp-python/ "Модуль zipapp в Python, исполняемые zip-архивы.") к его концу, можно получить исполняемый файл, который будет нормально работать в Windows.
*Подходящий модуль запуска может быть таким*:
```
#define Py_LIMITED_API 1
#include "Python.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#ifdef WINDOWS
int WINAPI wWinMain(
HINSTANCE hInstance, /* Обращение к текущему экземпляру */
HINSTANCE hPrevInstance, /* Обращение к предыдущему экземпляру */
LPWSTR lpCmdLine, /* Указатель на командную строку */
int nCmdShow /* Показать состояние окна */
)
#else
int wmain()
#endif
{
wchar_t **myargv = _alloca((__argc + 1) * sizeof(wchar_t*));
myargv[0] = __wargv[0];
memcpy(myargv + 1, __wargv, __argc * sizeof(wchar_t *));
return Py_Main(__argc+1, myargv);
}
```
Если определить препроцессор обработки окон WINDOWS, это сгенерирует исполняемый файл GUI, а без него - исполняемый консольный файл.
Чтобы скомпилировать исполняемый файл, можно либо просто использовать стандартные инструменты командной строки `MSVC`, либо воспользоваться тем, что `distutils` знает, как скомпилировать исходный код Python:
```
from distutils.ccompiler import new_compiler
import distutils.sysconfig
import sys
import os
from pathlib import Path
def compile(src):
src = Path(src)
cc = new_compiler()
exe = src.stem
cc.add_include_dir(distutils.sysconfig.get_python_inc())
cc.add_library_dir(os.path.join(sys.base_exec_prefix, 'libs'))
# First the CLI executable
objs = cc.compile([str(src)])
cc.link_executable(objs, exe)
# Now the GUI executable
cc.define_macro('WINDOWS')
objs = cc.compile([str(src)])
cc.link_executable(objs, exe + 'w')
if __name__ == "__main__":
compile("zastub.c")
```
В результате запускается «Limited ABI», поэтому он будет работать без изменений с любой версией Python 3.x. Все, что ему нужно, это чтобы Python `python3.dll` был в `PATH` пользователя.
Для полностью автономного дистрибутива вы можете собрать файл инсталятора `install.exe`, в котором будут находится дистрибутив Python вместе с приложением, что будет работать на любом ПК с соответствующей архитектурой. |
| Shard | 78 (laksa) |
| Root Hash | 13972730510020591678 |
| Unparsed URL | ru,docs-python!/standart-library/modul-zipapp-python/sozdanie-ispolnjaemogo-fajla-windows/ s443 |