windows.md
1> **Источник:** https://python-all.ru/3.3/using/windows.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 3. Использование Python в Windows89Этот документ содержит обзор особенностей поведения Windows, которые следует учитывать при использовании Python в Microsoft Windows.1011## 3.1. Установка Python1213В отличие от большинства систем и служб Unix, Windows не требует Python изначально и, соответственно, не предустанавливает его версию. Однако команда CPython уже много лет собирает установщики для Windows (пакеты MSI) для каждого [релиза](https://python-all.ru/3.3/using/windows.html).1415В процессе развития Python некоторые платформы, которые ранее поддерживались, больше не поддерживаются (из-за отсутствия пользователей или разработчиков). Обратитесь к [**PEP 11**](https://python-all.ru/3.3/using/windows.html) для получения подробной информации о всех неподдерживаемых платформах.1617- [Windows CE](https://python-all.ru/3.3/using/windows.html) всё ещё поддерживается.18- Установщик [Cygwin](https://python-all.ru/3.3/using/windows.html) также предлагает установить [интерпретатор Python](https://python-all.ru/3.3/using/windows.html); он находится в разделе «Interpreters». (см. [исходный код пакета Cygwin](ftp://ftp.uni-erlangen.de/pub/pc/gnuwin32/cygwin/mirrors/cygnus/release/python), [релизы сопровождающего](https://python-all.ru/3.3/using/windows.html))1920См. [Python для Windows](https://python-all.ru/3.3/using/windows.html) для получения подробной информации о платформах с предварительно собранными установщиками.2122> **См. также**23>24> **[Python на XP](https://python-all.ru/3.3/using/windows.html)**25>26> «7 минут до "Hello World!"» автор: Ричард Дулинг, 200627>28> **[Установка в Windows](https://python-all.ru/3.3/using/windows.html)**29>30> в «31>32> [Dive into Python: Python from novice to pro](https://python-all.ru/3.3/using/windows.html)33>34> » Марк Пилигрим, 2004, ISBN 1-59059-356-135>36> **[Для пользователей Windows](https://python-all.ru/3.3/using/windows.html)**37>38> в «Installing Python» в «39>40> [A Byte of Python](https://python-all.ru/3.3/using/windows.html)41>42> » Сваруп C H, 20034344## 3.2. Альтернативные пакеты4546Помимо стандартного дистрибутива CPython, существуют модифицированные пакеты, включающие дополнительную функциональность. Ниже приведён список популярных версий и их ключевые особенности:4748**[ActivePython](https://python-all.ru/3.3/using/windows.html)**4950Установщик с поддержкой нескольких платформ, документация, PyWin325152**[Enthought Python Distribution](https://python-all.ru/3.3/using/windows.html)**5354Популярные модули (например, PyWin32) с соответствующей документацией, набор инструментов для создания расширяемых приложений Python.5556Обратите внимание, что эти пакеты, скорее всего, установят *более старые* версии Python.5758## 3.3. Настройка Python5960Чтобы Python работал безупречно, возможно, придётся изменить некоторые настройки окружения в Windows.6162### 3.3.1. Отступление: настройка переменных окружения6364В Windows есть встроенный диалог для изменения переменных среды (следующее руководство применимо к классическому виду XP): щёлкните правой кнопкой мыши значок вашего компьютера (обычно находится на рабочем столе и называется «Мой компьютер») и выберите *Свойства*. Затем откройте вкладку *Дополнительно* и нажмите кнопку *Переменные среды*.6566Кратко, ваш путь:6768> *Мой компьютер ‣ Свойства ‣ Дополнительно ‣ Переменные среды*6970В этом диалоге можно добавлять или изменять пользовательские и системные переменные. Чтобы изменить системные переменные, нужен полный доступ к компьютеру (т.е. права администратора).7172Ещё один способ добавить переменные в окружение – использовать команду **set**:7374```text75set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib76```7778Чтобы сделать эту настройку постоянной, можно добавить соответствующую команду в `autoexec.bat`. **msconfig** – это графический интерфейс к этому файлу.7980Просмотреть переменные окружения можно и проще: командная строка автоматически раскрывает строки, заключённые в знаки процента:8182```text83echo %PATH%84```8586Подробнее об этом поведении см. **set /?**.8788> **См. также**89>90> **[http://support.microsoft.com/kb/100843](https://python-all.ru/3.3/using/windows.html)**91>92> Переменные среды в Windows NT93>94> **[http://support.microsoft.com/kb/310519](https://python-all.ru/3.3/using/windows.html)**95>96> Как управлять переменными среды в Windows XP97>98> **[http://www.chem.gla.ac.uk/~louis/software/faq/q1.html](https://python-all.ru/3.3/using/windows.html)**99>100> Настройка переменных среды, Луи Дж. Фарруджа101102### 3.3.2. Поиск исполняемого файла Python103104Изменено в версии 3.3.105106Помимо использования автоматически созданного пункта меню «Пуск» для интерпретатора Python, может потребоваться запустить Python в командной строке. Начиная с Python 3.3, в установщике есть опция, которая настраивает это автоматически.107108На экране «Customize Python 3.3» можно включить опцию «Add python.exe to search path», чтобы установщик поместил вашу установку в `%PATH%`. Это позволит набирать **python** для запуска интерпретатора. Таким образом, вы также сможете выполнять сценарии с параметрами командной строки; см. документацию [*Командная строка*](https://python-all.ru/3.3/using/cmdline.html#using-on-cmdline).109110Если вы не включили эту опцию при установке, всегда можно повторно запустить установщик и выбрать её.111112Альтернатива – вручную изменить `%PATH%`, следуя указаниям в разделе [*Экскурс: Настройка переменных среды*](https://python-all.ru/3.3/using/windows.html#setting-envvars). Необходимо задать переменную окружения `%PATH%`, включив в неё каталог вашего дистрибутива Python, отделяя точкой с запятой от других записей. Пример переменной может выглядеть так (предполагая, что первые две записи – стандартные для Windows):113114```text115C:\WINDOWS\system32;C:\WINDOWS;C:\Python33116```117118### 3.3.3. Поиск модулей119120Python обычно хранит свою библиотеку (и, соответственно, папку site-packages) в каталоге установки. Так, если вы установили Python в `C:\Python\`, библиотека по умолчанию будет находиться в `C:\Python\Lib\`, а сторонние модули должны храниться в `C:\Python\Lib\site-packages\`.121122Вот как формируется [`sys.path`](https://python-all.ru/3.3/library/sys.html#sys.path) в Windows:123124- В начале добавляется пустая запись, соответствующая текущей директории.125- Если существует переменная окружения [`PYTHONPATH`](https://python-all.ru/3.3/using/cmdline.html#envvar-PYTHONPATH), как описано в [*Переменные среды*](https://python-all.ru/3.3/using/cmdline.html#using-on-envvars), её записи добавляются следующими. Обратите внимание: в Windows пути в этой переменной должны разделяться точкой с запятой, чтобы отличать их от двоеточия, используемого в идентификаторах дисков (`C:\` и т.д.).126- Дополнительные «пути приложений» можно добавить в реестр как подразделы `\SOFTWARE\Python\PythonCore\version\PythonPath` как в ветке `HKEY_CURRENT_USER`, так и `HKEY_LOCAL_MACHINE`. Подразделы, значением которых по умолчанию являются строки путей, разделённые точкой с запятой, приведут к добавлению каждого пути в [`sys.path`](https://python-all.ru/3.3/library/sys.html#sys.path). (Обратите внимание, что все известные установщики используют только HKLM, поэтому HKCU обычно пуста.)127- Если задана переменная окружения [`PYTHONHOME`](https://python-all.ru/3.3/using/cmdline.html#envvar-PYTHONHOME), она считается «домашним каталогом Python». В противном случае путь к основному исполняемому файлу Python используется для поиска «опознавательного файла» (`Lib\os.py`), чтобы определить «домашний каталог Python». Если домашний каталог найден, соответствующие подкаталоги добавляются в [`sys.path`](https://python-all.ru/3.3/library/sys.html#sys.path) (`Lib`, `plat-win` и т.д.) на основе этой папки. В противном случае основной путь Python строится из PythonPath, хранящегося в реестре.128- Если не удаётся найти домашний каталог Python, не указана [`PYTHONPATH`](https://python-all.ru/3.3/using/cmdline.html#envvar-PYTHONPATH) в окружении и не найдены записи в реестре, используется путь по умолчанию с относительными записями (например, `.\Lib;.\plat-win` и т.д.).129130Конечный результат всего этого:131132- При запуске `python.exe` или любого другого .exe в главном каталоге Python (установленной версии или непосредственно из каталога PCbuild) основной путь определяется, а основные пути в реестре игнорируются. Другие «пути приложений» в реестре всегда считываются.133- Когда Python размещается в другом .exe (другая директория, встраивание через COM и т.д.), «домашний каталог Python» не определяется, поэтому используется основной путь из реестра. Другие «пути приложений» в реестре всегда считываются.134- Если Python не может найти свой домашний каталог и нет реестра (например, замороженный .exe, какая-то очень странная установка), вы получаете путь с некоторыми путями по умолчанию, но относительными.135136### 3.3.4. Выполнение скриптов137138Начиная с Python 3.3, в состав Python входит программа-загрузчик, которая упрощает запуск скриптов Python. Дополнительную информацию см. в разделе [*Python Launcher for Windows*](https://python-all.ru/3.3/using/windows.html#launcher).139140### 3.3.5. Запуск скриптов без программы-загрузчика Python141142Если программа-загрузчик Python не установлена, скрипты Python (файлы с расширением `.py`) по умолчанию выполняются с помощью **python.exe**. Этот исполняемый файл открывает окно терминала, которое остаётся открытым, даже если программа использует графический интерфейс. Если этого не требуется, используйте расширение `.pyw`, которое приведёт к выполнению скрипта с помощью **pythonw.exe** по умолчанию (оба исполняемых файла находятся в корневом каталоге установки Python). Это подавляет появление окна терминала при запуске.143144Можно также настроить выполнение всех скриптов `.py` с помощью **pythonw.exe**, используя стандартные средства, например (может потребоваться права администратора):1451461. Откройте командную строку.1472. Свяжите правильную группу файлов со скриптами `.py`:148149 ```text150 assoc .py=Python.File151 ```1523. Перенаправьте все файлы Python на новый исполняемый файл:153154 ```text155 ftype Python.File=C:\Path\to\pythonw.exe "%1" %*156 ```157158## 3.4. Средство запуска Python для Windows159160Новое в версии 3.3.161162Программа-загрузчик Python для Windows – это служебная программа, которая помогает находить и запускать разные версии Python. Она позволяет скриптам (или командной строке) указать предпочтительную версию Python и затем находит и запускает эту версию.163164### 3.4.1. Начало работы165166#### 3.4.1.1. Из командной строки167168Убедитесь, что программа-загрузчик находится в переменной PATH – в зависимости от способа установки она может уже быть там, но проверьте на всякий случай, если это не так.169170В командной строке выполните следующую команду:171172```text173py174```175176Должна запуститься последняя установленная версия Python 2.x – её можно завершить обычным способом, а все дополнительные аргументы командной строки будут переданы напрямую Python.177178Если установлено несколько версий Python 2.x (например, 2.6 и 2.7), вы заметите, что запустилась Python 2.7. Чтобы запустить Python 2.6, попробуйте команду:179180```text181py -2.6182```183184Если установлен Python 3.x, попробуйте команду:185186```text187py -3188```189190Должна запуститься последняя версия Python 3.x.191192#### 3.4.1.2. Из скрипта193194Создадим тестовый скрипт Python – создайте файл с именем `hello.py` со следующим содержимым195196```text197#! python198import sys199sys.stdout.write("hello from Python %s\n" % (sys.version,))200```201202Из каталога, в котором находится hello.py, выполните команду:203204```text205py hello.py206```207208Вы должны заметить, что выводится номер версии вашей последней установки Python 2.x. Теперь попробуйте изменить первую строку на:209210```text211#! python3212```213214Повторный запуск команды теперь должен вывести информацию о последней версии Python 3.x. Как и в приведённых выше примерах с командной строкой, можно указать более точный квалификатор версии. Предположим, у вас установлен Python 2.6. Попробуйте изменить первую строку на `#! python2.6`, и вы должны увидеть информацию о версии 2.6.215216#### 3.4.1.3. Через ассоциации файлов217218Программа-загрузчик должна быть связана с файлами Python (т.е. файлами `.py`, `.pyw`, `.pyc`, `.pyo`) при установке. Это означает, что при двойном щелчке по одному из этих файлов в проводнике Windows будет использоваться программа-загрузчик, и поэтому можно использовать те же возможности, описанные выше, чтобы указать версию, которую следует использовать.219220Ключевое преимущество этого в том, что один загрузчик может одновременно поддерживать несколько версий Python в зависимости от содержимого первой строки.221222### 3.4.2. Shebang-строки223224Если первая строка файла скрипта начинается с `#!`, она называется «shebang»-строкой. Linux и другие Unix-подобные операционные системы имеют встроенную поддержку таких строк, и они обычно используются в таких системах для указания способа выполнения скрипта. Эта программа-загрузчик предоставляет те же возможности для использования с Python-скриптами в Windows, и приведённые выше примеры демонстрируют их применение.225226Чтобы обеспечить переносимость shebang-строк в сценариях Python между Unix и Windows, этот загрузчик поддерживает ряд «виртуальных» команд для указания того, какой интерпретатор использовать. Поддерживаемые виртуальные команды:227228- `/usr/bin/env python`229- `/usr/bin/python`230- `/usr/local/bin/python`231- `python`232233Например, если первая строка вашего сценария начинается с234235```text236#! /usr/bin/python237```238239Будет найдена и использована версия Python по умолчанию. Поскольку многие скрипты Python, написанные для работы в Unix, уже содержат эту строку, такие скрипты будут работать с программой-загрузчиком без изменений. Если вы пишете новый скрипт в Windows, который, как вы надеетесь, будет полезен в Unix, следует использовать shebang-строку, начинающуюся с `/usr`.240241### 3.4.3. Аргументы в shebang-строках242243Shebang-строки также могут указывать дополнительные параметры, передаваемые интерпретатору Python. Например, если у вас есть shebang-строка:244245```text246#! /usr/bin/python -v247```248249Тогда Python будет запущен с опцией `-v`250251### 3.4.4. Настройка252253#### 3.4.4.1. Настройка через INI-файлы254255> Программа-загрузчик будет искать два .ini-файла: `py.ini` в каталоге «данных приложения» текущего пользователя (т.е. в каталоге, возвращаемом вызовом функции Windows SHGetFolderPath с CSIDL\_LOCAL\_APPDATA) и `py.ini` в том же каталоге, где находится программа-загрузчик. Эти же .ini-файлы используются как для «консольной» версии загрузчика (т.е. py.exe), так и для «оконной» версии (т.е. pyw.exe).256>257> Настройка, указанная в «каталоге приложения», имеет приоритет над настройками рядом с исполняемым файлом, поэтому пользователь, у которого может не быть прав на запись в .ini-файл рядом с программой-загрузчиком, может переопределить команды в этом глобальном .ini-файле.258259#### 3.4.4.2. Настройка версий Python по умолчанию260261В некоторых случаях в команду можно включить уточнитель версии, чтобы указать, какая версия Python будет использоваться командой. Уточнитель версии начинается с номера старшей версии и может опционально содержать точку («.») и указатель младшей версии. Если указана младшая версия, за ней может опционально следовать «-32» для обозначения 32-разрядной реализации этой версии.262263Например, shebang-строка `#!python` не содержит квалификатора версии, тогда как `#!python3` содержит квалификатор версии, указывающий только старшую версию.264265Если в команде не найдено ни одного квалификатора версии, можно задать переменную окружения `PY_PYTHON`, чтобы указать квалификатор версии по умолчанию – значение по умолчанию – «2». Обратите внимание, что это значение может указывать только старшую версию (например, «2») или квалификатор major.minor (например, «2.6»), или даже major.minor-32.266267Если не найдено ни одного квалификатора младшей версии, можно задать переменную окружения `PY_PYTHON{major}` (где `{major}` – это текущий квалификатор старшей версии, определённый выше) для указания полной версии. Если такой параметр не найден, программа-загрузчик перечислит установленные версии Python и будет использовать последний младший выпуск для данной старшей версии, который, скорее всего (хотя это не гарантируется), является самой последней установленной версией в этом семействе.268269В 64-разрядной Windows, где установлены и 32-разрядная, и 64-разрядная реализации одной и той же версии Python (major.minor), всегда будет предпочитаться 64-разрядная версия. Это справедливо как для 32-разрядной, так и для 64-разрядной реализации загрузчика – 32-разрядный загрузчик предпочтёт запустить 64-разрядную установку Python указанной версии, если она доступна. Это сделано для того, чтобы поведение загрузчика можно было предсказать, зная только, какие версии установлены на ПК, независимо от порядка их установки (то есть без знания того, какая версия – 32- или 64-разрядная – Python и соответствующего загрузчика была установлена последней). Как уже отмечалось, для изменения этого поведения можно использовать необязательный суффикс «-32» в спецификаторе версии.270271Примеры:272273- Если не заданы соответствующие параметры, команды `python` и `python2` будут использовать последнюю установленную версию Python 2.x, а команда `python3` – последнюю установленную версию Python 3.x.274- Команды `python3.1` и `python2.7` не будут учитывать никакие параметры, поскольку версии полностью указаны.275- Если `PY_PYTHON=3`, то команды `python` и `python3` будут использовать последнюю установленную версию Python 3.276- Если `PY_PYTHON=3.1-32`, команда `python` будет использовать 32-битную реализацию версии 3.1, тогда как команда `python3` будет использовать последнюю установленную версию Python (PY\_PYTHON не учитывалась, так как была указана старшая версия).277- Если заданы `PY_PYTHON=3` и `PY_PYTHON3=3.1`, то команды `python` и `python3` будут использовать именно версию 3.1.278279Помимо переменных окружения, те же настройки можно задать в INI-файле, используемом программой запуска. Раздел в INI-файле называется `[defaults]`, а имя ключа будет совпадать с именем переменной окружения без префикса `PY_` (обратите внимание, что имена ключей в INI-файле нечувствительны к регистру). Содержимое переменной окружения переопределяет настройки, указанные в INI-файле.280281Например:282283- Установка `PY_PYTHON=3.1` эквивалентна INI-файлу, содержащему:284285```text286[defaults]287python=3.1288```289290- Установка `PY_PYTHON=3` и `PY_PYTHON3=3.1` эквивалентна INI-файлу, содержащему:291292```text293[defaults]294python=3295python3=3.1296```297298### 3.4.5. Диагностика299300Если задана переменная окружения `PYLAUNCH_DEBUG` (с любым значением), программа запуска будет выводить диагностическую информацию в stderr (то есть в консоль). Хотя эта информация одновременно является и подробной, *и* краткой, она позволит увидеть, какие версии Python были найдены, почему выбрана конкретная версия и точная командная строка, использованная для запуска целевого Python.301302## 3.5. Дополнительные модули303304Хотя Python стремится быть переносимым между всеми платформами, существуют функции, уникальные для Windows. Ряд модулей, как в стандартной библиотеке, так и внешних, а также фрагменты кода позволяют использовать эти возможности.305306Стандартные модули, специфичные для Windows, описаны в [*Специфичные службы MS Windows*](https://python-all.ru/3.3/library/windows.html#mswin-specific-services).307308### 3.5.1. PyWin32309310Модуль [PyWin32](https://python-all.ru/3.3/using/windows.html) от Марка Хаммонда – это набор модулей для расширенной поддержки Windows. Он включает утилиты для:311312- [Компонентная объектная модель](https://python-all.ru/3.3/using/windows.html) (COM)313- Вызовы Win32 API314- Реестр315- Журнал событий316- [Microsoft Foundation Classes](https://python-all.ru/3.3/using/windows.html) (MFC) пользовательские интерфейсы317318[PythonWin](https://python-all.ru/3.3/using/windows.html) – это пример MFC-приложения, поставляемого с PyWin32. Это встраиваемая среда разработки со встроенным отладчиком.319320> **См. также**321>322> **[Win32: как мне...?](https://python-all.ru/3.3/using/windows.html)**323>324> Тим Голден325>326> **[Python и COM](https://python-all.ru/3.3/using/windows.html)**327>328> Дэвид и Пол Бодди329330### 3.5.2. cx\_Freeze331332[cx\_Freeze](https://python-all.ru/3.3/using/windows.html) – это расширение [`distutils`](https://python-all.ru/3.3/library/distutils.html#module-distutils) (см. [*Extending Distutils*](https://python-all.ru/3.3/distutils/extending.html#extending-distutils)), которое упаковывает скрипты Python в исполняемые программы Windows (файлы `*.exe`). После этого можно распространять приложение без необходимости установки Python пользователями.333334### 3.5.3. WConio335336Поскольку расширенный уровень управления терминалом Python, [`curses`](https://python-all.ru/3.3/library/curses.html#module-curses), ограничен системами, подобными Unix, существует также библиотека, эксклюзивная для Windows: Windows Console I/O для Python.337338[WConio](https://python-all.ru/3.3/using/windows.html) – это обёртка для `CONIO.H` из Turbo-C, используемая для создания текстовых пользовательских интерфейсов.339340## 3.6. Компиляция Python в Windows341342Если вы хотите скомпилировать CPython самостоятельно, первым делом нужно получить [исходный код](https://python-all.ru/3.3/using/windows.html). Можно загрузить исходный код последнего релиза или просто взять свежую [копию из репозитория](https://python-all.ru/3.3/devguide/setup/index.html#checking-out-the-code).343344Исходное дерево содержит решение для сборки и файлы проектов для Microsoft Visual C++, который является компилятором, используемым для сборки официальных выпусков Python. Смотрите `readme.txt` в соответствующих каталогах:345346| Каталог | Версия MSVC | Версия Visual Studio |347| --- | --- | --- |348| `PC/VC6/` | 6.0 | 97 |349| `PC/VS7.1/` | 7.1 | 2003 |350| `PC/VS8.0/` | 8.0 | 2005 |351| `PC/VS9.0/` | 9.0 | 2008 |352| `PCbuild/` | 10.0 | 2010 |353354Обратите внимание, что любые каталоги сборки внутри каталога `PC` не обязательно полностью поддерживаются. Каталог `PCbuild` содержит файлы для компилятора, используемого для сборки официального выпуска.355356Проверьте `PCbuild/readme.txt` для получения общей информации о процессе сборки.357358Для модулей-расширений обратитесь к [*Сборка расширений C и C++ в Windows*](https://python-all.ru/3.3/extending/windows.html#building-on-windows).359360> **См. также**361>362> **[Python + Windows + distutils + SWIG + gcc MinGW](https://python-all.ru/3.3/using/windows.html)**363>364> или «Создание расширений Python на C/C++ с помощью SWIG и компиляция с MinGW gcc под Windows» или «Установка расширения Python с помощью distutils и без Microsoft Visual C++» от Sébastien Sauvage, 2003365>366> **[MingW – расширения Python](https://python-all.ru/3.3/using/windows.html)**367>368> Трент Аптед и др., 2007369370## 3.7. Другие ресурсы371372> **См. также**373>374> **[Программирование на Python в Win32](https://python-all.ru/3.3/using/windows.html)**375>376> «Help for Windows Programmers» Марк Хаммонд и Энди Робинсон, O’Reilly Media, 2000, ISBN 1-56592-621-8377>378> **[Руководство по Python для Windows](https://python-all.ru/3.3/using/windows.html)**379>380> Аманда Бирмингем, 2004381>382> **[**PEP 397**](https://python-all.ru/3.3/using/windows.html) – загрузчик Python для Windows**383>384> Предложение о включении лаунчера в дистрибутив Python.385