windows.md
1> **Источник:** https://python-all.ru/3.13/using/windows.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 4. Использование Python в Windows89Этот документ содержит обзор особенностей поведения Windows, которые следует учитывать при использовании Python в Microsoft Windows.1011В отличие от большинства Unix-систем и служб, Windows не включает поддерживаемую системой установку Python. Чтобы сделать Python доступным, команда CPython на протяжении многих лет собирает установщики Windows для каждого [релиза](https://python-all.ru/3.13/using/windows.html). Эти установщики в первую очередь предназначены для установки Python для одного пользователя – основной интерпретатор и библиотека используются одним пользователем. Установщик также может установить Python для всех пользователей одного компьютера; для локального распространения приложений доступен отдельный ZIP-файл.1213Как указано в [**PEP 11**](https://python-all.ru/3.13/using/windows.html), релиз Python поддерживает платформу Windows только до тех пор, пока Microsoft оказывает ей расширенную поддержку. Это означает, что Python 3.13 поддерживает Windows 8.1 и новее. Если вам требуется поддержка Windows 7, установите Python 3.8.1415Для Windows доступно несколько различных установщиков, каждый со своими преимуществами и недостатками.1617[Полный установщик](https://python-all.ru/3.13/using/windows.html#windows-full) содержит все компоненты и является лучшим выбором для разработчиков, использующих Python для любого типа проектов.1819[Пакет из Microsoft Store](https://python-all.ru/3.13/using/windows.html#windows-store) – это простая установка Python, подходящая для запуска скриптов и пакетов, а также использования IDLE и других сред разработки. Он требует Windows 10 и выше, но может быть безопасно установлен без нарушения работы других программ. Он также предоставляет множество удобных команд для запуска Python и его инструментов.2021[Пакеты nuget.org](https://python-all.ru/3.13/using/windows.html#windows-nuget) – это облегчённые установки, предназначенные для систем непрерывной интеграции. Их можно использовать для сборки пакетов Python или запуска скриптов, но они не обновляются и не имеют средств пользовательского интерфейса.2223[Встраиваемый пакет](https://python-all.ru/3.13/using/windows.html#windows-embeddable) – это минимальный пакет Python, подходящий для встраивания в более крупное приложение.2425## 4.1. Полный установщик2627### 4.1.1. Шаги установки2829Доступны для загрузки четыре установщика Python 3.13 – по два для 32-разрядной и 64-разрядной версий интерпретатора. *Веб-установщик* – это небольшой первоначальный загрузчик, который автоматически загружает необходимые компоненты по мере необходимости. *Автономный установщик* включает все компоненты, необходимые для стандартной установки, и требует подключения к интернету только для дополнительных функций. См. [Установка без загрузки](https://python-all.ru/3.13/using/windows.html#install-layout-option) для других способов избежать загрузки во время установки.3031После запуска установщика можно выбрать один из двух вариантов:32333435Если вы выберете «Установить сейчас»:3637- Вам *не* потребуются права администратора (если только не требуется системное обновление библиотеки времени выполнения C или вы не устанавливаете [Запускатель Python для Windows](https://python-all.ru/3.13/using/windows.html#launcher) для всех пользователей).38- Python будет установлен в ваш пользовательский каталог39- [Запускатель Python для Windows](https://python-all.ru/3.13/using/windows.html#launcher) будет установлен в соответствии с опцией в нижней части первой страницы.40- Стандартная библиотека, тестовый набор, средство запуска и pip будут установлены41- Если выбрано, каталог установки будет добавлен в ваши `PATH`42- Ярлыки будут видны только текущему пользователю4344Выбор «Настраиваемая установка» позволит выбрать компоненты для установки, расположение установки и другие параметры или действия после установки. Чтобы установить отладочные символы или двоичные файлы, нужно использовать этот вариант.4546Для установки для всех пользователей следует выбрать «Настраиваемая установка». В этом случае:4748- Может потребоваться предоставить учетные данные администратора или одобрение49- Python будет установлен в каталог Program Files50- [Запускатель Python для Windows](https://python-all.ru/3.13/using/windows.html#launcher) будет установлен в каталог Windows.51- Дополнительные компоненты можно выбрать во время установки52- Стандартная библиотека может быть предварительно скомпилирована в байт-код53- Если выбрано, каталог установки будет добавлен в системные `PATH`54- Ярлыки доступны для всех пользователей5556### 4.1.2. Удаление ограничения MAX\_PATH5758Исторически сложилось так, что в Windows длина пути была ограничена 260 символами. Это означало, что пути длиннее этого значения не распознавались и приводили к ошибкам.5960В последних версиях Windows это ограничение можно расширить до приблизительно 32 000 символов. Администратору необходимо активировать групповую политику «Enable Win32 long paths» или установить значение `LongPathsEnabled` равным `1` в разделе реестра `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`.6162Это позволяет функции [`open()`](https://python-all.ru/3.13/library/functions.html#open), модулю [`os`](https://python-all.ru/3.13/library/os.html#module-os) и большинству других функций работы с путями принимать и возвращать пути длиннее 260 символов.6364После изменения указанного параметра никаких дополнительных настроек не требуется.6566Изменено в версии 3.6: В Python добавлена поддержка длинных путей.6768### 4.1.3. Установка без интерфейса6970Все параметры, доступные в графическом интерфейсе установщика, также можно указать из командной строки, что позволяет сценариям установки воспроизводить установку на многих компьютерах без участия пользователя. Эти параметры также можно задать, не отключая интерфейс, чтобы изменить некоторые значения по умолчанию.7172Следующие параметры (определяемые при запуске установщика с `/?`) можно передать установщику:7374| Имя | Описание |75| --- | --- |76| /passive | отображает ход выполнения без участия пользователя |77| /quiet | устанавливает или удаляет без отображения какого-либо интерфейса |78| /simple | запрещает настройку пользователем |79| /uninstall | удаляет Python (без подтверждения) |80| /layout \[directory\] | предварительно загружает все компоненты |81| /log \[filename\] | указывает расположение файлов журнала |8283Все остальные параметры передаются в виде `name=value`, где значение обычно `0` для отключения функции, `1` для включения функции или путь. Полный список доступных параметров приведён ниже.8485| Имя | Описание | По умолчанию |86| --- | --- | --- |87| InstallAllUsers | Выполняет установку для всех пользователей системы. | 0 |88| TargetDir | Каталог установки | Выбирается на основе InstallAllUsers |89| DefaultAllUsersTargetDir | Каталог установки по умолчанию для установки для всех пользователей | `%ProgramFiles%\Python X.Y` или `%ProgramFiles(x86)%\Python X.Y` |90| DefaultJustForMeTargetDir | Каталог установки по умолчанию для установки только для текущего пользователя | `%LocalAppData%\Programs\Python\PythonXY` или `%LocalAppData%\Programs\Python\PythonXY-32` или `%LocalAppData%\Programs\Python\PythonXY-64` |91| DefaultCustomTargetDir | Каталог пользовательской установки по умолчанию, отображаемый в интерфейсе | (пусто) |92| AssociateFiles | Создавать ассоциации файлов, если также установлен загрузчик. | 1 |93| CompileAll | Компилировать все файлы `.py` в `.pyc`. | 0 |94| PrependPath | Добавлять каталоги установки и Scripts в начало `PATH` и добавлять `.PY` в `PATHEXT` | 0 |95| AppendPath | Добавлять каталоги установки и Scripts в конец `PATH` и добавлять `.PY` в `PATHEXT` | 0 |96| Ярлыки | Создавать ярлыки для интерпретатора, документации и IDLE, если они установлены. | 1 |97| Include\_doc | Установить руководство Python | 1 |98| Include\_debug | Установить отладочные бинарные файлы | 0 |99| Include\_dev | Установить заголовочные файлы и библиотеки для разработки. Пропуск этого может привести к неработоспособной установке. | 1 |100| Include\_exe | Установить `python.exe` и связанные файлы. Пропуск этого может привести к неработоспособной установке. | 1 |101| Include\_launcher | Установить [средство запуска Python для Windows](https://python-all.ru/3.13/using/windows.html#launcher). | 1 |102| InstallLauncherAllUsers | Устанавливает загрузчик для всех пользователей. Также требует установки `Include_launcher` в значение 1 | 1 |103| Include\_lib | Установить стандартную библиотеку и модули расширения. Пропуск этого может привести к неработоспособной установке. | 1 |104| Include\_pip | Установить встроенные pip и setuptools | 1 |105| Include\_symbols | Установить отладочные символы (`*.pdb`) | 0 |106| Include\_tcltk | Установить поддержку Tcl/Tk и IDLE | 1 |107| Include\_test | Установить набор тестов стандартной библиотеки | 1 |108| Include\_tools | Установить служебные скрипты | 1 |109| LauncherOnly | Устанавливает только лаунчер. Это переопределит большинство других параметров. | 0 |110| SimpleInstall | Отключить большую часть интерфейса установки | 0 |111| SimpleInstallDescription | Пользовательское сообщение, которое отображается при использовании упрощённого интерфейса установки. | (пусто) |112113Например, для автоматической установки Python по умолчанию в общесистемном режиме можно использовать следующую команду (из командной строки с правами администратора):114115```text116python-3.9.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0117```118119Чтобы пользователи могли легко установить личную копию Python без набора тестов, можно предоставить ярлык со следующей командой. Она отобразит упрощённую начальную страницу и запретит настройку:120121```text122python-3.9.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=0123 SimpleInstall=1 SimpleInstallDescription="Just for me, no test suite."124```125126(Обратите внимание: отказ от лаунчера также отключает ассоциации файлов, и это рекомендуется только для установок для одного пользователя при наличии общесистемной установки, включающей лаунчер.)127128Перечисленные выше параметры также можно указать в файле с именем `unattend.xml`, расположенном рядом с исполняемым файлом. Этот файл задаёт список параметров и значений. Если значение указано как атрибут, оно будет преобразовано в число, если это возможно. Значения, указанные как текст элемента, всегда остаются строками. В этом примере файл задаёт те же параметры, что и в предыдущем примере:129130```xml131<Options>132 <Option Name="InstallAllUsers" Value="no" />133 <Option Name="Include_launcher" Value="0" />134 <Option Name="Include_test" Value="no" />135 <Option Name="SimpleInstall" Value="yes" />136 <Option Name="SimpleInstallDescription">Just for me, no test suite</Option>137</Options>138```139140### 4.1.4. Установка без загрузки141142Поскольку некоторые возможности Python не входят в начальный загружаемый установщик, для выбора этих возможностей может потребоваться подключение к интернету. Чтобы избежать этого, все возможные компоненты можно загрузить по требованию, создав полную *сборку*, которая больше не будет требовать подключения к интернету независимо от выбранных возможностей. Обратите внимание, что такая загрузка может быть больше необходимой, но при большом количестве установок очень полезно иметь локально кэшированную копию.143144Выполните следующую команду в командной строке, чтобы загрузить все возможные необходимые файлы. Не забудьте заменить `python-3.9.0.exe` на фактическое имя вашего установщика и создавать сборки в отдельных каталогах, чтобы избежать конфликтов между файлами с одинаковыми именами.145146```text147python-3.9.0.exe /layout [optional target directory]148```149150Также можно указать параметр `/quiet`, чтобы скрыть индикатор выполнения.151152### 4.1.5. Изменение установки153154После установки Python можно добавлять или удалять компоненты через средство «Программы и компоненты», входящее в состав Windows. Выберите запись Python и выберите «Удаление/Изменение», чтобы открыть установщик в режиме обслуживания.155156«Изменить» позволяет добавлять или удалять компоненты, изменяя флажки – неизменённые флажки ничего не устанавливают и не удаляют. Некоторые параметры нельзя изменить в этом режиме, например, каталог установки; чтобы изменить их, потребуется полностью удалить и затем переустановить Python.157158«Восстановить» проверяет все файлы, которые должны быть установлены в соответствии с текущими настройками, и заменяет те, которые были удалены или изменены.159160«Удаление» полностью удалит Python, за исключением [средства запуска Python для Windows](https://python-all.ru/3.13/using/windows.html#launcher), которое имеет собственную запись в разделе «Программы и компоненты».161162### 4.1.6. Установка свободно-поточных сборок163164Добавлено в версии 3.13: (Экспериментально)165166> **Примечание**167>168> Все описанное в этом разделе считается экспериментальным и может измениться в будущих выпусках.169170Чтобы установить предварительно собранные двоичные файлы со включённой свободной многопоточностью (см. [**PEP 703**](https://python-all.ru/3.13/using/windows.html)), необходимо выбрать «Выборочная установка». На второй странице параметров находится флажок «Загрузить двоичные файлы со свободной многопоточностью».171172173174Выбор этой опции загрузит и установит дополнительные двоичные файлы в ту же директорию, что и основная установка Python. Главный исполняемый файл называется `python3.13t.exe`, а другие двоичные файлы получают суффикс `t` или полный суффикс ABI. Исходные файлы Python и встроенные сторонние зависимости являются общими с основной установкой.175176Free-threaded версия регистрируется как обычная установка Python с тегом `3.13t` (с суффиксом `-32` или `-arm64`, как обычно для этих платформ). Это позволяет инструментам обнаруживать её, а [средству запуска Python для Windows](https://python-all.ru/3.13/using/windows.html#launcher) – поддерживать `py.exe -3.13t`. Обратите внимание, что средство запуска будет интерпретировать `py.exe -3` (или shebang `python3`) как «последнюю установку 3.x», что приведет к предпочтению free-threaded двоичных файлов обычным, в то время как `py.exe -3.13` – нет. Если используется краткий стиль параметра, возможно, стоит не устанавливать free-threaded двоичные файлы на данный момент.177178Чтобы указать параметр установки в командной строке, используйте `Include_freethreaded=1`. Инструкции по предварительной загрузке дополнительных двоичных файлов для автономной установки см. в разделе [Установка без загрузки](https://python-all.ru/3.13/using/windows.html#install-layout-option). Параметры включения отладочных символов и двоичных файлов также применяются к free-threaded сборкам.179180Двоичные файлы со свободной многопоточностью также доступны [на nuget.org](https://python-all.ru/3.13/using/windows.html#windows-nuget).181182## 4.2. Пакет Microsoft Store183184Добавлено в версии 3.7.2.185186Пакет из Microsoft Store представляет собой легко устанавливаемый интерпретатор Python, предназначенный в основном для интерактивного использования, например, студентами.187188Чтобы установить пакет, убедитесь, что у вас установлены последние обновления Windows 10, и найдите в приложении Microsoft Store «Python 3.13». Убедитесь, что выбранное приложение опубликовано Python Software Foundation, и установите его.189190> **Предупреждение**191>192> Python всегда доступен бесплатно в Microsoft Store. Если за него запрашивают оплату, выбран неверный пакет.193194После установки Python можно запустить, найдя его в меню «Пуск». Кроме того, он будет доступен из любого сеанса командной строки или PowerShell по команде `python`. Также pip и IDLE можно использовать, набрав `pip` или `idle`. IDLE также можно найти в меню «Пуск».195196Все три команды также доступны с суффиксами номера версии, например, как `python3.exe` и `python3.x.exe`, а также `python.exe` (где `3.x` – это конкретная версия, которую требуется запустить, например 3.13). Откройте «Управление псевдонимами выполнения приложений» через меню «Пуск», чтобы выбрать, какая версия Python связана с каждой командой. Рекомендуется убедиться, что `pip` и `idle` согласованы с выбранной версией `python`.197198Виртуальные окружения можно создать с помощью `python -m venv`, а затем активировать и использовать обычным образом.199200Если была установлена другая версия Python и добавлена в переменную `PATH`, она будет доступна как `python.exe`, а не из Microsoft Store. Для доступа к новой установке используйте `python3.exe` или `python3.x.exe`.201202Средство запуска `py.exe` обнаружит эту установку Python, но будет предпочитать установки из традиционного установщика.203204Чтобы удалить Python, откройте «Параметры» и используйте раздел «Приложения и возможности» или найдите Python в меню «Пуск» и выберите «Удалить» в контекстном меню. Удаление удалит все пакеты, установленные непосредственно в эту установку Python, но не затронет виртуальные окружения.205206### 4.2.1. Известные проблемы207208#### 4.2.1.1. Перенаправление локальных данных, реестра и временных путей209210Из-за ограничений, накладываемых на приложения Microsoft Store, сценарии Python могут не иметь полного доступа на запись к общим расположениям, таким как `TEMP` и реестр. Вместо этого будет выполняться запись в частную копию. Если необходимо изменить общие расположения, потребуется установить полный установщик.211212Во время выполнения Python будет использовать частную копию известных папок Windows и реестра. Например, если переменная окружения `%APPDATA%` равна `c:\Users\<user>\AppData\`, то при записи в `C:\Users\<user>\AppData\Local` будет произведена запись в `C:\Users\<user>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\Local\`.213214При чтении файлов Windows возвращает файл из частной папки, а если она не существует, то из реального каталога Windows. Например, чтение `C:\Windows\System32` возвращает содержимое `C:\Windows\System32` вместе с содержимым `C:\Program Files\WindowsApps\package_name\VFS\SystemX86`.215216Реальный путь любого существующего файла можно узнать с помощью [`os.path.realpath()`](https://python-all.ru/3.13/library/os.path.html#os.path.realpath):217218```python219>>> import os220>>> test_file = 'C:\\Users\\example\\AppData\\Local\\test.txt'221>>> os.path.realpath(test_file)222'C:\\Users\\example\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\Local\\test.txt'223```224225При записи в реестр Windows наблюдаются следующие особенности поведения:226227- Чтение из `HKLM\\Software` разрешено, и результаты объединяются с файлом `registry.dat` в пакете.228- Запись в `HKLM\\Software` не разрешена, если соответствующий ключ/значение существует, то есть изменение существующих ключей.229- Запись в `HKLM\\Software` разрешена при условии, что соответствующий ключ/значение не существует в пакете и у пользователя есть правильные разрешения на доступ.230231За дополнительными сведениями о технической основе этих ограничений обратитесь к документации Microsoft по упакованным приложениям с полным доверием, которая в настоящее время доступна по адресу [docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes](https://python-all.ru/3.13/using/windows.html)232233## 4.3. Пакеты nuget.org234235Добавлено в версии 3.5.2.236237Пакет nuget.org представляет собой среду Python уменьшенного размера, предназначенную для использования в системах непрерывной интеграции и сборки, в которых нет общесистемной установки Python. Хотя nuget является «менеджером пакетов для .NET», он также отлично работает для пакетов, содержащих инструменты времени сборки.238239Посетите [nuget.org](https://python-all.ru/3.13/using/windows.html) для получения самой актуальной информации об использовании nuget. Ниже приведена сводка, достаточная для разработчиков Python.240241Инструмент командной строки `nuget.exe` можно загрузить непосредственно из `https://aka.ms/nugetclidl`, например, с помощью curl или PowerShell. С помощью этого инструмента последняя версия Python для 64-разрядных или 32-разрядных машин устанавливается с помощью:242243```text244nuget.exe install python -ExcludeVersion -OutputDirectory .245nuget.exe install pythonx86 -ExcludeVersion -OutputDirectory .246```247248Чтобы выбрать конкретную версию, добавьте `-Version 3.x.y`. Выходной каталог можно изменить с `.`, и пакет будет установлен в подкаталог. По умолчанию подкаталог называется так же, как пакет, и без параметра `-ExcludeVersion` это имя будет включать установленную конкретную версию. Внутри подкаталога находится каталог `tools`, содержащий установку Python:249250```doscon251# Without -ExcludeVersion252> .\python.3.5.2\tools\python.exe -V253Python 3.5.2254255# With -ExcludeVersion256> .\python\tools\python.exe -V257Python 3.5.2258```259260В общем случае пакеты nuget не обновляются, и новые версии должны устанавливаться параллельно и ссылаться на них по полному пути. В качестве альтернативы можно вручную удалить каталог пакета и установить его снова. Многие системы CI делают это автоматически, если они не сохраняют файлы между сборками.261262Рядом с каталогом `tools` находится каталог `build\native`. Он содержит файл свойств MSBuild `python.props`, который можно использовать в проекте C++ для ссылки на установку Python. Включение этих параметров автоматически приведет к использованию заголовочных файлов и библиотек импорта в вашей сборке.263264Страницы с информацией о пакетах на nuget.org: [www.nuget.org/packages/python](https://python-all.ru/3.13/using/windows.html) для 64-разрядной версии, [www.nuget.org/packages/pythonx86](https://python-all.ru/3.13/using/windows.html) для 32-разрядной версии и [www.nuget.org/packages/pythonarm64](https://python-all.ru/3.13/using/windows.html) для версии ARM64.265266### 4.3.1. Пакеты со свободной многопоточностью267268Добавлено в версии 3.13: (Экспериментально)269270> **Примечание**271>272> Всё, описанное в этом разделе, считается экспериментальным и может измениться в будущих выпусках.273274Пакеты, содержащие свободно-поточные двоичные файлы, называются [python-freethreaded](https://python-all.ru/3.13/using/windows.html) для 64-битной версии, [pythonx86-freethreaded](https://python-all.ru/3.13/using/windows.html) для 32-битной версии и [pythonarm64-freethreaded](https://python-all.ru/3.13/using/windows.html) для ARM64 версии. Эти пакеты содержат как точку входа `python3.13t.exe`, так и `python.exe`, обе из которых работают в свободно-поточном режиме.275276## 4.4. Встраиваемый пакет277278Добавлено в версии 3.5.279280Встраиваемое распространение представляет собой ZIP-файл, содержащий минимальное окружение Python. Оно предназначено для использования в качестве части другого приложения, а не для прямого доступа конечных пользователей.281282После извлечения встраиваемое распространение (почти) полностью изолировано от системы пользователя, включая переменные окружения, параметры системного реестра и установленные пакеты. Стандартная библиотека включена в виде предварительно скомпилированных и оптимизированных файлов `.pyc` в ZIP-архиве, а также предоставлены `python3.dll`, `python37.dll`, `python.exe` и `pythonw.exe`. Tcl/tk (включая все зависимые компоненты, такие как Idle), pip и документация Python не включены.283284> **Примечание**285>286> Встроенное распространяемое не включает [Microsoft C Runtime](https://python-all.ru/3.13/using/windows.html), и установщик приложения должен предоставить его. Среда выполнения могла быть уже установлена в системе пользователя ранее или автоматически через Центр обновления Windows; её можно обнаружить, найдя `ucrtbase.dll` в системном каталоге.287288Сторонние пакеты должны устанавливаться установщиком приложения вместе со встраиваемым распространением. Использование pip для управления зависимостями, как в обычной установке Python, не поддерживается в этом распространении, хотя при определенной осторожности может быть возможно включить и использовать pip для автоматических обновлений. В общем случае сторонние пакеты следует рассматривать как часть приложения («вендоринг»), чтобы разработчик мог обеспечить совместимость с новыми версиями перед предоставлением обновлений пользователям.289290Два рекомендуемых варианта использования этого распространения описаны ниже.291292### 4.4.1. Приложение Python293294Приложение, написанное на Python, не обязательно требует, чтобы пользователи знали об этом факте. В этом случае встраиваемое распространение может быть использовано для включения частной версии Python в установочный пакет. В зависимости от того, насколько прозрачным оно должно быть (или, наоборот, насколько профессиональным оно должно выглядеть), есть два варианта.295296Использование специализированного исполняемого файла в качестве загрузчика требует некоторого программирования, но обеспечивает наиболее прозрачный интерфейс для пользователей. При использовании настраиваемого загрузчика нет явных признаков того, что программа работает на Python: значки можно настраивать, можно указать информацию о компании и версии, а ассоциации файлов работают правильно. В большинстве случаев настраиваемый загрузчик должен просто вызывать `Py_Main` с жестко заданной командной строкой.297298Более простой подход – предоставить пакетный файл или созданный ярлык, который напрямую вызывает `python.exe` или `pythonw.exe` с необходимыми аргументами командной строки. В этом случае приложение будет отображаться как Python, а не под своим реальным именем, и у пользователей могут возникнуть трудности с его отличием от других запущенных процессов Python или ассоциаций файлов.299300При втором подходе пакеты должны быть установлены как каталоги рядом с исполняемым файлом Python, чтобы гарантировать их доступность в пути. При использовании специализированного загрузчика пакеты могут располагаться в других местах, так как есть возможность указать путь поиска перед запуском приложения.301302### 4.4.2. Встраивание Python303304Приложения, написанные на нативном коде, часто требуют какую-либо форму языка сценариев, и для этой цели может быть использовано встраиваемое распространение Python. В общем случае большая часть приложения написана на нативном коде, и некоторая часть будет либо вызывать `python.exe`, либо напрямую использовать `python3.dll`. В любом случае, извлечение встраиваемого распространения в подкаталог установки приложения достаточно для обеспечения загружаемого интерпретатора Python.305306Как и при использовании в приложении, пакеты можно устанавливать в любое место, так как есть возможность указать пути поиска перед инициализацией интерпретатора. В остальном нет принципиальных различий между использованием встраиваемого распространения и обычной установкой.307308## 4.5. Альтернативные сборки309310Помимо стандартного дистрибутива CPython, существуют модифицированные пакеты, включающие дополнительную функциональность. Ниже приведён список популярных версий и их ключевые особенности:311312**[ActivePython](https://python-all.ru/3.13/using/windows.html)**313314Установщик с поддержкой нескольких платформ, документация, PyWin32315316**[Anaconda](https://python-all.ru/3.13/using/windows.html)**317318Популярные научные модули (такие как numpy, scipy и pandas) и менеджер пакетов `conda`.319320**[Enthought Deployment Manager](https://python-all.ru/3.13/using/windows.html)**321322«Среда и менеджер пакетов Python следующего поколения».323324Ранее Enthought предоставлял Canopy, но [он достиг конца поддержки в 2016 году](https://python-all.ru/3.13/using/windows.html).325326**[WinPython](https://python-all.ru/3.13/using/windows.html)**327328Дистрибутив для Windows с предварительно собранными научными пакетами и инструментами для сборки пакетов.329330Обратите внимание, что эти пакеты могут не включать последние версии Python или других библиотек и не поддерживаются командой ядра Python.331332## 4.6. Настройка Python333334Для удобного запуска Python из командной строки можно рассмотреть изменение некоторых переменных окружения по умолчанию в Windows. Хотя установщик предоставляет возможность настроить переменные PATH и PATHEXT, это надёжно только для одной общесистемной установки. Если вы регулярно используете несколько версий Python, рассмотрите возможность использования [Python Launcher for Windows](https://python-all.ru/3.13/using/windows.html#launcher).335336### 4.6.1. Отступление: установка переменных окружения337338Windows позволяет настраивать переменные окружения постоянно как на уровне пользователя, так и на уровне системы, или временно в командной строке.339340Чтобы временно задать переменные окружения, откройте командную строку и используйте команду **set**:341342```doscon343C:\>set PATH=C:\Program Files\Python 3.9;%PATH%344C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib345C:\>python346```347348Эти изменения будут применяться ко всем дальнейшим командам, выполняемым в этой консоли, и будут наследоваться любыми приложениями, запущенными из консоли.349350Заключение имени переменной в знаки процента приведёт к подстановке существующего значения, что позволяет добавить новое значение как в начало, так и в конец. Изменение `PATH` путём добавления каталога, содержащего **python.exe**, в начало является распространённым способом обеспечить запуск нужной версии Python.351352Чтобы постоянно изменить переменные окружения по умолчанию, нажмите Пуск и найдите «изменение переменных среды» или откройте свойства системы, Дополнительные параметры системы и нажмите кнопку Переменные среды. В этом диалоге вы можете добавить или изменить переменные пользователя и системы. Для изменения системных переменных требуется неограниченный доступ к компьютеру (то есть права администратора).353354> **Примечание**355>356> Windows объединяет пользовательские переменные *после* системных, что может привести к неожиданным результатам при изменении `PATH`.357>358> Переменная [`PYTHONPATH`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONPATH) используется всеми версиями Python, поэтому не следует настраивать её постоянно, если только перечисленные пути не содержат код, совместимый со всеми установленными версиями Python.359360> **См. также**361>362> **[https://learn.microsoft.com/windows/win32/procthread/environment-variables](https://python-all.ru/3.13/using/windows.html)**363>364> Обзор переменных окружения в Windows365>366> **[https://learn.microsoft.com/windows-server/administration/windows-commands/set\_1](https://python-all.ru/3.13/using/windows.html)**367>368> Команда `set` для временного изменения переменных среды369>370> **[https://learn.microsoft.com/windows-server/administration/windows-commands/setx](https://python-all.ru/3.13/using/windows.html)**371>372> Команда `setx` для постоянного изменения переменных среды373374### 4.6.2. Поиск исполняемого файла Python375376Изменено в версии 3.5.377378Помимо использования автоматически созданного пункта меню «Пуск» для интерпретатора Python, вы можете запускать Python из командной строки. В установщике есть опция, которая настроит это для вас.379380На первой странице установщика можно выбрать опцию «Add Python to PATH», чтобы установщик добавил путь установки в переменную `PATH`. Также добавляется расположение папки `Scripts\`. Это позволяет вводить **python** для запуска интерпретатора и **pip** для работы с пакетным менеджером. Таким образом, вы также можете выполнять свои скрипты с параметрами командной строки – см. документацию [Command line](https://python-all.ru/3.13/using/cmdline.html#using-on-cmdline).381382Если вы не включили эту опцию при установке, вы всегда можете повторно запустить установщик, выбрать «Modify» и включить её. Или же вы можете вручную изменить переменные `PATH`, следуя инструкциям в разделе [Excursus: Setting environment variables](https://python-all.ru/3.13/using/windows.html#setting-envvars). Вам нужно добавить каталог вашей установки Python в переменную среды `PATH`, разделив его точкой с запятой от других записей. Пример переменной может выглядеть так (предполагая, что первые две записи уже существовали):383384```text385C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.9386```387388## 4.7. Режим UTF-8389390Добавлено в версии 3.7.391392Windows по-прежнему использует устаревшие кодировки для системной кодировки (кодовую страницу ANSI). Python использует её для кодировки по умолчанию текстовых файлов (например, [`locale.getencoding()`](https://python-all.ru/3.13/library/locale.html#locale.getencoding)).393394Это может вызывать проблемы, поскольку UTF-8 широко используется в интернете и большинстве Unix-систем, включая WSL (подсистема Windows для Linux).395396Вы можете использовать [Режим UTF-8 Python](https://python-all.ru/3.13/library/os.html#utf8-mode), чтобы изменить кодировку текста по умолчанию на UTF-8. Вы можете включить [Режим UTF-8 Python](https://python-all.ru/3.13/library/os.html#utf8-mode) с помощью параметра командной строки `-X utf8` или переменной среды `PYTHONUTF8=1`. См. [`PYTHONUTF8`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONUTF8) для включения режима UTF-8, а раздел [Excursus: Setting environment variables](https://python-all.ru/3.13/using/windows.html#setting-envvars) для информации об изменении переменных среды.397398Когда [режим UTF-8 в Python](https://python-all.ru/3.13/library/os.html#utf8-mode) включён, вы всё ещё можете использовать системную кодировку (кодовую страницу ANSI) через кодек «mbcs».399400Обратите внимание, что добавление `PYTHONUTF8=1` в переменные окружения по умолчанию повлияет на все приложения Python 3.7+ в вашей системе. Если у вас есть приложения Python 3.7+, которые полагаются на устаревшую системную кодировку, рекомендуется временно задать переменную окружения или использовать опцию командной строки `-X utf8`.401402> **Примечание**403>404> Даже когда режим UTF-8 отключён, Python по умолчанию использует UTF-8 в Windows для:405>406> - Ввод-вывод консоли, включая стандартный ввод-вывод (подробнее см. [**PEP 528**](https://python-all.ru/3.13/using/windows.html)).407> - [Кодировка файловой системы](https://python-all.ru/3.13/glossary.html#term-filesystem-encoding-and-error-handler) (подробнее см. [**PEP 529**](https://python-all.ru/3.13/using/windows.html)).408409## 4.8. Загрузчик Python для Windows410411Добавлено в версии 3.3.412413Загрузчик Python для Windows – это утилита, помогающая находить и запускать различные версии Python. Она позволяет сценариям (или командной строке) указать предпочтительную версию Python, и загрузчик найдет и запустит эту версию.414415В отличие от переменной `PATH`, загрузчик правильно выбирает наиболее подходящую версию Python. Он отдает предпочтение установкам для конкретного пользователя перед общесистемными и сортирует по версии языка, а не по дате установки.416417Загрузчик был первоначально описан в [**PEP 397**](https://python-all.ru/3.13/using/windows.html).418419### 4.8.1. Начало работы420421#### 4.8.1.1. Из командной строки422423Изменено в версии 3.6.424425При общесистемной установке Python 3.3 и новее загрузчик помещается в `PATH`. Загрузчик совместим со всеми доступными версиями Python, поэтому неважно, какая из них установлена. Чтобы проверить доступность загрузчика, выполните следующую команду в командной строке:426427```text428py429```430431Вы должны заметить, что запущена последняя установленная версия Python – её можно завершить как обычно, а все дополнительные аргументы командной строки будут переданы напрямую Python.432433Если у вас установлено несколько версий Python (например, 3.7 и 3.13), вы заметили, что запустился Python 3.13 – чтобы запустить Python 3.7, попробуйте команду:434435```text436py -3.7437```438439Если вам нужна последняя установленная версия Python 2, попробуйте команду:440441```text442py -2443```444445Если вы видите следующую ошибку, значит, загрузчик не установлен:446447```text448'py' is not recognized as an internal or external command,449operable program or batch file.450```451452Команда:453454```text455py --list456```457458отображает установленные в данный момент версии Python.459460Аргумент `-x.y` – это краткая форма аргумента `-V:Company/Tag`, которая позволяет выбрать конкретную среду выполнения Python, в том числе те, что могут быть получены не с python.org. Любая среда выполнения, зарегистрированная в соответствии с [**PEP 514**](https://python-all.ru/3.13/using/windows.html), будет доступна для обнаружения. Команда `--list` выводит список всех доступных сред выполнения в формате `-V:`.461462При использовании аргумента `-V:` указание компании (Company) ограничит выбор средами выполнения от этого поставщика, а указание только тега (Tag) выберет из всех поставщиков. Обратите внимание, что пропуск косой черты подразумевает тег:463464```text465# Select any '3.*' tagged runtime466py -V:3467468# Select any 'PythonCore' released runtime469py -V:PythonCore/470471# Select PythonCore's latest Python 3 runtime472py -V:PythonCore/3473```474475Краткая форма аргумента (`-3`) всегда выбирает только из основных выпусков Python, а не из других дистрибутивов. Однако более длинная форма (`-V:3`) будет выбирать из любых.476477Компания сопоставляется по полной строке без учёта регистра. Тег сопоставляется либо по полной строке, либо по префиксу, при условии, что следующий символ – точка или дефис. Это позволяет `-V:3.1` соответствовать `3.1-32`, но не `3.10`. Теги сортируются в числовом порядке (`3.10` новее, чем `3.1`), но сравниваются как текст (`-V:3.01` не совпадает с `3.1`).478479#### 4.8.1.2. Виртуальные окружения480481Добавлено в версии 3.5.482483Если загрузчик запускается без явного указания версии Python и активно виртуальное окружение (созданное с помощью модуля стандартной библиотеки [`venv`](https://python-all.ru/3.13/library/venv.html#module-venv) или внешнего инструмента `virtualenv`), загрузчик запустит интерпретатор виртуального окружения, а не глобальный. Чтобы запустить глобальный интерпретатор, либо деактивируйте виртуальное окружение, либо явно укажите глобальную версию Python.484485#### 4.8.1.3. Из сценария486487Давайте создадим тестовый сценарий Python – создайте файл с именем `hello.py` со следующим содержимым488489```python490#! python491import sys492sys.stdout.write("hello from Python %s\n" % (sys.version,))493```494495Из каталога, в котором находится hello.py, выполните команду:496497```text498py hello.py499```500501Вы должны заметить, что выводится номер версии вашей последней установки Python 2.x. Теперь попробуйте изменить первую строку на:502503```python504#! python3505```506507Повторное выполнение команды теперь должно вывести информацию о последней версии Python 3.x. Как и в приведённых выше примерах для командной строки, вы можете указать более точный квалификатор версии. Предположим, у вас установлен Python 3.7, попробуйте изменить первую строку на `#! python3.7`, и вы должны увидеть информацию о версии 3.7.508509Обратите внимание, что в отличие от интерактивного использования, просто «python» будет использовать последнюю установленную версию Python 2.x. Это сделано для обратной совместимости и для совместимости с Unix, где команда `python` обычно относится к Python 2.510511#### 4.8.1.4. Из ассоциаций файлов512513Загрузчик должен быть ассоциирован с файлами Python (т.е. файлами `.py`, `.pyw`, `.pyc`) при установке. Это означает, что при двойном щелчке по одному из этих файлов в проводнике Windows будет использоваться загрузчик, и поэтому вы можете использовать те же возможности, описанные выше, чтобы указать сценарию версию, которая должна использоваться.514515Ключевое преимущество этого в том, что один загрузчик может одновременно поддерживать несколько версий Python в зависимости от содержимого первой строки.516517### 4.8.2. Shebang-строки518519Если первая строка файла сценария начинается с `#!`, она называется «shebang»-строкой. Linux и другие Unix-подобные операционные системы имеют встроенную поддержку таких строк, и они обычно используются в этих системах для указания того, как следует выполнять сценарий. Данный загрузчик позволяет использовать те же возможности для сценариев Python в Windows, и примеры выше демонстрируют их применение.520521Чтобы обеспечить переносимость shebang-строк в сценариях Python между Unix и Windows, этот загрузчик поддерживает ряд «виртуальных» команд для указания того, какой интерпретатор использовать. Поддерживаемые виртуальные команды:522523- `/usr/bin/env`524- `/usr/bin/python`525- `/usr/local/bin/python`526- `python`527528Например, если первая строка вашего сценария начинается с529530```sh531#! /usr/bin/python532```533534Будет найдена и использована стандартная Python или активная виртуальная среда. Поскольку многие скрипты Python, написанные для Unix, уже содержат эту строку, вы должны обнаружить, что эти скрипты могут использоваться программой-загрузчиком без изменений. Если вы пишете новый скрипт на Windows, который, как вы надеетесь, будет полезен на Unix, следует использовать одну из shebang-строк, начинающихся с `/usr`.535536К любой из указанных выше виртуальных команд можно добавить явную версию (только старшую версию или старшую и младшую версию). Кроме того, 32-битную версию можно запросить, добавив «-32» после младшей версии. То есть `/usr/bin/python3.7-32` запросит использование 32-битной Python 3.7. Если активна виртуальная среда, версия будет проигнорирована и будет использована среда.537538Добавлено в версии 3.7: Начиная с загрузчика Python 3.7 можно запросить 64-битную версию с помощью суффикса «-64». Кроме того, можно указать старшую версию и архитектуру без указания младшей (т.е. `/usr/bin/python3-64`).539540Изменено в версии 3.11: Суффикс «-64» устарел и теперь означает «любая архитектура, которая не является заведомо i386/32-битной». Для запроса конкретной среды используйте новый аргумент `-V:TAG` с полным тегом.541542Изменено в версии 3.13: Виртуальные команды, ссылающиеся на `python`, теперь отдают предпочтение активной виртуальной среде, а не поиску `PATH`. Это обрабатывает случаи, когда shebang указывает `/usr/bin/env python3`, но `python3.exe` отсутствует в активной среде.543544Форма `/usr/bin/env` shebang-строки имеет ещё одно особое свойство. Прежде чем искать установленные интерпретаторы Python, эта форма выполняет поиск в исполняемом файле `PATH` исполняемого файла Python, соответствующего имени, указанному в качестве первого аргумента. Это соответствует поведению программы Unix `env`, которая выполняет поиск `PATH`. Если исполняемый файл, соответствующий первому аргументу после команды `env`, не найден, но аргумент начинается с `python`, он будет обработан так, как описано для других виртуальных команд. Переменная окружения `PYLAUNCHER_NO_SEARCH_PATH` может быть установлена (в любое значение), чтобы пропустить этот поиск `PATH`.545546Shebang-строки, не соответствующие ни одному из этих шаблонов, ищутся в разделе `[commands]` файла [.INI](https://python-all.ru/3.13/using/windows.html#launcher-ini) загрузчика. Это может использоваться для обработки определённых команд способом, подходящим для вашей системы. Имя команды должно быть одним аргументом (без пробелов в исполняемом файле shebang), а подставленное значение – это полный путь к исполняемому файлу (дополнительные аргументы, указанные в .INI, будут заключены в кавычки как часть имени файла).547548```ini549[commands]550/bin/xpython=C:\Program Files\XPython\python.exe551```552553Любые команды, не найденные в файле .INI, обрабатываются как пути к исполняемым файлам **Windows**, которые являются абсолютными или относительными относительно каталога, содержащего файл скрипта. Это удобно для скриптов, предназначенных только для Windows, например, созданных установщиком, поскольку такое поведение несовместимо с оболочками Unix. Эти пути могут быть заключены в кавычки и могут содержать несколько аргументов, после которых будет добавлен путь к скрипту и любые дополнительные аргументы.554555### 4.8.3. Аргументы в shebang-строках556557Shebang-строки также могут указывать дополнительные параметры, передаваемые интерпретатору Python. Например, если у вас есть shebang-строка:558559```sh560#! /usr/bin/python -v561```562563Тогда Python будет запущен с опцией `-v`564565### 4.8.4. Настройка566567#### 4.8.4.1. Настройка через INI-файлы568569Загрузчик будет искать два .ini-файла: `py.ini` в каталоге данных текущего пользователя (`%LOCALAPPDATA%` или `$env:LocalAppData`) и `py.ini` в том же каталоге, что и загрузчик. Одни и те же .ini-файлы используются как для «консольной» версии загрузчика (т.е. py.exe), так и для «оконной» версии (т.е. pyw.exe).570571Настройка, указанная в «каталоге приложения», имеет приоритет над настройкой рядом с исполняемым файлом, поэтому пользователь, у которого может не быть прав на запись в .ini-файл рядом с загрузчиком, может переопределить команды в этом глобальном .ini-файле.572573#### 4.8.4.2. Настройка версий Python по умолчанию574575В некоторых случаях в команду можно включить квалификатор версии, чтобы указать, какая версия Python будет использоваться этой командой. Квалификатор версии начинается с номера старшей версии и может опционально сопровождаться точкой («.») и спецификатором младшей версии. Кроме того, можно указать, следует ли запрашивать 32- или 64-битную реализацию, добавив «-32» или «-64».576577Например, shebang-строка `#!python` не имеет квалификатора версии, в то время как `#!python3` имеет квалификатор версии, указывающий только старшую версию.578579Если в команде не найдено квалификаторов версии, может быть установлена переменная окружения `PY_PYTHON` для указания квалификатора версии по умолчанию. Если она не установлена, по умолчанию используется «3». Переменная может указывать любое значение, которое может быть передано в командной строке, например «3», «3.7», «3.7-32» или «3.7-64». (Обратите внимание, что опция «-64» доступна только в загрузчике, входящем в состав Python 3.7 или новее.)580581Если квалификаторы младшей версии не найдены, может быть установлена переменная окружения `PY_PYTHON{major}` (где `{major}` – текущий квалификатор старшей версии, определённый выше) для указания полной версии. Если такая опция не найдена, загрузчик перечислит установленные версии Python и будет использовать последний младший выпуск, найденный для старшей версии, который, вероятно, хотя и не гарантированно, является самой последней установленной версией в этом семействе.582583В 64-битной Windows с установленными 32-битной и 64-битной реализациями одной и той же версии (старшая.младшая) Python всегда будет предпочитаться 64-битная версия. Это верно как для 32-битной, так и для 64-битной реализации загрузчика – 32-битный загрузчик будет предпочитать запуск 64-битной установки Python указанной версии, если она доступна. Это сделано для того, чтобы поведение загрузчика можно было предсказать, зная только, какие версии установлены на ПК, независимо от порядка их установки (т.е. не зная, была ли последней установлена 32- или 64-битная версия Python и соответствующий загрузчик). Как отмечалось выше, для изменения этого поведения можно использовать необязательный суффикс «-32» или «-64» в спецификаторе версии.584585Примеры:586587- Если соответствующие параметры не заданы, команды `python` и `python2` будут использовать последнюю установленную версию Python 2.x, а команда `python3` будет использовать последнюю установленную версию Python 3.x.588- Команда `python3.7` не будет учитывать никакие параметры, поскольку версии полностью указаны.589- Если `PY_PYTHON=3`, то команды `python` и `python3` будут обе использовать последнюю установленную версию Python 3.590- Если `PY_PYTHON=3.7-32`, то команда `python` будет использовать 32-битную реализацию версии 3.7, тогда как команда `python3` будет использовать последнюю установленную версию Python (PY\_PYTHON не учитывался, так как была указана старшая версия.)591- Если `PY_PYTHON=3` и `PY_PYTHON3=3.7`, то команды `python` и `python3` будут обе использовать именно версию 3.7592593В дополнение к переменным окружения те же настройки можно задать в файле .INI, используемом загрузчиком. Раздел в INI-файле называется `[defaults]`, а имя ключа будет таким же, как у переменных окружения без префикса `PY_` (обратите внимание, что имена ключей в INI-файле нечувствительны к регистру). Содержимое переменной окружения будет переопределять настройки, указанные в INI-файле.594595Например:596597- Установка `PY_PYTHON=3.7` эквивалентна следующему содержимому INI-файла:598599```ini600[defaults]601python=3.7602```603604- Установка `PY_PYTHON=3` и `PY_PYTHON3=3.7` эквивалентна следующему содержимому INI-файла:605606```ini607[defaults]608python=3609python3=3.7610```611612### 4.8.5. Диагностика613614Если установлена переменная окружения `PYLAUNCHER_DEBUG` (в любое значение), загрузчик будет выводить диагностическую информацию в stderr (т.е. на консоль). Хотя эта информация одновременно многословна *и* кратка, она должна позволить вам увидеть, какие версии Python были найдены, почему была выбрана конкретная версия и точная командная строка, используемая для запуска целевого Python. Она предназначена в первую очередь для тестирования и отладки.615616### 4.8.6. Пробный запуск617618Если установлена переменная окружения `PYLAUNCHER_DRYRUN` (с любым значением), лаунчер выведет команду, которую выполнил бы, но не запустит Python. Это может быть полезно для инструментов, которые хотят использовать лаунчер для обнаружения и последующего прямого запуска Python. Обратите внимание, что команда, записанная в стандартный вывод, всегда кодируется UTF-8 и может некорректно отображаться в консоли.619620### 4.8.7. Установка по требованию621622Если установлена переменная окружения `PYLAUNCHER_ALLOW_INSTALL` (с любым значением), а запрошенная версия Python не установлена, но доступна в Microsoft Store, лаунчер попытается установить её. Для завершения может потребоваться взаимодействие с пользователем, и, возможно, команду нужно будет запустить снова.623624Дополнительная переменная `PYLAUNCHER_ALWAYS_INSTALL` приводит к тому, что лаунчер всегда пытается установить Python, даже если он уже обнаружен. Это предназначено в основном для тестирования (и должно использоваться вместе с `PYLAUNCHER_DRYRUN`).625626### 4.8.8. Коды возврата627628Лаунчер Python может возвращать следующие коды завершения. К сожалению, невозможно отличить их от кода завершения самого Python.629630Имена кодов соответствуют тем, что используются в исходном коде, и приведены только для справки. Получить или сопоставить их иным способом, кроме как из этой страницы, невозможно. Записи перечислены в алфавитном порядке имён.631632| Имя | Значение | Описание |633| --- | --- | --- |634| RC\_BAD\_VENV\_CFG | 107 | Файл `pyvenv.cfg` найден, но повреждён. |635| RC\_CREATE\_PROCESS | 101 | Не удалось запустить Python. |636| RC\_INSTALLING | 111 | Началась установка, но после её завершения команду нужно будет выполнить снова. |637| RC\_INTERNAL\_ERROR | 109 | Неожиданная ошибка. Пожалуйста, сообщите об ошибке. |638| RC\_NO\_COMMANDLINE | 108 | Не удалось получить командную строку от операционной системы. |639| RC\_NO\_PYTHON | 103 | Не удалось найти запрошенную версию. |640| RC\_NO\_VENV\_CFG | 106 | Требуется файл `pyvenv.cfg`, но он не найден. |641642## 4.9. Поиск модулей643644Эти заметки дополняют описание в [Инициализация пути поиска модулей sys.path](https://python-all.ru/3.13/library/sys_path_init.html#sys-path-init) подробными примечаниями для Windows.645646Если файл `._pth` не найден, то именно так [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path) заполняется в Windows:647648- В начале добавляется пустая запись, соответствующая текущей директории.649- Если существует переменная окружения [`PYTHONPATH`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONPATH), как описано в [Переменные окружения](https://python-all.ru/3.13/using/cmdline.html#using-on-envvars), то её записи добавляются следом. Обратите внимание, что в Windows пути в этой переменной должны разделяться точками с запятой, чтобы отличать их от двоеточия, используемого в идентификаторах дисков (`C:\` и т.д.).650- Дополнительные «пути приложений» можно добавить в реестр как подразделы `\SOFTWARE\Python\PythonCore{version}\PythonPath` как в разделе `HKEY_CURRENT_USER`, так и в `HKEY_LOCAL_MACHINE`. Подразделы, у которых в качестве значения по умолчанию указаны строки путей, разделённые точкой с запятой, приводят к добавлению каждого пути в [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path). (Обратите внимание, что все известные установщики используют только HKLM, поэтому HKCU обычно пуст.)651- Если задана переменная окружения [`PYTHONHOME`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONHOME), она считается «домашним каталогом Python». В противном случае по пути основного исполняемого файла Python ищется «маркерный файл» (либо `Lib\os.py`, либо `pythonXY.zip`), чтобы определить «домашний каталог Python». Если домашний каталог найден, соответствующие поддиректории, добавляемые в [`sys.path`](https://python-all.ru/3.13/library/sys.html#sys.path) (`Lib`, `plat-win` и т.д.), определяются на основе этой папки. В противном случае основной путь Python строится из PythonPath, хранящегося в реестре.652- Если домашний каталог Python не найден, в окружении не указана переменная [`PYTHONPATH`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONPATH) и не найдены записи реестра, используется путь по умолчанию с относительными записями (например, `.\Lib;.\plat-win` и т.д.).653654Если файл `pyvenv.cfg` найден рядом с основным исполняемым файлом или в директории уровнем выше, применяются следующие варианты:655656- Если `home` – абсолютный путь, а [`PYTHONHOME`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONHOME) не задана, то при определении домашнего каталога используется этот путь вместо пути к основному исполняемому файлу.657658Конечный результат всего этого:659660- При запуске `python.exe` или любого другого .exe в основной директории Python (установленной версии или непосредственно из каталога PCbuild) основной путь определяется, а основные пути в реестре игнорируются. Другие «пути приложений» в реестре всегда считываются.661- Когда Python размещается в другом .exe (другая директория, встраивание через COM и т.д.), «домашний каталог Python» не определяется, поэтому используется основной путь из реестра. Другие «пути приложений» в реестре всегда считываются.662- Если Python не может найти свой домашний каталог и в реестре нет значений (замороженный .exe, какая-то очень странная установка), вы получаете путь с некоторыми путями по умолчанию, но относительными.663664Для тех, кто хочет встроить Python в своё приложение или дистрибутив, следующие рекомендации помогут избежать конфликтов с другими установками:665666- Включите файл `._pth` рядом с исполняемым файлом, содержащий включаемые директории. Это приведёт к игнорированию путей, перечисленных в реестре и переменных окружения, а также игнорированию [`site`](https://python-all.ru/3.13/library/site.html#module-site), если только `import site` не указан.667- Если вы загружаете `python3.dll` или `python37.dll` в свой исполняемый файл, явно задайте [`PyConfig.module_search_paths`](https://python-all.ru/3.13/c-api/init_config.html#c.PyConfig.module_search_paths) перед [`Py_InitializeFromConfig()`](https://python-all.ru/3.13/c-api/init.html#c.Py_InitializeFromConfig).668- Очистите и/или перезапишите [`PYTHONPATH`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONPATH) и задайте [`PYTHONHOME`](https://python-all.ru/3.13/using/cmdline.html#envvar-PYTHONHOME) перед запуском `python.exe` из вашего приложения.669- Если вы не можете воспользоваться предыдущими рекомендациями (например, вы распространитель, который позволяет запускать `python.exe` напрямую), убедитесь, что маркерный файл (`Lib\os.py`) существует в вашем каталоге установки. (Обратите внимание, что он не будет обнаружен внутри ZIP-файла, но вместо него будет обнаружен правильно названный ZIP-файл.)670671Это гарантирует, что файлы из общесистемной установки не получат приоритет над копией стандартной библиотеки, поставляемой с вашим приложением. В противном случае пользователи могут столкнуться с проблемами при использовании вашего приложения. Обратите внимание, что первая рекомендация – наилучшая, поскольку остальные могут по-прежнему быть подвержены влиянию нестандартных путей в реестре и пользовательских site-packages.672673Изменено в версии 3.6: Добавлена поддержка файла `._pth` и удалён параметр `applocal` из `pyvenv.cfg`.674675Изменено в версии 3.6: Добавлен `pythonXX.zip` как потенциальный маркерный файл, расположенный непосредственно рядом с исполняемым файлом.676677Устарело с версии 3.6: Модули, указанные в реестре в разделе `Modules` (не `PythonPath`), могут импортироваться [`importlib.machinery.WindowsRegistryFinder`](https://python-all.ru/3.13/library/importlib.html#importlib.machinery.WindowsRegistryFinder). Этот искатель включён в Windows в версии 3.6.0 и более ранних, но в будущем его может потребоваться явно добавлять в [`sys.meta_path`](https://python-all.ru/3.13/library/sys.html#sys.meta_path).678679## 4.10. Дополнительные модули680681Хотя Python стремится быть переносимым между всеми платформами, существуют функции, уникальные для Windows. Ряд модулей, как в стандартной библиотеке, так и внешних, а также фрагменты кода позволяют использовать эти возможности.682683Стандартные модули, специфичные для Windows, описаны в [Специфичные службы MS Windows](https://python-all.ru/3.13/library/windows.html#mswin-specific-services).684685### 4.10.1. PyWin32686687Модуль [PyWin32](https://python-all.ru/3.13/using/windows.html) от Марка Хаммонда – это набор модулей для расширенной поддержки Windows. Он включает утилиты для:688689- [Component Object Model](https://python-all.ru/3.13/using/windows.html) (COM)690- Вызовы Win32 API691- Реестр692- Журнал событий693- [Microsoft Foundation Classes](https://python-all.ru/3.13/using/windows.html) (MFC) пользовательские интерфейсы694695[PythonWin](https://python-all.ru/3.13/using/windows.html) – это пример MFC-приложения, поставляемого с PyWin32. Это встраиваемая среда разработки со встроенным отладчиком.696697> **См. также**698>699> **[Win32: Как мне…?](https://python-all.ru/3.13/using/windows.html)**700>701> Тим Голден702>703> **[Python и COM](https://python-all.ru/3.13/using/windows.html)**704>705> Дэвид и Пол Бодди706707### 4.10.2. cx\_Freeze708709[cx\_Freeze](https://python-all.ru/3.13/using/windows.html) упаковывает скрипты Python в исполняемые программы Windows (`*.exe` файлы). После этого можно распространять ваше приложение без необходимости устанавливать Python пользователям.710711## 4.11. Компиляция Python в Windows712713Если вы хотите скомпилировать CPython самостоятельно, первым делом нужно получить [исходный код](https://python-all.ru/3.13/using/windows.html). Можно загрузить исходный код последнего релиза или просто взять свежую [копию из репозитория](https://python-all.ru/3.13/using/windows.html).714715Дерево исходных кодов содержит файлы решения и проекта для Microsoft Visual Studio, который используется для сборки официальных релизов Python. Эти файлы находятся в каталоге `PCbuild`.716717Обратитесь к `PCbuild/readme.txt` за общей информацией о процессе сборки.718719Для модулей-расширений обратитесь к [Сборка расширений C и C++ в Windows](https://python-all.ru/3.13/extending/windows.html#building-on-windows).720721## 4.12. Другие платформы722723В процессе развития Python некоторые платформы, которые ранее поддерживались, больше не поддерживаются (из-за отсутствия пользователей или разработчиков). Обратитесь к [**PEP 11**](https://python-all.ru/3.13/using/windows.html) для получения подробной информации о всех неподдерживаемых платформах.724725- [Windows CE](https://python-all.ru/3.13/using/windows.html) [больше не поддерживается](https://python-all.ru/3.13/using/windows.html) начиная с Python 3 (если вообще поддерживался).726- Установщик [Cygwin](https://python-all.ru/3.13/using/windows.html) также предлагает установить [интерпретатор Python](https://python-all.ru/3.13/using/windows.html)727728См. [Python для Windows](https://python-all.ru/3.13/using/windows.html) для получения подробной информации о платформах с предварительно собранными установщиками.729